Kaydet (Commit) 0e54605e authored tarafından Stephan Bergmann's avatar Stephan Bergmann

loplugin:stringconcat: Also look through O[U]String ctors

Change-Id: I4f07c7c61d324a85f9f5dee0f25a7358facebd41
üst f540e926
......@@ -11,6 +11,35 @@
namespace {
Expr const * stripCtor(Expr const * expr) {
auto e0 = expr;
auto const e1 = dyn_cast<CXXFunctionalCastExpr>(e0);
if (e1 != nullptr) {
e0 = e1->getSubExpr()->IgnoreParenImpCasts();
}
auto const e2 = dyn_cast<CXXBindTemporaryExpr>(e0);
if (e2 == nullptr) {
return expr;
}
auto const e3 = dyn_cast<CXXConstructExpr>(
e2->getSubExpr()->IgnoreParenImpCasts());
if (e3 == nullptr) {
return expr;
}
auto const n = e3->getConstructor()->getQualifiedNameAsString();
if (n != "rtl::OString::OString" && n != "rtl::OUString::OUString") {
return expr;
}
if (e3->getNumArgs() != 2) {
return expr;
}
return e3->getArg(0)->IgnoreParenImpCasts();
}
bool isStringLiteral(Expr const * expr) {
return isa<StringLiteral>(stripCtor(expr));
}
class StringConcat:
public RecursiveASTVisitor<StringConcat>, public loplugin::Plugin
{
......@@ -35,13 +64,13 @@ bool StringConcat::VisitCallExpr(CallExpr const * expr) {
if ((oo != OverloadedOperatorKind::OO_Plus
&& oo != OverloadedOperatorKind::OO_LessLess)
|| fdecl->getNumParams() != 2 || expr->getNumArgs() != 2
|| !isa<StringLiteral>(expr->getArg(1)->IgnoreParenImpCasts()))
|| !isStringLiteral(expr->getArg(1)->IgnoreParenImpCasts()))
{
return true;
}
SourceLocation leftLoc;
auto const leftExpr = expr->getArg(0)->IgnoreParenImpCasts();
if (isa<StringLiteral>(leftExpr)) {
if (isStringLiteral(leftExpr)) {
leftLoc = leftExpr->getLocStart();
} else {
CallExpr const * left = dyn_cast<CallExpr>(leftExpr);
......@@ -56,7 +85,7 @@ bool StringConcat::VisitCallExpr(CallExpr const * expr) {
if ((loo != OverloadedOperatorKind::OO_Plus
&& loo != OverloadedOperatorKind::OO_LessLess)
|| ldecl->getNumParams() != 2 || left->getNumArgs() != 2
|| !isa<StringLiteral>(left->getArg(1)->IgnoreParenImpCasts()))
|| !isStringLiteral(left->getArg(1)->IgnoreParenImpCasts()))
{
return true;
}
......
......@@ -632,7 +632,7 @@ void SwUiWriterTest::testExportRTF()
CPPUNIT_ASSERT(aData.indexOf("bbb") != -1);
CPPUNIT_ASSERT_EQUAL(sal_Int32(-1), aData.indexOf("ccc"));
// Ensure there's no extra newline
CPPUNIT_ASSERT(aData.endsWith(OString("bbb}") + OString(SAL_NEWLINE_STRING) + OString("}")));
CPPUNIT_ASSERT(aData.endsWith("bbb}" SAL_NEWLINE_STRING "}"));
}
void SwUiWriterTest::testFdo74981()
......
......@@ -220,8 +220,8 @@ void SwHTMLWriter::OutCSS1_Property( const sal_Char *pProp,
{
m_bFirstCSS1Rule = false;
OutNewLine();
sOut.append("<" + OString(OOO_STRING_SVTOOLS_HTML_style) + " " +
OString(OOO_STRING_SVTOOLS_HTML_O_type) + "=\"text/css\">");
sOut.append("<" OOO_STRING_SVTOOLS_HTML_style " "
OOO_STRING_SVTOOLS_HTML_O_type "=\"text/css\">");
// Optional CSS2 code for dot leaders (dotted line between the Table of Contents titles and page numbers):
// (More inforation: http://www.w3.org/Style/Examples/007/leaders.en.html)
//
......@@ -254,14 +254,14 @@ void SwHTMLWriter::OutCSS1_Property( const sal_Char *pProp,
if (m_bCfgPrintLayout) {
sOut.append(
"p." + OString(sCSS2_P_CLASS_leaders) + "{max-width:" + OString::number(DOT_LEADERS_MAX_WIDTH) +
"p." sCSS2_P_CLASS_leaders "{max-width:" + OString::number(DOT_LEADERS_MAX_WIDTH) +
"cm;padding:0;overflow-x:hidden;line-height:120%}"
"p." + OString(sCSS2_P_CLASS_leaders) + ":after{float:left;width:0;white-space:nowrap;content:\"");
"p." sCSS2_P_CLASS_leaders ":after{float:left;width:0;white-space:nowrap;content:\"");
for (int i = 0; i < 100; i++ )
sOut.append(". ");
sOut.append(
"\"}p." + OString(sCSS2_P_CLASS_leaders) + " span:first-child{padding-right:0.33em;background:white}"
"p." + OString(sCSS2_P_CLASS_leaders) + " span+span{float:right;padding-left:0.33em;"
"\"}p." sCSS2_P_CLASS_leaders " span:first-child{padding-right:0.33em;background:white}"
"p." sCSS2_P_CLASS_leaders " span+span{float:right;padding-left:0.33em;"
"background:white;position:relative;z-index:1}");
}
Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
......@@ -277,8 +277,8 @@ void SwHTMLWriter::OutCSS1_Property( const sal_Char *pProp,
case CSS1_OUTMODE_SPAN_TAG1_ON:
if( m_bTagOn )
{
sOut.append("<" + OString(OOO_STRING_SVTOOLS_HTML_span) +
" " + OString(OOO_STRING_SVTOOLS_HTML_O_style) + "=\"");
sOut.append("<" OOO_STRING_SVTOOLS_HTML_span
" " OOO_STRING_SVTOOLS_HTML_O_style "=\"");
}
else
{
......@@ -295,7 +295,7 @@ void SwHTMLWriter::OutCSS1_Property( const sal_Char *pProp,
break;
case CSS1_OUTMODE_STYLE_OPT_ON:
sOut.append(" " + OString(OOO_STRING_SVTOOLS_HTML_O_style) + "=\"");
sOut.append(" " OOO_STRING_SVTOOLS_HTML_O_style "=\"");
break;
}
m_bFirstCSS1Property = false;
......@@ -840,8 +840,8 @@ sal_uInt16 SwHTMLWriter::GetCSS1Selector( const SwFormat *pFormat, OString& rTok
case RES_POOLCOLL_TABLE:
if( pPseudo )
{
rToken = OString(OOO_STRING_SVTOOLS_HTML_tabledata) + " " +
OString(OOO_STRING_SVTOOLS_HTML_parabreak);
rToken = OOO_STRING_SVTOOLS_HTML_tabledata " "
OOO_STRING_SVTOOLS_HTML_parabreak;
}
else
rToken = OOO_STRING_SVTOOLS_HTML_parabreak;
......@@ -849,8 +849,8 @@ sal_uInt16 SwHTMLWriter::GetCSS1Selector( const SwFormat *pFormat, OString& rTok
case RES_POOLCOLL_TABLE_HDLN:
if( pPseudo )
{
rToken = OString(OOO_STRING_SVTOOLS_HTML_tableheader) + " " +
OString(OOO_STRING_SVTOOLS_HTML_parabreak);
rToken = OOO_STRING_SVTOOLS_HTML_tableheader " "
OOO_STRING_SVTOOLS_HTML_parabreak;
}
else
rToken = OString(OOO_STRING_SVTOOLS_HTML_parabreak);
......
......@@ -813,7 +813,7 @@ void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
// The align=... attribute does behave strange in netscape
// if there are controls in a paragraph, because the control and
// all text behind the control does not recognize this attribute.
OString sOut = "<" + OString(OOO_STRING_SVTOOLS_HTML_division);
OString sOut = "<" OOO_STRING_SVTOOLS_HTML_division;
rWrt.Strm().WriteOString( sOut );
rHWrt.m_bTextAttr = false;
......@@ -915,7 +915,7 @@ void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
if( rHWrt.m_bCfgOutStyles &&
(!pFormatInfo->aClass.isEmpty() || pFormatInfo->bScriptDependent) )
{
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_class) + "=\"";
sOut += " " OOO_STRING_SVTOOLS_HTML_O_class "=\"";
rWrt.Strm().WriteOString( sOut );
sOut = "";
OUString aClass( pFormatInfo->aClass );
......@@ -957,9 +957,9 @@ void OutHTML_SwFormat( Writer& rWrt, const SwFormat& rFormat,
}
if (rHWrt.m_bParaDotLeaders) {
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_class) + "=\"" +
OString(sCSS2_P_CLASS_leaders) + "\"><" +
OString(OOO_STRING_SVTOOLS_HTML_O_span);
sOut += " " OOO_STRING_SVTOOLS_HTML_O_class "=\""
sCSS2_P_CLASS_leaders "\"><"
OOO_STRING_SVTOOLS_HTML_O_span;
rWrt.Strm().WriteOString( sOut );
sOut = "";
}
......@@ -2692,8 +2692,8 @@ static Writer& OutHTML_SvxColor( Writer& rWrt, const SfxPoolItem& rHt )
if( COL_AUTO == aColor.GetColor() )
aColor.SetColor( COL_BLACK );
OString sOut = "<" + OString(OOO_STRING_SVTOOLS_HTML_font) + " " +
OString(OOO_STRING_SVTOOLS_HTML_O_color) + "=";
OString sOut = "<" OOO_STRING_SVTOOLS_HTML_font " "
OOO_STRING_SVTOOLS_HTML_O_color "=";
rWrt.Strm().WriteOString( sOut );
HTMLOutFuncs::Out_Color( rWrt.Strm(), aColor, rHTMLWrt.m_eDestEnc ).WriteChar( '>' );
}
......@@ -2734,8 +2734,8 @@ static Writer& OutHTML_SvxFont( Writer& rWrt, const SfxPoolItem& rHt )
OUString aNames;
SwHTMLWriter::PrepareFontList( static_cast<const SvxFontItem&>(rHt), aNames, 0,
rHTMLWrt.IsHTMLMode(HTMLMODE_FONT_GENERIC) );
OString sOut = "<" + OString(OOO_STRING_SVTOOLS_HTML_font) + " " +
OString(OOO_STRING_SVTOOLS_HTML_O_face) + "=\"";
OString sOut = "<" OOO_STRING_SVTOOLS_HTML_font " "
OOO_STRING_SVTOOLS_HTML_O_face "=\"";
rWrt.Strm().WriteOString( sOut );
HTMLOutFuncs::Out_String( rWrt.Strm(), aNames, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters )
.WriteCharPtr( "\">" );
......@@ -2754,11 +2754,11 @@ static Writer& OutHTML_SvxFontHeight( Writer& rWrt, const SfxPoolItem& rHt )
if( rHTMLWrt.m_bTagOn )
{
OString sOut = "<" + OString(OOO_STRING_SVTOOLS_HTML_font);
OString sOut = "<" OOO_STRING_SVTOOLS_HTML_font;
sal_uInt32 nHeight = static_cast<const SvxFontHeightItem&>(rHt).GetHeight();
sal_uInt16 nSize = rHTMLWrt.GetHTMLFontSize( nHeight );
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_size) + "=\"" +
sOut += " " OOO_STRING_SVTOOLS_HTML_O_size "=\"" +
OString::number(static_cast<sal_Int32>(nSize)) + "\"";
rWrt.Strm().WriteOString( sOut );
......@@ -2789,7 +2789,7 @@ static Writer& OutHTML_SvxLanguage( Writer& rWrt, const SfxPoolItem& rHt )
if( rHTMLWrt.m_bTagOn )
{
OString sOut = "<" + OString(OOO_STRING_SVTOOLS_HTML_span);
OString sOut = "<" OOO_STRING_SVTOOLS_HTML_span;
rWrt.Strm().WriteOString( sOut );
rHTMLWrt.OutLanguage( static_cast<const SvxLanguageItem &>(rHt).GetLanguage() );
rWrt.Strm().WriteChar( '>' );
......@@ -2947,7 +2947,7 @@ Writer& OutHTML_INetFormat( Writer& rWrt, const SwFormatINetFormat& rINetFormat,
return rWrt;
}
OString sOut = "<" + OString(OOO_STRING_SVTOOLS_HTML_anchor);
OString sOut = "<" OOO_STRING_SVTOOLS_HTML_anchor;
bool bScriptDependent = false;
{
......@@ -2974,7 +2974,7 @@ Writer& OutHTML_INetFormat( Writer& rWrt, const SwFormatINetFormat& rINetFormat,
if( bScriptDependent )
{
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_class) + "=\"";
sOut += " " OOO_STRING_SVTOOLS_HTML_O_class "=\"";
const sal_Char* pStr = nullptr;
switch( rHTMLWrt.m_nCSS1Script )
{
......@@ -3007,7 +3007,7 @@ Writer& OutHTML_INetFormat( Writer& rWrt, const SwFormatINetFormat& rINetFormat,
}
aURL = comphelper::string::strip(aURL, ' ');
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_href) + "=\"";
sOut += " " OOO_STRING_SVTOOLS_HTML_O_href "=\"";
rWrt.Strm().WriteOString( sOut );
rHTMLWrt.OutHyperlinkHRefValue( aURL );
sOut = "\"";
......@@ -3015,7 +3015,7 @@ Writer& OutHTML_INetFormat( Writer& rWrt, const SwFormatINetFormat& rINetFormat,
if( !rINetFormat.GetName().isEmpty() )
{
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_name) + "=\"";
sOut += " " OOO_STRING_SVTOOLS_HTML_O_name "=\"";
rWrt.Strm().WriteOString( sOut );
HTMLOutFuncs::Out_String( rWrt.Strm(), rINetFormat.GetName(),
rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters );
......@@ -3025,7 +3025,7 @@ Writer& OutHTML_INetFormat( Writer& rWrt, const SwFormatINetFormat& rINetFormat,
const OUString& rTarget = rINetFormat.GetTargetFrame();
if( !rTarget.isEmpty() )
{
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_target) + "=\"";
sOut += " " OOO_STRING_SVTOOLS_HTML_O_target "=\"";
rWrt.Strm().WriteOString( sOut );
HTMLOutFuncs::Out_String( rWrt.Strm(), rTarget, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters );
sOut = "\"";
......@@ -3131,7 +3131,7 @@ static Writer& OutHTML_SwTextCharFormat( Writer& rWrt, const SfxPoolItem& rHt )
if( rHTMLWrt.m_bCfgOutStyles &&
(!pFormatInfo->aClass.isEmpty() || pFormatInfo->bScriptDependent) )
{
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_class) + "=\"";
sOut += " " OOO_STRING_SVTOOLS_HTML_O_class "=\"";
rWrt.Strm().WriteOString( sOut );
OUString aClass( pFormatInfo->aClass );
if( pFormatInfo->bScriptDependent )
......@@ -3188,7 +3188,7 @@ static Writer& OutHTML_SvxAdjust( Writer& rWrt, const SfxPoolItem& rHt )
}
if( pStr )
{
OString sOut = " " + OString(OOO_STRING_SVTOOLS_HTML_O_align) + "=\"" +
OString sOut = " " OOO_STRING_SVTOOLS_HTML_O_align "=\"" +
OString(pStr) + "\"";
rWrt.Strm().WriteOString( sOut );
}
......
......@@ -292,20 +292,20 @@ Writer& OutHTML_SwFormatFootnote( Writer& rWrt, const SfxPoolItem& rHt )
rHTMLWrt.m_pFootEndNotes->insert( rHTMLWrt.m_pFootEndNotes->begin() + nPos, pTextFootnote );
OStringBuffer sOut;
sOut.append("<" + OString(OOO_STRING_SVTOOLS_HTML_anchor) + " " +
OString(OOO_STRING_SVTOOLS_HTML_O_class) + "=\"");
sOut.append("<" OOO_STRING_SVTOOLS_HTML_anchor " "
OOO_STRING_SVTOOLS_HTML_O_class "=\"");
rWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
HTMLOutFuncs::Out_String( rWrt.Strm(), sClass, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters );
sOut.append("\" " + OString(OOO_STRING_SVTOOLS_HTML_O_name) + "=\"");
sOut.append("\" " OOO_STRING_SVTOOLS_HTML_O_name "=\"");
rWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
HTMLOutFuncs::Out_String( rWrt.Strm(), sFootnoteName, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters );
sOut.append(OString(OOO_STRING_SVTOOLS_HTML_FTN_anchor) + "\" " +
OString(OOO_STRING_SVTOOLS_HTML_O_href) + "=\"#");
sOut.append(OOO_STRING_SVTOOLS_HTML_FTN_anchor "\" "
OOO_STRING_SVTOOLS_HTML_O_href "=\"#");
rWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
HTMLOutFuncs::Out_String( rWrt.Strm(), sFootnoteName, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters );
sOut.append(OString(OOO_STRING_SVTOOLS_HTML_FTN_symbol) + "\"");
sOut.append(OOO_STRING_SVTOOLS_HTML_FTN_symbol "\"");
if( !rFormatFootnote.GetNumStr().isEmpty() )
sOut.append(" " + OString(OOO_STRING_SVTOOLS_HTML_O_sdfixed));
sOut.append(" " OOO_STRING_SVTOOLS_HTML_O_sdfixed);
sOut.append(">");
rWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
HTMLOutFuncs::Out_AsciiTag( rWrt.Strm(), OOO_STRING_SVTOOLS_HTML_superscript );
......
......@@ -205,7 +205,7 @@ Writer& OutHTML_NumBulListStart( SwHTMLWriter& rWrt,
if( pStr )
{
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_type) + "=\"" + OString(pStr) + "\"";
sOut += " " OOO_STRING_SVTOOLS_HTML_O_type "=\"" + OString(pStr) + "\"";
}
}
else if( SVX_NUM_BITMAP == eType )
......@@ -243,7 +243,7 @@ Writer& OutHTML_NumBulListStart( SwHTMLWriter& rWrt,
}
if( cType )
{
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_type) + "=\"" + OString(cType) + "\"";
sOut += " " OOO_STRING_SVTOOLS_HTML_O_type "=\"" + OString(cType) + "\"";
}
sal_uInt16 nStartVal = rNumFormat.GetStart();
......@@ -262,7 +262,7 @@ Writer& OutHTML_NumBulListStart( SwHTMLWriter& rWrt,
}
if( nStartVal != 1 )
{
sOut += " " + OString(OOO_STRING_SVTOOLS_HTML_O_start) + "=\"" + OString::number(static_cast<sal_Int32>(nStartVal)) + "\"";
sOut += " " OOO_STRING_SVTOOLS_HTML_O_start "=\"" + OString::number(static_cast<sal_Int32>(nStartVal)) + "\"";
}
}
......
......@@ -579,7 +579,7 @@ static void lcl_html_OutSectionStartTag( SwHTMLWriter& rHTMLWrt,
const OUString& rName = rSection.GetSectionName();
if( !rName.isEmpty() && !bContinued )
{
sOut.append(" " + OString(OOO_STRING_SVTOOLS_HTML_O_id) + "=\"");
sOut.append(" " OOO_STRING_SVTOOLS_HTML_O_id "=\"");
rHTMLWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
HTMLOutFuncs::Out_String( rHTMLWrt.Strm(), rName, rHTMLWrt.m_eDestEnc, &rHTMLWrt.m_aNonConvertableCharacters );
sOut.append('\"');
......@@ -591,7 +591,7 @@ static void lcl_html_OutSectionStartTag( SwHTMLWriter& rHTMLWrt,
if( FILE_LINK_SECTION == rSection.GetType() )
{
sOut.append(" " + OString(OOO_STRING_SVTOOLS_HTML_O_href) + "=\"");
sOut.append(" " OOO_STRING_SVTOOLS_HTML_O_href "=\"");
rHTMLWrt.Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
const OUString& aFName = rSection.GetLinkFileName();
......@@ -643,7 +643,7 @@ static void lcl_html_OutSectionStartTag( SwHTMLWriter& rHTMLWrt,
nGutter = (sal_uInt16)Application::GetDefaultDevice()
->LogicToPixel( Size(nGutter, 0), MapMode(MAP_TWIP) ).Width();
}
sOut.append(" " + OString(OOO_STRING_SVTOOLS_HTML_O_gutter) + "=\"" + OString::number(nGutter) + "\"");
sOut.append(" " OOO_STRING_SVTOOLS_HTML_O_gutter "=\"" + OString::number(nGutter) + "\"");
}
}
......@@ -945,7 +945,7 @@ const SwPageDesc *SwHTMLWriter::MakeHeader( sal_uInt16 &rHeaderAttrs )
OStringBuffer sOut;
if (!mbSkipHeaderFooter)
{
sOut.append(OString(OOO_STRING_SVTOOLS_HTML_doctype) + " " + OString(OOO_STRING_SVTOOLS_HTML_doctype40));
sOut.append(OOO_STRING_SVTOOLS_HTML_doctype " " OOO_STRING_SVTOOLS_HTML_doctype40);
HTMLOutFuncs::Out_AsciiTag( Strm(), sOut.makeStringAndClear().getStr() );
// baue den Vorspann
......@@ -1026,7 +1026,7 @@ const SwPageDesc *SwHTMLWriter::MakeHeader( sal_uInt16 &rHeaderAttrs )
// der Body wird nicht eingerueckt, weil sonst alles eingerueckt waere!
OutNewLine();
sOut.append("<" + OString(OOO_STRING_SVTOOLS_HTML_body));
sOut.append("<" OOO_STRING_SVTOOLS_HTML_body);
Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
// language
......@@ -1072,7 +1072,7 @@ const SwPageDesc *SwHTMLWriter::MakeHeader( sal_uInt16 &rHeaderAttrs )
void SwHTMLWriter::OutAnchor( const OUString& rName )
{
OStringBuffer sOut;
sOut.append("<" + OString(OOO_STRING_SVTOOLS_HTML_anchor) + " " + OString(OOO_STRING_SVTOOLS_HTML_O_name) + "=\"");
sOut.append("<" OOO_STRING_SVTOOLS_HTML_anchor " " OOO_STRING_SVTOOLS_HTML_O_name "=\"");
Strm().WriteCharPtr( sOut.makeStringAndClear().getStr() );
HTMLOutFuncs::Out_String( Strm(), rName, m_eDestEnc, &m_aNonConvertableCharacters ).WriteCharPtr( "\">" );
HTMLOutFuncs::Out_AsciiTag( Strm(), OOO_STRING_SVTOOLS_HTML_anchor, false );
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment