Kaydet (Commit) 96d9bd22 authored tarafından Noel Grandin's avatar Noel Grandin

loplugin:useuniqueptr in l10ntools

update plugin to find all places where we are unconditionally deleting
stuff in a destructor

Change-Id: Ia0fedc2420c7717ed2bdd8d3bb00262d2a63e0bc
Reviewed-on: https://gerrit.libreoffice.org/47724Tested-by: 's avatarJenkins <ci@libreoffice.org>
Reviewed-by: 's avatarNoel Grandin <noel.grandin@collabora.co.uk>
üst f14b9d30
...@@ -18,7 +18,7 @@ class Foo1 { ...@@ -18,7 +18,7 @@ class Foo1 {
XXX* m_pbar; // expected-note {{member is here [loplugin:useuniqueptr]}} XXX* m_pbar; // expected-note {{member is here [loplugin:useuniqueptr]}}
~Foo1() ~Foo1()
{ {
delete m_pbar; // expected-error {{a destructor with only a single unconditional call to delete on a member, is a sure sign it should be using std::unique_ptr for that field [loplugin:useuniqueptr]}} delete m_pbar; // expected-error {{unconditional call to delete on a member, should be using std::unique_ptr [loplugin:useuniqueptr]}}
m_pbar = nullptr; m_pbar = nullptr;
} }
}; };
...@@ -29,8 +29,8 @@ class Foo2 { ...@@ -29,8 +29,8 @@ class Foo2 {
char* m_pbar2; // expected-note {{member is here [loplugin:useuniqueptr]}} char* m_pbar2; // expected-note {{member is here [loplugin:useuniqueptr]}}
~Foo2() ~Foo2()
{ {
delete[] m_pbar1; // expected-error {{managing POD type 'char' manually, rather use std::vector / std::array / std::unique_ptr [loplugin:useuniqueptr]}} delete[] m_pbar1; // expected-error {{unconditional call to delete on a member, should be using std::unique_ptr [loplugin:useuniqueptr]}}
delete[] m_pbar2; // expected-error {{managing POD type 'char' manually, rather use std::vector / std::array / std::unique_ptr [loplugin:useuniqueptr]}} delete[] m_pbar2; // expected-error {{unconditional call to delete on a member, should be using std::unique_ptr [loplugin:useuniqueptr]}}
} }
}; };
...@@ -85,4 +85,13 @@ class Class8 { ...@@ -85,4 +85,13 @@ class Class8 {
delete i.second; delete i.second;
} }
}; };
class Foo8 {
XXX* m_pbar1; // expected-note {{member is here [loplugin:useuniqueptr]}}
XXX* m_pbar2; // expected-note {{member is here [loplugin:useuniqueptr]}}
~Foo8()
{
delete m_pbar1; // expected-error {{unconditional call to delete on a member, should be using std::unique_ptr [loplugin:useuniqueptr]}}
delete m_pbar2; // expected-error {{unconditional call to delete on a member, should be using std::unique_ptr [loplugin:useuniqueptr]}}
}
};
/* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s cinkeys+=0=break: */
...@@ -155,7 +155,7 @@ public: ...@@ -155,7 +155,7 @@ public:
class CfgMerge : public CfgParser class CfgMerge : public CfgParser
{ {
private: private:
MergeDataFile *pMergeDataFile; std::unique_ptr<MergeDataFile> pMergeDataFile;
std::vector<OString> aLanguages; std::vector<OString> aLanguages;
std::unique_ptr<ResData> pResData; std::unique_ptr<ResData> pResData;
......
...@@ -28,8 +28,6 @@ ...@@ -28,8 +28,6 @@
#include "common.hxx" #include "common.hxx"
#include "export.hxx" #include "export.hxx"
typedef std::vector< OString* > LngLineList;
#define LNG_OK 0x0000 #define LNG_OK 0x0000
#define LNG_COULD_NOT_OPEN 0x0001 #define LNG_COULD_NOT_OPEN 0x0001
...@@ -43,7 +41,7 @@ typedef std::vector< OString* > LngLineList; ...@@ -43,7 +41,7 @@ typedef std::vector< OString* > LngLineList;
class LngParser class LngParser
{ {
private: private:
LngLineList *pLines; std::vector<OString> mvLines;
OString sSource; OString sSource;
std::vector<OString> aLanguages; std::vector<OString> aLanguages;
......
...@@ -104,7 +104,7 @@ public: ...@@ -104,7 +104,7 @@ public:
class XRMResMerge : public XRMResParser class XRMResMerge : public XRMResParser
{ {
private: private:
MergeDataFile *pMergeDataFile; std::unique_ptr<MergeDataFile> pMergeDataFile;
OString sFilename; OString sFilename;
std::unique_ptr<ResData> pResData; std::unique_ptr<ResData> pResData;
std::ofstream pOutputStream; std::ofstream pOutputStream;
......
...@@ -103,9 +103,6 @@ CfgStackData* CfgStack::Push(const OString &rTag, const OString &rId) ...@@ -103,9 +103,6 @@ CfgStackData* CfgStack::Push(const OString &rTag, const OString &rId)
CfgStack::~CfgStack() CfgStack::~CfgStack()
{ {
for ( size_t i = 0, n = maList.size(); i < n; i++ )
delete maList[ i ];
maList.clear();
} }
OString CfgStack::GetAccessPath( size_t nPos ) OString CfgStack::GetAccessPath( size_t nPos )
...@@ -410,8 +407,8 @@ CfgMerge::CfgMerge( ...@@ -410,8 +407,8 @@ CfgMerge::CfgMerge(
if (!rMergeSource.isEmpty()) if (!rMergeSource.isEmpty())
{ {
pMergeDataFile = new MergeDataFile( pMergeDataFile.reset(new MergeDataFile(
rMergeSource, global::inputPathname, true ); rMergeSource, global::inputPathname, true ));
if (rLanguage.equalsIgnoreAsciiCase("ALL") ) if (rLanguage.equalsIgnoreAsciiCase("ALL") )
{ {
aLanguages = pMergeDataFile->GetLanguages(); aLanguages = pMergeDataFile->GetLanguages();
...@@ -425,7 +422,6 @@ CfgMerge::CfgMerge( ...@@ -425,7 +422,6 @@ CfgMerge::CfgMerge(
CfgMerge::~CfgMerge() CfgMerge::~CfgMerge()
{ {
pOutputStream.close(); pOutputStream.close();
delete pMergeDataFile;
} }
void CfgMerge::WorkOnText(OString &, const OString& rLangIndex) void CfgMerge::WorkOnText(OString &, const OString& rLangIndex)
......
...@@ -49,10 +49,8 @@ void lcl_RemoveUTF8ByteOrderMarker( OString &rString ) ...@@ -49,10 +49,8 @@ void lcl_RemoveUTF8ByteOrderMarker( OString &rString )
// class LngParser // class LngParser
LngParser::LngParser(const OString &rLngFile) LngParser::LngParser(const OString &rLngFile)
: pLines( nullptr ) : sSource( rLngFile )
, sSource( rLngFile )
{ {
pLines = new LngLineList;
std::ifstream aStream(sSource.getStr()); std::ifstream aStream(sSource.getStr());
if (aStream.is_open()) if (aStream.is_open())
{ {
...@@ -70,19 +68,15 @@ LngParser::LngParser(const OString &rLngFile) ...@@ -70,19 +68,15 @@ LngParser::LngParser(const OString &rLngFile)
bFirstLine = false; bFirstLine = false;
} }
pLines->push_back( new OString(sLine) ); mvLines.push_back( sLine );
std::getline(aStream, s); std::getline(aStream, s);
} }
pLines->push_back( new OString() ); mvLines.push_back( OString() );
} }
} }
LngParser::~LngParser() LngParser::~LngParser()
{ {
for ( size_t i = 0, n = pLines->size(); i < n; ++i )
delete (*pLines)[ i ];
pLines->clear();
delete pLines;
} }
bool LngParser::CreatePO( const OString &rPOFile ) bool LngParser::CreatePO( const OString &rPOFile )
...@@ -98,12 +92,12 @@ bool LngParser::CreatePO( const OString &rPOFile ) ...@@ -98,12 +92,12 @@ bool LngParser::CreatePO( const OString &rPOFile )
OStringHashMap Text; OStringHashMap Text;
OString sID; OString sID;
while( nPos < pLines->size() ) { while( nPos < mvLines.size() ) {
sLine = *(*pLines)[ nPos++ ]; sLine = mvLines[ nPos++ ];
while( nPos < pLines->size() && !isNextGroup( sGroup , sLine ) ) { while( nPos < mvLines.size() && !isNextGroup( sGroup , sLine ) ) {
ReadLine( sLine , Text ); ReadLine( sLine , Text );
sID = sGroup; sID = sGroup;
sLine = *(*pLines)[ nPos++ ]; sLine = mvLines[ nPos++ ];
} }
if( bStart ) { if( bStart ) {
bStart = false; bStart = false;
...@@ -168,9 +162,9 @@ bool LngParser::Merge( ...@@ -168,9 +162,9 @@ bool LngParser::Merge(
OString sGroup; OString sGroup;
// seek to next group // seek to next group
while ( nPos < pLines->size() && !bGroup ) while ( nPos < mvLines.size() && !bGroup )
{ {
OString sLine( *(*pLines)[ nPos ] ); OString sLine( mvLines[ nPos ] );
sLine = sLine.trim(); sLine = sLine.trim();
if ( sLine.startsWith("[") && sLine.endsWith("]") ) if ( sLine.startsWith("[") && sLine.endsWith("]") )
{ {
...@@ -180,7 +174,7 @@ bool LngParser::Merge( ...@@ -180,7 +174,7 @@ bool LngParser::Merge(
nPos ++; nPos ++;
} }
while ( nPos < pLines->size()) { while ( nPos < mvLines.size()) {
OStringHashMap Text; OStringHashMap Text;
OString sID( sGroup ); OString sID( sGroup );
std::size_t nLastLangPos = 0; std::size_t nLastLangPos = 0;
...@@ -193,9 +187,9 @@ bool LngParser::Merge( ...@@ -193,9 +187,9 @@ bool LngParser::Merge(
OString sLanguagesDone; OString sLanguagesDone;
while ( nPos < pLines->size() && !bGroup ) while ( nPos < mvLines.size() && !bGroup )
{ {
OString sLine( *(*pLines)[ nPos ] ); OString sLine( mvLines[ nPos ] );
sLine = sLine.trim(); sLine = sLine.trim();
if ( sLine.startsWith("[") && sLine.endsWith("]") ) if ( sLine.startsWith("[") && sLine.endsWith("]") )
{ {
...@@ -221,9 +215,7 @@ bool LngParser::Merge( ...@@ -221,9 +215,7 @@ bool LngParser::Merge(
sSearch += ";"; sSearch += ";";
if ( sLanguagesDone.indexOf( sSearch ) != -1 ) { if ( sLanguagesDone.indexOf( sSearch ) != -1 ) {
LngLineList::iterator it = pLines->begin(); mvLines.erase( mvLines.begin() + nPos );
std::advance( it, nPos );
pLines->erase( it );
} }
if( pEntrys ) if( pEntrys )
{ {
...@@ -235,14 +227,14 @@ bool LngParser::Merge( ...@@ -235,14 +227,14 @@ bool LngParser::Merge(
continue; continue;
if ( !sNewText.isEmpty()) { if ( !sNewText.isEmpty()) {
OString *pLine = (*pLines)[ nPos ]; OString & rLine = mvLines[ nPos ];
OString sText1( sLang ); OString sText1( sLang );
sText1 += " = \""; sText1 += " = \"";
// escape quotes, unescape double escaped quotes fdo#56648 // escape quotes, unescape double escaped quotes fdo#56648
sText1 += sNewText.replaceAll("\"","\\\"").replaceAll("\\\\\"","\\\""); sText1 += sNewText.replaceAll("\"","\\\"").replaceAll("\\\\\"","\\\"");
sText1 += "\""; sText1 += "\"";
*pLine = sText1; rLine = sText1;
Text[ sLang ] = sNewText; Text[ sLang ] = sNewText;
} }
} }
...@@ -283,12 +275,10 @@ bool LngParser::Merge( ...@@ -283,12 +275,10 @@ bool LngParser::Merge(
nLastLangPos++; nLastLangPos++;
nPos++; nPos++;
if ( nLastLangPos < pLines->size() ) { if ( nLastLangPos < mvLines.size() ) {
LngLineList::iterator it = pLines->begin(); mvLines.insert( mvLines.begin() + nLastLangPos, sLine );
std::advance( it, nLastLangPos );
pLines->insert( it, new OString(sLine) );
} else { } else {
pLines->push_back( new OString(sLine) ); mvLines.push_back( sLine );
} }
} }
} }
...@@ -296,8 +286,8 @@ bool LngParser::Merge( ...@@ -296,8 +286,8 @@ bool LngParser::Merge(
} }
} }
for ( size_t i = 0; i < pLines->size(); ++i ) for ( size_t i = 0; i < mvLines.size(); ++i )
aDestination << *(*pLines)[i] << '\n'; aDestination << mvLines[i] << '\n';
aDestination.close(); aDestination.close();
return true; return true;
......
...@@ -375,8 +375,8 @@ XRMResMerge::XRMResMerge( ...@@ -375,8 +375,8 @@ XRMResMerge::XRMResMerge(
{ {
if (!rMergeSource.isEmpty() && sLanguage.equalsIgnoreAsciiCase("ALL")) if (!rMergeSource.isEmpty() && sLanguage.equalsIgnoreAsciiCase("ALL"))
{ {
pMergeDataFile = new MergeDataFile( pMergeDataFile.reset(new MergeDataFile(
rMergeSource, sInputFileName, false); rMergeSource, sInputFileName, false));
aLanguages = pMergeDataFile->GetLanguages(); aLanguages = pMergeDataFile->GetLanguages();
} }
else else
...@@ -393,7 +393,6 @@ XRMResMerge::XRMResMerge( ...@@ -393,7 +393,6 @@ XRMResMerge::XRMResMerge(
XRMResMerge::~XRMResMerge() XRMResMerge::~XRMResMerge()
{ {
pOutputStream.close(); pOutputStream.close();
delete pMergeDataFile;
} }
void XRMResMerge::WorkOnDesc( void XRMResMerge::WorkOnDesc(
......
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