2019-09-27 21:41:42 +02:00
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4; fill-column: 100 -*- */
/*
* This file is part of the LibreOffice project .
*
* This Source Code Form is subject to the terms of the Mozilla Public
* License , v . 2.0 . If a copy of the MPL was not distributed with this
* file , You can obtain one at http : //mozilla.org/MPL/2.0/.
*/
2019-10-13 08:47:47 +02:00
# include <rtl/strbuf.hxx>
2019-09-27 21:41:42 +02:00
# include <rtl/string.hxx>
2019-10-13 08:47:47 +02:00
# include <rtl/ustrbuf.hxx>
# include <rtl/ustring.hxx>
// ---------------------------------------------------------------
// += tests
2019-09-27 21:41:42 +02:00
namespace test1
{
static const char XXX1 [ ] = " xxx " ;
static const char XXX2 [ ] = " xxx " ;
2019-10-15 20:24:10 +02:00
void f1 ( OUString s1 , int i , OString o )
2019-09-27 21:41:42 +02:00
{
OUString s2 = s1 ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = " xxx " ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = " xxx " ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = s1 ;
s2 = s1 + " xxx " ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = s1 ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = OUString : : number ( i ) ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = XXX1 ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = OUStringLiteral ( XXX1 ) + XXX2 ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = OStringToOUString ( o , RTL_TEXTENCODING_UTF8 ) ;
}
2019-10-15 20:24:10 +02:00
void f2 ( OString s1 , int i , OUString u )
2019-09-27 21:41:42 +02:00
{
OString s2 = s1 ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = " xxx " ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = " xxx " ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = s1 ;
s2 = s1 + " xxx " ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = s1 ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = OString : : number ( i ) ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s2 + = OUStringToOString ( u , RTL_TEXTENCODING_ASCII_US ) ;
}
2019-10-15 20:24:10 +02:00
void f3 ( OUString aStr , int nFirstContent )
{
OUString aFirstStr = aStr . copy ( 0 , nFirstContent ) ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
aFirstStr + = " ... " ;
}
2019-09-27 21:41:42 +02:00
}
namespace test2
{
void f ( OUString s3 )
{
s3 + = " xxx " ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s3 + = " xxx " ;
}
void g ( OString s3 )
{
s3 + = " xxx " ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s3 + = " xxx " ;
}
}
namespace test3
{
struct Bar
{
OUString m_field ;
} ;
void f ( Bar b1 , Bar & b2 , Bar * b3 )
{
OUString s3 = " xxx " ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s3 + = b1 . m_field ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s3 + = b2 . m_field ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
s3 + = b3 - > m_field ;
}
}
// no warning expected
namespace test4
{
void f ( )
{
OUString sRet = " xxx " ;
# if OSL_DEBUG_LEVEL > 0
sRet + = " ; " ;
# endif
}
}
// no warning expected
namespace test5
{
OUString side_effect ( ) ;
int side_effect2 ( ) ;
void f ( )
{
OUString sRet = " xxx " ;
sRet + = side_effect ( ) ;
sRet + = OUString : : number ( side_effect2 ( ) ) ;
}
void g ( )
{
OUString sRet = side_effect ( ) ;
sRet + = " xxx " ;
}
}
namespace test6
{
void f ( OUString sComma , OUString maExtension , int mnDocumentIconID )
{
OUString sValue ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
sValue + = sComma + sComma + maExtension + sComma ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
sValue + = OUString : : number ( mnDocumentIconID ) + sComma ;
}
struct Foo
{
OUString sFormula1 ;
} ;
void g ( int x , const Foo & aValidation )
{
OUString sCondition ;
switch ( x )
{
case 1 :
sCondition + = " cell-content-is-in-list( " ;
// expected-error@+1 {{simplify by merging with the preceding assignment [loplugin:stringadd]}}
sCondition + = aValidation . sFormula1 + " ) " ;
}
}
}
2019-10-13 08:47:47 +02:00
// ---------------------------------------------------------------
// detecting OUString temporary construction in +
namespace test9
{
OUString getByValue ( ) ;
const OUString & getByRef ( ) ;
void f1 ( OUString s , OUString t , int i , const char * pChar )
{
// no warning expected
t = t + " xxx " ;
2019-10-15 16:45:57 +02:00
// expected-error@+1 {{avoid constructing 'rtl::OUString' from 'const char [4]' on RHS of + (where LHS is of type 'rtl::OUString') [loplugin:stringadd]}}
2019-10-13 08:47:47 +02:00
s = s + OUString ( " xxx " ) ;
2019-10-15 16:45:57 +02:00
// expected-error@+1 {{avoid constructing 'rtl::OUString' from 'const rtl::OUString' on RHS of + (where LHS is of type 'rtl::OUString') [loplugin:stringadd]}}
2019-10-13 08:47:47 +02:00
s = s + OUString ( getByRef ( ) ) ;
// no warning expected
OUString a ;
a = a + getByValue ( ) ;
// no warning expected
OUString b ;
b = b + ( i = = 1 ? " aaa " : " bbb " ) ;
// no warning expected
OUString c ;
c = c + OUString ( pChar , strlen ( pChar ) , RTL_TEXTENCODING_UTF8 ) ;
}
void f2 ( char ch )
{
OString s ;
2019-10-15 16:45:57 +02:00
// expected-error@+1 {{avoid constructing 'rtl::OString' from 'const char [4]' on RHS of + (where LHS is of type 'rtl::OString') [loplugin:stringadd]}}
2019-10-13 08:47:47 +02:00
s = s + OString ( " xxx " ) ;
// no warning expected, no OStringLiteral1
s = s + OString ( ch ) ;
}
}
2019-09-27 21:41:42 +02:00
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */