loplugin:stringconstant look for unnecessary OString constructor use

and tweak the methods in check.hxx to make them more flexible when
called with
   dc.Class(xxx ? "foo" : "bar")

Change-Id: I881fe628f22121ced4d8849715d6b1c92b092da1
Reviewed-on: https://gerrit.libreoffice.org/64207
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
This commit is contained in:
Noel Grandin 2018-11-29 08:46:47 +02:00
parent b9c9c70157
commit 933660e591
28 changed files with 201 additions and 153 deletions

View File

@ -24,8 +24,8 @@ class TerminalCheck;
namespace detail {
template<std::size_t N> ContextCheck checkRecordDecl(
clang::Decl const * decl, clang::TagTypeKind tag, char const (& id)[N]);
inline ContextCheck checkRecordDecl(
clang::Decl const * decl, clang::TagTypeKind tag, llvm::StringRef id);
}
@ -59,16 +59,13 @@ public:
TypeCheck LvalueReference() const;
template<std::size_t N> inline ContextCheck Class(char const (& id)[N])
const;
inline ContextCheck Class(llvm::StringRef id) const;
template<std::size_t N> inline ContextCheck Struct(char const (& id)[N])
const;
inline ContextCheck Struct(llvm::StringRef id) const;
TypeCheck Typedef() const;
template<std::size_t N> inline ContextCheck Typedef(char const (& id)[N])
const;
inline ContextCheck Typedef(llvm::StringRef id) const;
TypeCheck NotSubstTemplateTypeParmType() const;
@ -84,22 +81,17 @@ public:
explicit operator bool() const { return decl_ != nullptr; }
template<std::size_t N> inline ContextCheck Class(char const (& id)[N])
const;
inline ContextCheck Class(llvm::StringRef id) const;
template<std::size_t N> inline ContextCheck Struct(char const (& id)[N])
const;
inline ContextCheck Struct(llvm::StringRef id) const;
template<std::size_t N> inline ContextCheck Union(char const (& id)[N])
const;
inline ContextCheck Union(llvm::StringRef id) const;
template<std::size_t N> inline ContextCheck Function(char const (& id)[N])
const;
inline ContextCheck Function(llvm::StringRef id) const;
ContextCheck Operator(clang::OverloadedOperatorKind op) const;
template<std::size_t N> inline ContextCheck Var(char const (& id)[N])
const;
inline ContextCheck Var(llvm::StringRef id) const;
ContextCheck MemberFunction() const;
@ -113,24 +105,21 @@ public:
TerminalCheck GlobalNamespace() const;
template<std::size_t N> inline ContextCheck Namespace(
char const (& id)[N]) const;
inline ContextCheck Namespace(llvm::StringRef id) const;
TerminalCheck StdNamespace() const;
ContextCheck AnonymousNamespace() const;
template<std::size_t N> inline ContextCheck Class(char const (& id)[N])
const;
inline ContextCheck Class(llvm::StringRef id) const;
template<std::size_t N> inline ContextCheck Struct(char const (& id)[N])
const;
inline ContextCheck Struct(llvm::StringRef id) const;
private:
friend DeclCheck;
friend TypeCheck;
template<std::size_t N> friend ContextCheck detail::checkRecordDecl(
clang::Decl const * decl, clang::TagTypeKind tag, char const (& id)[N]);
friend ContextCheck detail::checkRecordDecl(
clang::Decl const * decl, clang::TagTypeKind tag, llvm::StringRef id);
explicit ContextCheck(clang::DeclContext const * context = nullptr):
context_(context) {}
@ -153,13 +142,13 @@ private:
namespace detail {
template<std::size_t N> ContextCheck checkRecordDecl(
clang::Decl const * decl, clang::TagTypeKind tag, char const (& id)[N])
ContextCheck checkRecordDecl(
clang::Decl const * decl, clang::TagTypeKind tag, llvm::StringRef id)
{
auto r = llvm::dyn_cast_or_null<clang::RecordDecl>(decl);
if (r != nullptr && r->getTagKind() == tag) {
auto const i = r->getIdentifier();
if (i != nullptr && i->isStr(id)) {
if (i != nullptr && i->getName() == id) {
return ContextCheck(r->getDeclContext());
}
}
@ -168,7 +157,7 @@ template<std::size_t N> ContextCheck checkRecordDecl(
}
template<std::size_t N> ContextCheck TypeCheck::Class(char const (& id)[N])
ContextCheck TypeCheck::Class(llvm::StringRef id)
const
{
if (!type_.isNull()) {
@ -180,8 +169,7 @@ template<std::size_t N> ContextCheck TypeCheck::Class(char const (& id)[N])
return ContextCheck();
}
template<std::size_t N> ContextCheck TypeCheck::Struct(char const (& id)[N])
const
ContextCheck TypeCheck::Struct(llvm::StringRef id) const
{
if (!type_.isNull()) {
auto const t = type_->getAs<clang::RecordType>();
@ -192,15 +180,14 @@ template<std::size_t N> ContextCheck TypeCheck::Struct(char const (& id)[N])
return ContextCheck();
}
template<std::size_t N> ContextCheck TypeCheck::Typedef(char const (& id)[N])
const
ContextCheck TypeCheck::Typedef(llvm::StringRef id) const
{
if (!type_.isNull()) {
if (auto const t = type_->getAs<clang::TypedefType>()) {
auto const d = t->getDecl();
auto const i = d->getIdentifier();
assert(i != nullptr);
if (i->isStr(id)) {
if (i->getName() == id) {
return ContextCheck(d->getDeclContext());
}
}
@ -208,58 +195,52 @@ template<std::size_t N> ContextCheck TypeCheck::Typedef(char const (& id)[N])
return ContextCheck();
}
template<std::size_t N> ContextCheck DeclCheck::Class(char const (& id)[N])
const
ContextCheck DeclCheck::Class(llvm::StringRef id) const
{
return detail::checkRecordDecl(decl_, clang::TTK_Class, id);
}
template<std::size_t N> ContextCheck DeclCheck::Struct(char const (& id)[N])
const
ContextCheck DeclCheck::Struct(llvm::StringRef id) const
{
return detail::checkRecordDecl(decl_, clang::TTK_Struct, id);
}
template<std::size_t N> ContextCheck DeclCheck::Union(char const (& id)[N])
const
ContextCheck DeclCheck::Union(llvm::StringRef id) const
{
return detail::checkRecordDecl(decl_, clang::TTK_Union, id);
}
template<std::size_t N> ContextCheck DeclCheck::Function(char const (& id)[N])
const
ContextCheck DeclCheck::Function(llvm::StringRef id) const
{
auto f = llvm::dyn_cast_or_null<clang::FunctionDecl>(decl_);
if (f != nullptr) {
auto const i = f->getIdentifier();
if (i != nullptr && i->isStr(id)) {
if (i != nullptr && i->getName() == id) {
return ContextCheck(f->getDeclContext());
}
}
return ContextCheck();
}
template<std::size_t N> ContextCheck DeclCheck::Var(char const (& id)[N])
const
ContextCheck DeclCheck::Var(llvm::StringRef id) const
{
auto f = llvm::dyn_cast_or_null<clang::VarDecl>(decl_);
if (f != nullptr) {
auto const i = f->getIdentifier();
if (i != nullptr && i->isStr(id)) {
if (i != nullptr && i->getName() == id) {
return ContextCheck(f->getDeclContext());
}
}
return ContextCheck();
}
template<std::size_t N> ContextCheck ContextCheck::Namespace(
char const (& id)[N]) const
ContextCheck ContextCheck::Namespace(llvm::StringRef id) const
{
if (context_) {
auto n = llvm::dyn_cast<clang::NamespaceDecl>(context_);
if (n != nullptr) {
auto const i = n->getIdentifier();
if (i != nullptr && i->isStr(id)) {
if (i != nullptr && i->getName() == id) {
return ContextCheck(n->getParent());
}
}
@ -267,15 +248,13 @@ template<std::size_t N> ContextCheck ContextCheck::Namespace(
return ContextCheck();
}
template<std::size_t N> ContextCheck ContextCheck::Class(char const (& id)[N])
const
ContextCheck ContextCheck::Class(llvm::StringRef id) const
{
return detail::checkRecordDecl(
llvm::dyn_cast_or_null<clang::Decl>(context_), clang::TTK_Class, id);
}
template<std::size_t N> ContextCheck ContextCheck::Struct(char const (& id)[N])
const
ContextCheck ContextCheck::Struct(llvm::StringRef id) const
{
return detail::checkRecordDecl(
llvm::dyn_cast_or_null<clang::Decl>(context_), clang::TTK_Struct, id);

View File

@ -163,10 +163,23 @@ private:
CallExpr const * expr, unsigned arg, FunctionDecl const * callee,
bool explicitFunctionalCastNotation);
void handleOStringCtor(
CallExpr const * expr, unsigned arg, FunctionDecl const * callee,
bool explicitFunctionalCastNotation);
void handleOUStringCtor(
Expr const * expr, Expr const * argExpr, FunctionDecl const * callee,
bool explicitFunctionalCastNotation);
void handleOStringCtor(
Expr const * expr, Expr const * argExpr, FunctionDecl const * callee,
bool explicitFunctionalCastNotation);
enum class StringKind { Unicode, Char };
void handleStringCtor(
Expr const * expr, Expr const * argExpr, FunctionDecl const * callee,
bool explicitFunctionalCastNotation, StringKind stringKind);
void handleFunArgOstring(
CallExpr const * expr, unsigned arg, FunctionDecl const * callee);
@ -268,6 +281,16 @@ bool StringConstant::VisitCallExpr(CallExpr const * expr) {
handleOUStringCtor(expr, i, fdecl, true);
}
}
if (loplugin::TypeCheck(t).NotSubstTemplateTypeParmType()
.LvalueReference().Const().NotSubstTemplateTypeParmType()
.Class("OString").Namespace("rtl").GlobalNamespace())
{
if (!(isLhsOfAssignment(fdecl, i)
|| hasOverloads(fdecl, expr->getNumArgs())))
{
handleOStringCtor(expr, i, fdecl, true);
}
}
}
loplugin::DeclCheck dc(fdecl);
//TODO: u.compareToAscii("foo") -> u.???("foo")
@ -1166,6 +1189,19 @@ bool StringConstant::VisitCXXConstructExpr(CXXConstructExpr const * expr) {
}
}
}
if (loplugin::TypeCheck(t).NotSubstTemplateTypeParmType()
.LvalueReference().Const().NotSubstTemplateTypeParmType()
.Class("OString").Namespace("rtl").GlobalNamespace())
{
auto argExpr = expr->getArg(i);
if (argExpr && i <= consDecl->getNumParams())
{
if (!hasOverloads(consDecl, expr->getNumArgs()))
{
handleOStringCtor(expr, argExpr, consDecl, true);
}
}
}
}
return true;
@ -1785,9 +1821,30 @@ void StringConstant::handleOUStringCtor(
handleOUStringCtor(expr, expr->getArg(arg), callee, explicitFunctionalCastNotation);
}
void StringConstant::handleOStringCtor(
CallExpr const * expr, unsigned arg, FunctionDecl const * callee,
bool explicitFunctionalCastNotation)
{
handleOStringCtor(expr, expr->getArg(arg), callee, explicitFunctionalCastNotation);
}
void StringConstant::handleOUStringCtor(
Expr const * expr, Expr const * argExpr, FunctionDecl const * callee,
bool explicitFunctionalCastNotation)
{
handleStringCtor(expr, argExpr, callee, explicitFunctionalCastNotation, StringKind::Unicode);
}
void StringConstant::handleOStringCtor(
Expr const * expr, Expr const * argExpr, FunctionDecl const * callee,
bool explicitFunctionalCastNotation)
{
handleStringCtor(expr, argExpr, callee, explicitFunctionalCastNotation, StringKind::Char);
}
void StringConstant::handleStringCtor(
Expr const * expr, Expr const * argExpr, FunctionDecl const * callee,
bool explicitFunctionalCastNotation, StringKind stringKind)
{
auto e0 = argExpr->IgnoreParenImpCasts();
auto e1 = dyn_cast<CXXFunctionalCastExpr>(e0);
@ -1808,7 +1865,7 @@ void StringConstant::handleOUStringCtor(
return;
}
if (!loplugin::DeclCheck(e3->getConstructor()).MemberFunction()
.Class("OUString").Namespace("rtl").GlobalNamespace())
.Class(stringKind == StringKind::Unicode ? "OUString" : "OString").Namespace("rtl").GlobalNamespace())
{
return;
}
@ -1825,7 +1882,7 @@ void StringConstant::handleOUStringCtor(
&& e3->getConstructor()->getNumParams() == 1
&& (loplugin::TypeCheck(
e3->getConstructor()->getParamDecl(0)->getType())
.Typedef("sal_Unicode").GlobalNamespace()))
.Typedef(stringKind == StringKind::Unicode ? "sal_Unicode" : "char").GlobalNamespace()))
{
// It may not be easy to rewrite OUString(c), esp. given there is no
// OUString ctor taking an OUStringLiteral1 arg, so don't warn there:

View File

@ -19,6 +19,13 @@ extern void foo(OUString const &);
struct Foo {
Foo(OUString const &, int) {}
Foo(OUString const &) {}
void foo(OUString const &) const {}
};
struct Foo2 {
Foo2(OString const &, int) {}
Foo2(OString const &) {}
void foo(OString const &) const {}
};
int main() {
@ -59,7 +66,10 @@ int main() {
Foo aFoo(OUString("xxx"), 1); // expected-error {{in call of 'Foo::Foo', replace 'OUString' constructed from a string literal directly with the string literal}}
(void)aFoo;
Foo aFoo2(OUString("xxx")); // expected-error {{in call of 'Foo::Foo', replace 'OUString' constructed from a string literal directly with the string literal}}
(void)aFoo2;
aFoo2.foo(OUString("xxx")); // expected-error {{in call of 'Foo::foo', replace 'OUString' constructed from a string literal directly with the string literal}}
Foo2 aFoo3(OString("xxx")); // expected-error {{in call of 'Foo2::Foo2', replace 'OUString' constructed from a string literal directly with the string literal}}
aFoo3.foo(OString("xxx")); // expected-error {{in call of 'Foo2::foo', replace 'OUString' constructed from a string literal directly with the string literal}}
(void) OUString("xxx", 3, RTL_TEXTENCODING_ASCII_US); // expected-error {{simplify construction of 'OUString' with string constant argument [loplugin:stringconstant]}}
(void) OUString("xxx", 3, RTL_TEXTENCODING_ISO_8859_1); // expected-error {{suspicious 'rtl::OUString' constructor with text encoding 12 but plain ASCII content; use 'RTL_TEXTENCODING_ASCII_US' instead [loplugin:stringconstant]}}

View File

@ -165,12 +165,12 @@ sal_Int32 MQueryHelper::executeQuery(OConnection* xConnection, MQueryExpression
else
{
// Let's try to retrieve the list in Collected Addresses book
pMork = xConnection->getMorkParser(OString("CollectedAddressBook"));
pMork = xConnection->getMorkParser("CollectedAddressBook");
if (std::find(pMork->lists_.begin(), pMork->lists_.end(), m_aAddressbook) == pMork->lists_.end())
{
// so the list is in Address book
// TODO : manage case where an address book has been created
pMork = xConnection->getMorkParser(OString("AddressBook"));
pMork = xConnection->getMorkParser("AddressBook");
}
handleListTable = true;
// retrieve row ids for that list table

View File

@ -41,12 +41,12 @@
#include "dp_misc_api.hxx"
#define LOCKFILE_GROUP OString( "Lockdata" )
#define LOCKFILE_USERKEY OString( "User" )
#define LOCKFILE_HOSTKEY OString( "Host" )
#define LOCKFILE_STAMPKEY OString( "Stamp" )
#define LOCKFILE_TIMEKEY OString( "Time" )
#define LOCKFILE_IPCKEY OString( "IPCServer" )
#define LOCKFILE_GROUP "Lockdata"
#define LOCKFILE_USERKEY "User"
#define LOCKFILE_HOSTKEY "Host"
#define LOCKFILE_STAMPKEY "Stamp"
#define LOCKFILE_TIMEKEY "Time"
#define LOCKFILE_IPCKEY "IPCServer"
namespace desktop {

View File

@ -155,7 +155,7 @@ namespace desktop {
Config aConfig(aLockname);
aConfig.SetGroup(LOCKFILE_GROUP);
OString aIPCserver = aConfig.ReadKey( LOCKFILE_IPCKEY );
if (!aIPCserver.equalsIgnoreAsciiCase(OString("true")))
if (!aIPCserver.equalsIgnoreAsciiCase("true"))
return false;
OString aHost = aConfig.ReadKey( LOCKFILE_HOSTKEY );

View File

@ -102,25 +102,25 @@ static void predefineXInterface(AstModule* pRoot)
{
// define the modules com::sun::star::uno
AstModule* pParentScope = pRoot;
AstModule* pModule = new AstModule(OString("com"), pParentScope);
AstModule* pModule = new AstModule("com", pParentScope);
pModule->setPredefined(true);
pParentScope->addDeclaration(pModule);
pParentScope = pModule;
pModule = new AstModule(OString("sun"), pParentScope);
pModule = new AstModule("sun", pParentScope);
pModule->setPredefined(true);
pParentScope->addDeclaration(pModule);
pParentScope = pModule;
pModule = new AstModule(OString("star"), pParentScope);
pModule = new AstModule("star", pParentScope);
pModule->setPredefined(true);
pParentScope->addDeclaration(pModule);
pParentScope = pModule;
pModule = new AstModule(OString("uno"), pParentScope);
pModule = new AstModule("uno", pParentScope);
pModule->setPredefined(true);
pParentScope->addDeclaration(pModule);
pParentScope = pModule;
// define XInterface
AstInterface* pInterface = new AstInterface(OString("XInterface"), nullptr, pParentScope);
AstInterface* pInterface = new AstInterface("XInterface", nullptr, pParentScope);
pInterface->setDefined();
pInterface->setPredefined(true);
pInterface->setPublished();
@ -128,21 +128,21 @@ static void predefineXInterface(AstModule* pRoot)
// define XInterface::queryInterface
AstOperation* pOp = new AstOperation(static_cast<AstType*>(pRoot->lookupPrimitiveType(ET_any)),
OString("queryInterface"), pInterface);
"queryInterface", pInterface);
AstParameter* pParam = new AstParameter(DIR_IN, false,
static_cast<AstType*>(pRoot->lookupPrimitiveType(ET_type)),
OString("aType"), pOp);
"aType", pOp);
pOp->addDeclaration(pParam);
pInterface->addMember(pOp);
// define XInterface::acquire
pOp = new AstOperation(static_cast<AstType*>(pRoot->lookupPrimitiveType(ET_void)),
OString("acquire"), pInterface);
"acquire", pInterface);
pInterface->addMember(pOp);
// define XInterface::release
pOp = new AstOperation(static_cast<AstType*>(pRoot->lookupPrimitiveType(ET_void)),
OString("release"), pInterface);
"release", pInterface);
pInterface->addMember(pOp);
}
@ -150,49 +150,49 @@ static void initializePredefinedTypes(AstModule* pRoot)
{
if ( pRoot )
{
AstBaseType* pPredefined = new AstBaseType(ET_long, OString("long"), pRoot);
AstBaseType* pPredefined = new AstBaseType(ET_long, "long", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_ulong, OString("unsigned long"), pRoot);
pPredefined = new AstBaseType(ET_ulong, "unsigned long", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_hyper, OString("hyper"), pRoot);
pPredefined = new AstBaseType(ET_hyper, "hyper", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_uhyper, OString("unsigned hyper"), pRoot);
pPredefined = new AstBaseType(ET_uhyper, "unsigned hyper", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_short, OString("short"), pRoot);
pPredefined = new AstBaseType(ET_short, "short", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_ushort, OString("unsigned short"), pRoot);
pPredefined = new AstBaseType(ET_ushort, "unsigned short", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_float, OString("float"), pRoot);
pPredefined = new AstBaseType(ET_float, "float", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_double, OString("double"), pRoot);
pPredefined = new AstBaseType(ET_double, "double", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_char, OString("char"), pRoot);
pPredefined = new AstBaseType(ET_char, "char", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_byte, OString("byte"), pRoot);
pPredefined = new AstBaseType(ET_byte, "byte", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_any, OString("any"), pRoot);
pPredefined = new AstBaseType(ET_any, "any", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_string, OString("string"), pRoot);
pPredefined = new AstBaseType(ET_string, "string", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_type, OString("type"), pRoot);
pPredefined = new AstBaseType(ET_type, "type", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_boolean, OString("boolean"), pRoot);
pPredefined = new AstBaseType(ET_boolean, "boolean", pRoot);
pRoot->addDeclaration(pPredefined);
pPredefined = new AstBaseType(ET_void, OString("void"), pRoot);
pPredefined = new AstBaseType(ET_void, "void", pRoot);
pRoot->addDeclaration(pPredefined);
}
}

View File

@ -210,8 +210,8 @@ bool copyFile(const OString* source, const OString& target)
sal_Int32 compileFile(const OString * pathname)
{
// preprocess input file
OString tmpFile = makeTempName(OString("idli_"));
OString preprocFile = makeTempName(OString("idlf_"));
OString tmpFile = makeTempName("idli_");
OString preprocFile = makeTempName("idlf_");
OString fileName;
if (pathname == nullptr) {

View File

@ -626,7 +626,7 @@ interface_dcl :
&& ifc->getScopedName() != "com::sun::star::uno::XInterface")
{
addInheritedInterface(
ifc, OString("::com::sun::star::uno::XInterface"), false,
ifc, "::com::sun::star::uno::XInterface", false,
OUString());
}
ifc->setDefined();

View File

@ -209,10 +209,10 @@ void HelpParser::ProcessHelp( LangHashMap* aLangHM , const OString& sCur , ResDa
OString sSourceText(
pXMLElement->ToOString().
replaceAll(
OString("\n"),
"\n",
OString()).
replaceAll(
OString("\t"),
"\t",
OString()));
// re-add spaces to the beginning of translated string,
// important for indentation of Basic code examples

View File

@ -237,13 +237,13 @@ static void checkFunctionNames(const OString& aLanguage)
{
case 0:
{
PoHeader hd(OString("formula/inc"));
PoHeader hd("formula/inc");
aPoOutput.writeHeader(hd);
break;
}
case 1:
{
PoHeader hd(OString("scaddins/inc"));
PoHeader hd("scaddins/inc");
aPoOutput.writeHeader(hd);
break;
}

View File

@ -431,7 +431,7 @@ ErrCode DictionaryNeo::saveEntries(const OUString &rURL)
// Always write as the latest version, i.e. DIC_VERSION_7
rtl_TextEncoding eEnc = RTL_TEXTENCODING_UTF8;
pStream->WriteLine(OString(pVerOOo7));
pStream->WriteLine(pVerOOo7);
ErrCode nErr = pStream->GetError();
if (nErr != ERRCODE_NONE)
return nErr;
@ -439,7 +439,7 @@ ErrCode DictionaryNeo::saveEntries(const OUString &rURL)
* undetermined or multiple? Earlier versions did not know about 'und' and
* 'mul' and 'zxx' codes. Sync with ReadDicVersion() */
if (LinguIsUnspecified(nLanguage))
pStream->WriteLine(OString("lang: <none>"));
pStream->WriteLine("lang: <none>");
else
{
OStringBuffer aLine("lang: ");
@ -449,9 +449,9 @@ ErrCode DictionaryNeo::saveEntries(const OUString &rURL)
if (ERRCODE_NONE != (nErr = pStream->GetError()))
return nErr;
if (eDicType == DictionaryType_POSITIVE)
pStream->WriteLine(OString("type: positive"));
pStream->WriteLine("type: positive");
else
pStream->WriteLine(OString("type: negative"));
pStream->WriteLine("type: negative");
if (aDicName.endsWith(EXTENSION_FOR_TITLE_TEXT))
{
pStream->WriteLine(OUStringToOString("title: " +
@ -460,7 +460,7 @@ ErrCode DictionaryNeo::saveEntries(const OUString &rURL)
}
if (ERRCODE_NONE != (nErr = pStream->GetError()))
return nErr;
pStream->WriteLine(OString("---"));
pStream->WriteLine("---");
if (ERRCODE_NONE != (nErr = pStream->GetError()))
return nErr;
for (Reference<XDictionaryEntry> & aEntrie : aEntries)

View File

@ -43,19 +43,19 @@ void Test::testStartsWithIgnoreAsciiCase() {
{
OString r;
CPPUNIT_ASSERT(
OString("foo").startsWithIgnoreAsciiCase(OString("F"), &r));
OString("foo").startsWithIgnoreAsciiCase("F", &r));
CPPUNIT_ASSERT_EQUAL(OString("oo"), r);
}
{
OString r("other");
CPPUNIT_ASSERT(
!OString("foo").startsWithIgnoreAsciiCase(OString("bar"), &r));
!OString("foo").startsWithIgnoreAsciiCase("bar", &r));
CPPUNIT_ASSERT_EQUAL(OString("other"), r);
}
{
OString r("other");
CPPUNIT_ASSERT(
!OString("foo").startsWithIgnoreAsciiCase(OString("foobar"), &r));
!OString("foo").startsWithIgnoreAsciiCase("foobar", &r));
CPPUNIT_ASSERT_EQUAL(OString("other"), r);
}

View File

@ -1109,7 +1109,7 @@ void FastSaxParserImpl::callbackStartElement(const xmlChar *localName , const xm
if( rEntity.maNamespaceCount.empty() )
{
rEntity.maNamespaceCount.push(0);
DefineNamespace( OString("xml"), "http://www.w3.org/XML/1998/namespace");
DefineNamespace( "xml", "http://www.w3.org/XML/1998/namespace");
}
else
{
@ -1176,7 +1176,7 @@ void FastSaxParserImpl::callbackStartElement(const xmlChar *localName , const xm
sNamespace = OUString( XML_CAST( namespaces[ i + 1 ] ), strlen( XML_CAST( namespaces[ i + 1 ] )), RTL_TEXTENCODING_UTF8 );
nNamespaceToken = GetNamespaceToken( sNamespace );
if( rEntity.mxNamespaceHandler.is() )
rEvent.mxDeclAttributes->addUnknown( OString( "" ), OString( XML_CAST( namespaces[ i + 1 ] ) ) );
rEvent.mxDeclAttributes->addUnknown( "", OString( XML_CAST( namespaces[ i + 1 ] ) ) );
}
}

View File

@ -96,8 +96,8 @@ void XclExpSetup::SaveXml( XclExpXmlStream& rStrm )
}
else
{
pAttrList->add( XML_paperWidth, OString::number( mrData.mnPaperWidth ).concat(OString("mm")).getStr() );
pAttrList->add( XML_paperHeight, OString::number( mrData.mnPaperHeight ).concat(OString("mm")).getStr() );
pAttrList->add( XML_paperWidth, OString::number( mrData.mnPaperWidth ).concat("mm").getStr() );
pAttrList->add( XML_paperHeight, OString::number( mrData.mnPaperHeight ).concat("mm").getStr() );
// pAttrList->add( XML_paperUnits, "mm" );
}
pAttrList->add( XML_scale, OString::number( mrData.mnScaling ).getStr() );

View File

@ -647,7 +647,7 @@ void VmlCommentExporter::Commit( EscherPropertyContainer& rProps, const tools::R
sal_Int32 VmlCommentExporter::StartShape()
{
AddShapeAttribute( XML_type, OString( "#_x0000_t202") );
AddShapeAttribute( XML_type, "#_x0000_t202" );
sal_Int32 nId = VMLExport::StartShape();

View File

@ -508,7 +508,7 @@ SAL_IMPLEMENT_MAIN_WITH_ARGS( argc, argv )
{
if( aFile.getLength() > 4 )
{
if( aFile.matchIgnoreAsciiCase( OString( ".pdf" ), aFile.getLength()-4 ) )
if( aFile.matchIgnoreAsciiCase( ".pdf", aFile.getLength()-4 ) )
aOutFile.append( pInFile, aFile.getLength() - 4 );
else
aOutFile.append( aFile );

View File

@ -23,6 +23,7 @@
#include <rtl/math.hxx>
#include <sal/log.hxx>
#include <utility>
#include <vcl/metaact.hxx>
#include <vcl/gdimtf.hxx>
#include <basegfx/numeric/ftools.hxx>
@ -73,7 +74,7 @@ namespace slideshow
MetaCommentAction* pAct = static_cast<MetaCommentAction*>(pCurrAct);
// skip comment if not a special XTEXT... comment
if( pAct->GetComment().matchIgnoreAsciiCase( OString("XTEXT") ) )
if( pAct->GetComment().matchIgnoreAsciiCase( "XTEXT" ) )
{
// fill classification vector with NOOPs,
// then insert corresponding classes at
@ -261,9 +262,9 @@ namespace slideshow
}
DrawShapeSubsetting::DrawShapeSubsetting( const DocTreeNode& rShapeSubset,
const GDIMetaFileSharedPtr& rMtf ) :
GDIMetaFileSharedPtr rMtf ) :
maActionClassVector(),
mpMtf( rMtf ),
mpMtf(std::move( rMtf )),
maSubset( rShapeSubset ),
maSubsetShapes(),
maCurrentSubsets(),

View File

@ -59,7 +59,7 @@ namespace slideshow
generated with verbose text comments switched on).
*/
DrawShapeSubsetting( const DocTreeNode& rShapeSubset,
const ::std::shared_ptr< GDIMetaFile >& rMtf );
::std::shared_ptr< GDIMetaFile > rMtf );
/// Forbid copy construction
DrawShapeSubsetting(const DrawShapeSubsetting&) = delete;

View File

@ -409,7 +409,7 @@ bool getRectanglesFromScrollMtf( ::basegfx::B2DRectangle& o_rScrollRect,
MetaCommentAction * pAct =
static_cast<MetaCommentAction *>(pCurrAct);
// skip comment if not a special XTEXT... comment
if( pAct->GetComment().matchIgnoreAsciiCase( OString("XTEXT") ) )
if( pAct->GetComment().matchIgnoreAsciiCase( "XTEXT" ) )
{
if (pAct->GetComment().equalsIgnoreAsciiCase("XTEXT_SCROLLRECT"))
{

View File

@ -119,7 +119,7 @@ DECLARE_TXTIMPORT_TEST(testTdf112191, "bullets.odt")
bool bSuccess = sw::XTextRangeToSwPaM(aPaM, xPara);
CPPUNIT_ASSERT(bSuccess);
assertExportedRange(OString("First bullet"), aPaM);
assertExportedRange("First bullet", aPaM);
// but when we extend to the next paragraph - now there are bullets
xPara = getParagraph(6);

View File

@ -133,6 +133,7 @@
#include <txtatr.hxx>
#include <osl/file.hxx>
#include <utility>
#include <vcl/embeddedfontshelper.hxx>
#include <svtools/miscopt.hxx>
@ -207,14 +208,14 @@ class FFDataWriterHelper
if ( !rHelp.isEmpty() )
m_pSerializer->singleElementNS( XML_w, XML_helpText,
FSNS(XML_w, XML_type), OString("text"),
FSNS(XML_w, XML_type), "text",
FSNS(XML_w, XML_val),
OUStringToOString( rHelp, RTL_TEXTENCODING_UTF8 ).getStr(),
FSEND );
if ( !rHint.isEmpty() )
m_pSerializer->singleElementNS( XML_w, XML_statusText,
FSNS(XML_w, XML_type), OString("text"),
FSNS(XML_w, XML_type), "text",
FSNS(XML_w, XML_val),
OUStringToOString( rHint, RTL_TEXTENCODING_UTF8 ).getStr(),
FSEND );
@ -225,7 +226,7 @@ class FFDataWriterHelper
m_pSerializer->endElementNS( XML_w, XML_ffData );
}
public:
explicit FFDataWriterHelper( const ::sax_fastparser::FSHelperPtr& rSerializer ) : m_pSerializer( rSerializer ){}
explicit FFDataWriterHelper( ::sax_fastparser::FSHelperPtr rSerializer ) : m_pSerializer(std::move( rSerializer )){}
void WriteFormCheckbox( const OUString& rName,
const OUString& rEntryMacro,
const OUString& rExitMacro,
@ -6769,14 +6770,14 @@ void DocxAttributeOutput::CharEscapement( const SvxEscapementItem& rEscapement )
FSNS( XML_w, XML_val ), sIss.getStr(), FSEND );
const SvxFontHeightItem& rItem = m_rExport.GetItem(RES_CHRATR_FONTSIZE);
if (sIss.isEmpty() || sIss.match(OString("baseline")))
if (sIss.isEmpty() || sIss.match("baseline"))
{
long nHeight = rItem.GetHeight();
OString sPos = OString::number( ( nHeight * nEsc + 500 ) / 1000 );
m_pSerializer->singleElementNS( XML_w, XML_position,
FSNS( XML_w, XML_val ), sPos.getStr( ), FSEND );
if( ( 100 != nProp || sIss.match( OString( "baseline" ) ) ) && !m_rExport.m_bFontSizeWritten )
if( ( 100 != nProp || sIss.match( "baseline" ) ) && !m_rExport.m_bFontSizeWritten )
{
OString sSize = OString::number( ( nHeight * nProp + 500 ) / 1000 );
m_pSerializer->singleElementNS( XML_w, XML_sz,
@ -7782,7 +7783,7 @@ void DocxAttributeOutput::ParaTabStop( const SvxTabStopItem& rTabStop )
if ( nCurrTab == nCount || pInheritedTabs->At(i) < rTabStop[nCurrTab] )
{
m_pSerializer->singleElementNS( XML_w, XML_tab,
FSNS( XML_w, XML_val ), OString("clear"),
FSNS( XML_w, XML_val ), "clear",
FSNS( XML_w, XML_pos ), OString::number(pInheritedTabs->At(i).GetTabPos()),
FSEND );
}

View File

@ -56,13 +56,13 @@ public:
{
Config aConfig(maConfigFile);
aConfig.SetGroup(OString("TestGroup"));
aConfig.SetGroup("TestGroup");
CPPUNIT_ASSERT_EQUAL(OString("TestGroup"), aConfig.GetGroup());
// so this is a quirk of Config - you can set the group name,
// but it might not exist so you really should first check if
// it exists via HasGroup()
aConfig.SetGroup(OString("TestGroupA"));
aConfig.SetGroup("TestGroupA");
CPPUNIT_ASSERT(!aConfig.HasGroup("TestGroupA"));
CPPUNIT_ASSERT_EQUAL(OString("TestGroupA"), aConfig.GetGroup());
}
@ -72,7 +72,7 @@ public:
{
Config aConfig(maConfigFile);
aConfig.DeleteGroup(OString("TestGroup"));
aConfig.DeleteGroup("TestGroup");
CPPUNIT_ASSERT(!aConfig.HasGroup("TestGroup"));
CPPUNIT_ASSERT_EQUAL(OString("TestGroup2"), aConfig.GetGroupName(0));
@ -86,7 +86,7 @@ public:
Config aConfig(maConfigFile);
CPPUNIT_ASSERT(!aConfig.HasGroup("NonExistentTestGroup"));
aConfig.DeleteGroup(OString("NonExistentTestGroup"));
aConfig.DeleteGroup("NonExistentTestGroup");
CPPUNIT_ASSERT_EQUAL(OString("TestGroup"), aConfig.GetGroupName(0));
sal_uInt16 nActual = aConfig.GetGroupCount();
@ -106,64 +106,64 @@ public:
void testReadKey()
{
Config aConfig(maConfigFile);
aConfig.SetGroup(OString("TestGroup"));
aConfig.SetGroup("TestGroup");
CPPUNIT_ASSERT_EQUAL(OString("testvalue"), aConfig.ReadKey(OString("testkey")));
CPPUNIT_ASSERT_EQUAL(OString(), aConfig.ReadKey(OString("nonexistenttestkey")));
CPPUNIT_ASSERT_EQUAL(OString("notexists"),
aConfig.ReadKey(OString("nonexistenttestkey"), OString("notexists")));
aConfig.ReadKey("nonexistenttestkey", "notexists"));
aConfig.SetGroup(OString("TestGroup2"));
aConfig.SetGroup("TestGroup2");
CPPUNIT_ASSERT_EQUAL(OString("testvalue"), aConfig.ReadKey(OString("testkey2")));
CPPUNIT_ASSERT_EQUAL(OString(), aConfig.ReadKey(OString("nonexistenttestkey")));
CPPUNIT_ASSERT_EQUAL(OString("notexists"),
aConfig.ReadKey(OString("nonexistenttestkey"), OString("notexists")));
aConfig.ReadKey("nonexistenttestkey", "notexists"));
}
void testGetKeyName()
{
Config aConfig(maConfigFile);
aConfig.SetGroup(OString("TestGroup"));
aConfig.SetGroup("TestGroup");
CPPUNIT_ASSERT_EQUAL(OString("testkey"), aConfig.GetKeyName(0));
aConfig.SetGroup(OString("TestGroup2"));
aConfig.SetGroup("TestGroup2");
CPPUNIT_ASSERT_EQUAL(OString("testkey2"), aConfig.GetKeyName(0));
}
void testWriteDeleteKey()
{
Config aConfig(maConfigFile);
aConfig.SetGroup(OString("TestGroup"));
aConfig.WriteKey(OString("testkey_new"), OString("testvalue"));
aConfig.SetGroup("TestGroup");
aConfig.WriteKey("testkey_new", "testvalue");
sal_uInt16 nExpected = 2;
sal_uInt16 nActual = aConfig.GetKeyCount();
CPPUNIT_ASSERT_EQUAL(nExpected, nActual);
CPPUNIT_ASSERT_EQUAL(OString("testvalue"), aConfig.ReadKey(OString("testkey_new")));
aConfig.DeleteKey(OString("testkey_new"));
aConfig.DeleteKey("testkey_new");
nExpected = 1;
nActual = aConfig.GetKeyCount();
CPPUNIT_ASSERT_EQUAL(nExpected, nActual);
CPPUNIT_ASSERT_EQUAL(OString(), aConfig.ReadKey(OString("testkey_new")));
aConfig.SetGroup(OString("TestGroup2"));
aConfig.WriteKey(OString("testkey_new"), OString("testvalue"));
aConfig.SetGroup("TestGroup2");
aConfig.WriteKey("testkey_new", "testvalue");
nActual = aConfig.GetKeyCount();
nExpected = 2;
CPPUNIT_ASSERT_EQUAL(nExpected, nActual);
CPPUNIT_ASSERT_EQUAL(OString("testvalue"), aConfig.ReadKey(OString("testkey_new")));
aConfig.DeleteKey(OString("testkey_new"));
aConfig.DeleteKey("testkey_new");
nActual = aConfig.GetKeyCount();
nExpected = 1;
CPPUNIT_ASSERT_EQUAL(nExpected, nActual);
CPPUNIT_ASSERT_EQUAL(OString(), aConfig.ReadKey(OString("testkey_new")));
aConfig.SetGroup(OString("TestGroup3"));
aConfig.WriteKey(OString("testkey_new_group3"), OString("testvalue"));
aConfig.SetGroup("TestGroup3");
aConfig.WriteKey("testkey_new_group3", "testvalue");
nActual = aConfig.GetKeyCount();
nExpected = 1;

View File

@ -1078,7 +1078,7 @@ PrinterGfx::DrawEPS( const tools::Rectangle& rBoundingBox, void* pPtr, sal_uInt3
char cChar = aLine[1];
if( cChar == '%' )
{
if( aLine.matchIgnoreAsciiCase( OString( "%%BoundingBox:") ) )
if( aLine.matchIgnoreAsciiCase( "%%BoundingBox:" ) )
{
aLine = WhitespaceToSpace( aLine.getToken(1, ':') );
if( !aLine.isEmpty() && aLine.indexOf( "atend" ) == -1 )

View File

@ -254,7 +254,7 @@ static bool passFileToCommandLine( const OUString& rFilename, const OUString& rC
// setup command line for exec
if( ! bPipe )
aCmdLine = aCmdLine.replaceAll(OString("(TMP)"), aFilename);
aCmdLine = aCmdLine.replaceAll("(TMP)", aFilename);
#if OSL_DEBUG_LEVEL > 1
fprintf( stderr, "%s commandline: \"%s\"\n",

View File

@ -625,19 +625,19 @@ void CPDManager::getOptionsFromDocumentSetup( const JobData& rJob, bool bBanner,
if (!sPayLoad.isEmpty()) {
OString aKey = OUStringToOString( pKey->getKey(), RTL_TEXTENCODING_ASCII_US );
OString aValue = OUStringToOString( sPayLoad, RTL_TEXTENCODING_ASCII_US );
if (aKey.equals(OString("Duplex"))) {
if (aKey.equals("Duplex")) {
aKey = OString("sides");
} else if (aKey.equals(OString("Resolution"))) {
} else if (aKey.equals("Resolution")) {
aKey = OString("printer-resolution");
} else if (aKey.equals(OString("PageSize"))) {
} else if (aKey.equals("PageSize")) {
aKey = OString("media");
}
if (aKey.equals(OString("sides"))) {
if (aValue.equals(OString("None"))) {
if (aKey.equals("sides")) {
if (aValue.equals("None")) {
aValue = OString("one-sided");
} else if (aValue.equals(OString("DuplexNoTumble"))) {
} else if (aValue.equals("DuplexNoTumble")) {
aValue = OString("two-sided-long-edge");
} else if (aValue.equals(OString("DuplexTumble"))) {
} else if (aValue.equals("DuplexTumble")) {
aValue = OString("two-sided-short-edge");
}
}

View File

@ -118,7 +118,7 @@ bool JobData::getStreamBuffer( void*& pData, sal_uInt32& bytes )
SvMemoryStream aStream;
// write header job data
aStream.WriteLine(OString("JobData 1"));
aStream.WriteLine("JobData 1");
OStringBuffer aLine;

View File

@ -710,7 +710,7 @@ PPDParser::PPDParser( const OUString& rFile ) :
OString aCurLine = aStream.ReadLine();
if( aCurLine.startsWith("*") )
{
if (aCurLine.matchIgnoreAsciiCase(OString("*include:")))
if (aCurLine.matchIgnoreAsciiCase("*include:"))
{
aCurLine = aCurLine.copy(9);
aCurLine = comphelper::string::stripStart(aCurLine, ' ');
@ -726,7 +726,7 @@ PPDParser::PPDParser( const OUString& rFile ) :
continue;
}
else if( ! bLanguageEncoding &&
aCurLine.matchIgnoreAsciiCase(OString("*languageencoding")) )
aCurLine.matchIgnoreAsciiCase("*languageencoding") )
{
bLanguageEncoding = true; // generally only the first one counts
OString aLower = aCurLine.toAsciiLowerCase();