[Libreoffice-commits] core.git: compilerplugins/clang extensions/source i18nlangtag/qa sc/source svl/qa sw/source ucb/source

Stephan Bergmann (via logerrit) logerrit at kemper.freedesktop.org
Fri Jul 9 13:07:37 UTC 2021


 compilerplugins/clang/stringadd.cxx            |   30 +++++++++++++++++++++++++
 compilerplugins/clang/test/stringadd.cxx       |   24 ++++++++++++++++++++
 extensions/source/bibliography/datman.cxx      |    4 ---
 i18nlangtag/qa/cppunit/test_languagetag.cxx    |    3 --
 sc/source/ui/miscdlgs/solveroptions.cxx        |    4 +--
 svl/qa/unit/lockfiles/test_lockfiles.cxx       |   16 +++----------
 sw/source/core/doc/doc.cxx                     |    3 --
 sw/source/core/tox/ToxTextGenerator.cxx        |    3 --
 sw/source/filter/ww8/rtfattributeoutput.cxx    |    4 +--
 sw/source/filter/ww8/wrtw8nds.cxx              |    4 +--
 sw/source/uibase/sidebar/PageMarginControl.cxx |    6 +----
 ucb/source/ucp/hierarchy/hierarchycontent.cxx  |    4 ---
 12 files changed, 71 insertions(+), 34 deletions(-)

New commits:
commit f020784e14a55c82418e4f231855040177ac9f82
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Fri Jul 9 13:04:19 2021 +0200
Commit:     Stephan Bergmann <sbergman at redhat.com>
CommitDate: Fri Jul 9 15:07:05 2021 +0200

    Make loplugin:stringadd slightly more aggressive
    
    ...by assuming that all const member functions are side-effect free.  (This
    presumably means that some of the special cases in
    StringAdd::isSideEffectFree are obsoleted by this more general case, but any
    such removal is postponed to later clean-up.)
    
    (Came across this when idly wondering why
    8b7f948d9d79393bc6c1b11d239706666fd5d7de "sc, VmlFormControlExporter: avoid
    OStringBuffer style" had not been found by the plugin before.)
    
    Change-Id: I6bca10df53885b14a590543aabd61f23b3748572
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/118675
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/compilerplugins/clang/stringadd.cxx b/compilerplugins/clang/stringadd.cxx
index c25992928f1e..394139dbb354 100644
--- a/compilerplugins/clang/stringadd.cxx
+++ b/compilerplugins/clang/stringadd.cxx
@@ -378,6 +378,36 @@ bool StringAdd::isSideEffectFree(Expr const* expr)
                         }
                     }
                 }
+                // Aggressively assume that calls to const member functions are side effect free (if
+                // all of the call's sub-expressions are):
+                if (calleeMethodDecl->isConst())
+                {
+                    auto sef = true;
+                    // Other options besides CXXMemberCallExpr are e.g. CXXOperatorCallExpr which
+                    // does not have such a target expression:
+                    if (auto const mce = dyn_cast<CXXMemberCallExpr>(callExpr))
+                    {
+                        if (!isSideEffectFree(mce->getImplicitObjectArgument()))
+                        {
+                            sef = false;
+                        }
+                    }
+                    if (sef)
+                    {
+                        for (unsigned i = 0; i != callExpr->getNumArgs(); ++i)
+                        {
+                            if (!isSideEffectFree(callExpr->getArg(i)))
+                            {
+                                sef = false;
+                                break;
+                            }
+                        }
+                    }
+                    if (sef)
+                    {
+                        return true;
+                    }
+                }
             }
         if (auto calleeFunctionDecl = dyn_cast_or_null<FunctionDecl>(callExpr->getCalleeDecl()))
             if (calleeFunctionDecl && calleeFunctionDecl->getIdentifier())
diff --git a/compilerplugins/clang/test/stringadd.cxx b/compilerplugins/clang/test/stringadd.cxx
index fb805ce519b9..a20b64698433 100644
--- a/compilerplugins/clang/test/stringadd.cxx
+++ b/compilerplugins/clang/test/stringadd.cxx
@@ -235,4 +235,28 @@ void f2(char ch)
     s = s + OString(ch);
 }
 }
+
+namespace test10
+{
+struct C
+{
+    OString constStringFunction(int) const;
+    OString nonConstStringFunction();
+    int constIntFunction() const;
+    int nonConstIntFunction();
+};
+
+C getC();
+
+void f1(C c)
+{
+    OString s;
+    // expected-error at +1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
+    s += c.constStringFunction(c.constIntFunction());
+    s += c.constStringFunction(c.nonConstIntFunction());
+    s += c.nonConstStringFunction();
+    s += getC().constStringFunction(c.constIntFunction());
+}
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
diff --git a/extensions/source/bibliography/datman.cxx b/extensions/source/bibliography/datman.cxx
index a492c839712e..875938b7924f 100644
--- a/extensions/source/bibliography/datman.cxx
+++ b/extensions/source/bibliography/datman.cxx
@@ -848,9 +848,7 @@ void BibDataManager::startQueryWith(const OUString& rQuery)
     OUString aQueryString;
     if(!rQuery.isEmpty())
     {
-        aQueryString=aQuoteChar;
-        aQueryString+=getQueryField();
-        aQueryString+=aQuoteChar + " like '";
+        aQueryString=aQuoteChar + getQueryField() + aQuoteChar + " like '";
         OUString sQuery = rQuery.replaceAll("?","_").replaceAll("*","%");
         aQueryString += sQuery + "%'";
     }
diff --git a/i18nlangtag/qa/cppunit/test_languagetag.cxx b/i18nlangtag/qa/cppunit/test_languagetag.cxx
index bd6f1b27bf22..4fcc05785f2e 100644
--- a/i18nlangtag/qa/cppunit/test_languagetag.cxx
+++ b/i18nlangtag/qa/cppunit/test_languagetag.cxx
@@ -760,8 +760,7 @@ void TestLanguageTag::testAllIsoLangEntries()
         LanguageTag aTagID( elem.mnLang);
         if (!checkMapping( elem.maBcp47, aTagString.getBcp47()))
         {
-            OString aMessage( OUStringToOString( elem.maBcp47, RTL_TEXTENCODING_ASCII_US));
-            aMessage += " -> " + OUStringToOString( aTagString.getBcp47(), RTL_TEXTENCODING_ASCII_US);
+            OString aMessage( OUStringToOString( elem.maBcp47, RTL_TEXTENCODING_ASCII_US) + " -> " + OUStringToOString( aTagString.getBcp47(), RTL_TEXTENCODING_ASCII_US) );
             CPPUNIT_ASSERT_EQUAL_MESSAGE( aMessage.getStr(), aTagString.getBcp47(), elem.maBcp47 );
         }
         if (elem.maBcp47 != aTagID.getBcp47())
diff --git a/sc/source/ui/miscdlgs/solveroptions.cxx b/sc/source/ui/miscdlgs/solveroptions.cxx
index 07d86f5a9ee5..b82654b5f5d5 100644
--- a/sc/source/ui/miscdlgs/solveroptions.cxx
+++ b/sc/source/ui/miscdlgs/solveroptions.cxx
@@ -286,8 +286,8 @@ void ScSolverOptionsDialog::EditOption()
             {
                 pStringItem->SetIntValue(m_xIntDialog->GetValue());
 
-                OUString sTxt(pStringItem->GetText() + ": ");
-                sTxt += OUString::number(pStringItem->GetIntValue());
+                OUString sTxt(
+                    pStringItem->GetText() + ": " + OUString::number(pStringItem->GetIntValue()));
 
                 m_xLbSettings->set_text(nEntry, sTxt, 0);
             }
diff --git a/svl/qa/unit/lockfiles/test_lockfiles.cxx b/svl/qa/unit/lockfiles/test_lockfiles.cxx
index 78e17f2ca5d1..b2bba0f9ce3c 100644
--- a/svl/qa/unit/lockfiles/test_lockfiles.cxx
+++ b/svl/qa/unit/lockfiles/test_lockfiles.cxx
@@ -129,9 +129,7 @@ void LockfileTest::testLOLockFileContent()
     // User name
     sal_Int32 nFirstChar = 0;
     sal_Int32 nNextComma = sLockFileContent.indexOf(',', nFirstChar);
-    OUString sUserName;
-    sUserName += aUserOpt.GetFirstName() + " ";
-    sUserName += aUserOpt.GetLastName();
+    OUString sUserName = aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName();
     CPPUNIT_ASSERT_EQUAL(sUserName, sLockFileContent.copy(nFirstChar, nNextComma - nFirstChar));
 
     // System user name
@@ -403,9 +401,7 @@ void LockfileTest::testWordLockFileContent()
     aLockFile.RemoveFileDirectly();
 
     // First character is the size of the user name
-    OUString sUserName;
-    sUserName += aUserOpt.GetFirstName() + " ";
-    sUserName += aUserOpt.GetLastName();
+    OUString sUserName = aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName();
     int nIndex = 0;
     CPPUNIT_ASSERT_EQUAL(sUserName.getLength(), static_cast<sal_Int32>(sLockFileContent[nIndex]));
 
@@ -457,9 +453,7 @@ void LockfileTest::testExcelLockFileContent()
     aLockFile.RemoveFileDirectly();
 
     // First character is the size of the user name
-    OUString sUserName;
-    sUserName += aUserOpt.GetFirstName() + " ";
-    sUserName += aUserOpt.GetLastName();
+    OUString sUserName = aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName();
     int nIndex = 0;
     CPPUNIT_ASSERT_EQUAL(sUserName.getLength(), static_cast<sal_Int32>(sLockFileContent[nIndex]));
 
@@ -516,9 +510,7 @@ void LockfileTest::testPowerPointLockFileContent()
     aLockFile.RemoveFileDirectly();
 
     // First character is the size of the user name
-    OUString sUserName;
-    sUserName += aUserOpt.GetFirstName() + " ";
-    sUserName += aUserOpt.GetLastName();
+    OUString sUserName = aUserOpt.GetFirstName() + " " + aUserOpt.GetLastName();
     int nIndex = 0;
     CPPUNIT_ASSERT_EQUAL(sUserName.getLength(), static_cast<sal_Int32>(sLockFileContent[nIndex]));
 
diff --git a/sw/source/core/doc/doc.cxx b/sw/source/core/doc/doc.cxx
index e1929ca2978a..6539cc5fd1db 100644
--- a/sw/source/core/doc/doc.cxx
+++ b/sw/source/core/doc/doc.cxx
@@ -566,8 +566,7 @@ static void lcl_FormatPostIt(
             " ";
     }
     aStr += SwViewShell::GetShellRes()->aPostItAuthor;
-    aStr += sTmp;
-    aStr += pField->GetPar1() + " ";
+    aStr += sTmp + pField->GetPar1() + " ";
     SvtSysLocale aSysLocale;
     aStr += /*(LocaleDataWrapper&)*/aSysLocale.GetLocaleData().getDate( pField->GetDate() );
     if(pField->GetResolved())
diff --git a/sw/source/core/tox/ToxTextGenerator.cxx b/sw/source/core/tox/ToxTextGenerator.cxx
index 199e30256475..b1c3cd013d8a 100644
--- a/sw/source/core/tox/ToxTextGenerator.cxx
+++ b/sw/source/core/tox/ToxTextGenerator.cxx
@@ -154,8 +154,7 @@ ToxTextGenerator::GenerateTextForChapterToken(const SwFormToken& chapterToken, c
         retval += aField.GetNumber(pLayout); // get the string number without pre/postfix
     }
     else if (CF_NUMBER_NOPREPST == chapterToken.nChapterFormat || CF_NUM_TITLE == chapterToken.nChapterFormat) {
-        retval += aField.GetNumber(pLayout) + " ";
-        retval += aField.GetTitle(pLayout);
+        retval += aField.GetNumber(pLayout) + " " + aField.GetTitle(pLayout);
     } else if (CF_TITLE == chapterToken.nChapterFormat) {
         retval += aField.GetTitle(pLayout);
     }
diff --git a/sw/source/filter/ww8/rtfattributeoutput.cxx b/sw/source/filter/ww8/rtfattributeoutput.cxx
index 34e6cabd0591..5759c4f60c89 100644
--- a/sw/source/filter/ww8/rtfattributeoutput.cxx
+++ b/sw/source/filter/ww8/rtfattributeoutput.cxx
@@ -518,8 +518,8 @@ void RtfAttributeOutput::StartRuby(const SwTextNode& rNode, sal_Int32 /*nPos*/,
 {
     WW8Ruby aWW8Ruby(rNode, rRuby, GetExport());
     OUString aStr(FieldString(ww::eEQ) + "\\* jc");
-    aStr += OUString::number(aWW8Ruby.GetJC()) + " \\* \"Font:";
-    aStr += aWW8Ruby.GetFontFamily() + "\" \\* hps";
+    aStr += OUString::number(aWW8Ruby.GetJC()) + " \\* \"Font:" + aWW8Ruby.GetFontFamily()
+            + "\" \\* hps";
     aStr += OUString::number((aWW8Ruby.GetRubyHeight() + 5) / 10) + " \\o";
     if (aWW8Ruby.GetDirective())
     {
diff --git a/sw/source/filter/ww8/wrtw8nds.cxx b/sw/source/filter/ww8/wrtw8nds.cxx
index da5253f723b7..e40c7eeb5138 100644
--- a/sw/source/filter/ww8/wrtw8nds.cxx
+++ b/sw/source/filter/ww8/wrtw8nds.cxx
@@ -903,8 +903,8 @@ void WW8AttributeOutput::StartRuby( const SwTextNode& rNode, sal_Int32 /*nPos*/,
 {
     WW8Ruby aWW8Ruby(rNode, rRuby, GetExport());
     OUString aStr( FieldString( ww::eEQ ) + "\\* jc" );
-    aStr += OUString::number(aWW8Ruby.GetJC()) + " \\* \"Font:";
-    aStr += aWW8Ruby.GetFontFamily() + "\" \\* hps";
+    aStr += OUString::number(aWW8Ruby.GetJC()) + " \\* \"Font:" + aWW8Ruby.GetFontFamily()
+        + "\" \\* hps";
     aStr += OUString::number((aWW8Ruby.GetRubyHeight() + 5) / 10) + " \\o";
     if (aWW8Ruby.GetDirective())
     {
diff --git a/sw/source/uibase/sidebar/PageMarginControl.cxx b/sw/source/uibase/sidebar/PageMarginControl.cxx
index 3dfd61a1f6fa..19da13693b6a 100644
--- a/sw/source/uibase/sidebar/PageMarginControl.cxx
+++ b/sw/source/uibase/sidebar/PageMarginControl.cxx
@@ -330,11 +330,9 @@ void PageMarginControl::FillHelpText( const bool bUserCustomValuesAvailable )
         aHelpText += m_xWidthHeightField->get_text();
         aHelpText += m_bUserCustomMirrored ? aOuter : aRight;
         SetMetricValue( *m_xWidthHeightField, m_nUserCustomPageRightMargin, m_eUnit );
-        aHelpText += m_xWidthHeightField->get_text();
-        aHelpText += aTop;
+        aHelpText += m_xWidthHeightField->get_text() + aTop;
         SetMetricValue( *m_xWidthHeightField, m_nUserCustomPageTopMargin, m_eUnit );
-        aHelpText += m_xWidthHeightField->get_text();
-        aHelpText += aBottom;
+        aHelpText += m_xWidthHeightField->get_text() + aBottom;
         SetMetricValue( *m_xWidthHeightField, m_nUserCustomPageBottomMargin, m_eUnit );
         aHelpText += m_xWidthHeightField->get_text();
     }
diff --git a/ucb/source/ucp/hierarchy/hierarchycontent.cxx b/ucb/source/ucp/hierarchy/hierarchycontent.cxx
index 76391b4bfc51..c92264fc4c16 100644
--- a/ucb/source/ucp/hierarchy/hierarchycontent.cxx
+++ b/ucb/source/ucp/hierarchy/hierarchycontent.cxx
@@ -1365,9 +1365,7 @@ void HierarchyContent::insert( sal_Int32 nNameClashResolve,
                 }
                 else
                 {
-                    OUString aNewTitle( m_aProps.getTitle() );
-                    aNewTitle += "_" +
-                        OUString::number( nTry );
+                    OUString aNewTitle( m_aProps.getTitle() + "_" + OUString::number( nTry ) );
                     m_aProps.setTitle( aNewTitle );
                 }
             }


More information about the Libreoffice-commits mailing list