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 {
XXX* m_pbar; // expected-note {{member is here [loplugin:useuniqueptr]}}
~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;
}
};
......@@ -29,8 +29,8 @@ class Foo2 {
char* m_pbar2; // expected-note {{member is here [loplugin:useuniqueptr]}}
~Foo2()
{
delete[] m_pbar1; // expected-error {{managing POD type 'char' manually, rather use std::vector / std::array / 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_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]}}
}
};
......@@ -85,4 +85,13 @@ class Class8 {
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: */
......@@ -155,7 +155,7 @@ public:
class CfgMerge : public CfgParser
{
private:
MergeDataFile *pMergeDataFile;
std::unique_ptr<MergeDataFile> pMergeDataFile;
std::vector<OString> aLanguages;
std::unique_ptr<ResData> pResData;
......
......@@ -28,8 +28,6 @@
#include "common.hxx"
#include "export.hxx"
typedef std::vector< OString* > LngLineList;
#define LNG_OK 0x0000
#define LNG_COULD_NOT_OPEN 0x0001
......@@ -43,7 +41,7 @@ typedef std::vector< OString* > LngLineList;
class LngParser
{
private:
LngLineList *pLines;
std::vector<OString> mvLines;
OString sSource;
std::vector<OString> aLanguages;
......
......@@ -104,7 +104,7 @@ public:
class XRMResMerge : public XRMResParser
{
private:
MergeDataFile *pMergeDataFile;
std::unique_ptr<MergeDataFile> pMergeDataFile;
OString sFilename;
std::unique_ptr<ResData> pResData;
std::ofstream pOutputStream;
......
......@@ -103,9 +103,6 @@ CfgStackData* CfgStack::Push(const OString &rTag, const OString &rId)
CfgStack::~CfgStack()
{
for ( size_t i = 0, n = maList.size(); i < n; i++ )
delete maList[ i ];
maList.clear();
}
OString CfgStack::GetAccessPath( size_t nPos )
......@@ -410,8 +407,8 @@ CfgMerge::CfgMerge(
if (!rMergeSource.isEmpty())
{
pMergeDataFile = new MergeDataFile(
rMergeSource, global::inputPathname, true );
pMergeDataFile.reset(new MergeDataFile(
rMergeSource, global::inputPathname, true ));
if (rLanguage.equalsIgnoreAsciiCase("ALL") )
{
aLanguages = pMergeDataFile->GetLanguages();
......@@ -425,7 +422,6 @@ CfgMerge::CfgMerge(
CfgMerge::~CfgMerge()
{
pOutputStream.close();
delete pMergeDataFile;
}
void CfgMerge::WorkOnText(OString &, const OString& rLangIndex)
......
......@@ -49,10 +49,8 @@ void lcl_RemoveUTF8ByteOrderMarker( OString &rString )
// class LngParser
LngParser::LngParser(const OString &rLngFile)
: pLines( nullptr )
, sSource( rLngFile )
: sSource( rLngFile )
{
pLines = new LngLineList;
std::ifstream aStream(sSource.getStr());
if (aStream.is_open())
{
......@@ -70,19 +68,15 @@ LngParser::LngParser(const OString &rLngFile)
bFirstLine = false;
}
pLines->push_back( new OString(sLine) );
mvLines.push_back( sLine );
std::getline(aStream, s);
}
pLines->push_back( new OString() );
mvLines.push_back( OString() );
}
}
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 )
......@@ -98,12 +92,12 @@ bool LngParser::CreatePO( const OString &rPOFile )
OStringHashMap Text;
OString sID;
while( nPos < pLines->size() ) {
sLine = *(*pLines)[ nPos++ ];
while( nPos < pLines->size() && !isNextGroup( sGroup , sLine ) ) {
while( nPos < mvLines.size() ) {
sLine = mvLines[ nPos++ ];
while( nPos < mvLines.size() && !isNextGroup( sGroup , sLine ) ) {
ReadLine( sLine , Text );
sID = sGroup;
sLine = *(*pLines)[ nPos++ ];
sLine = mvLines[ nPos++ ];
}
if( bStart ) {
bStart = false;
......@@ -168,9 +162,9 @@ bool LngParser::Merge(
OString sGroup;
// 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();
if ( sLine.startsWith("[") && sLine.endsWith("]") )
{
......@@ -180,7 +174,7 @@ bool LngParser::Merge(
nPos ++;
}
while ( nPos < pLines->size()) {
while ( nPos < mvLines.size()) {
OStringHashMap Text;
OString sID( sGroup );
std::size_t nLastLangPos = 0;
......@@ -193,9 +187,9 @@ bool LngParser::Merge(
OString sLanguagesDone;
while ( nPos < pLines->size() && !bGroup )
while ( nPos < mvLines.size() && !bGroup )
{
OString sLine( *(*pLines)[ nPos ] );
OString sLine( mvLines[ nPos ] );
sLine = sLine.trim();
if ( sLine.startsWith("[") && sLine.endsWith("]") )
{
......@@ -221,9 +215,7 @@ bool LngParser::Merge(
sSearch += ";";
if ( sLanguagesDone.indexOf( sSearch ) != -1 ) {
LngLineList::iterator it = pLines->begin();
std::advance( it, nPos );
pLines->erase( it );
mvLines.erase( mvLines.begin() + nPos );
}
if( pEntrys )
{
......@@ -235,14 +227,14 @@ bool LngParser::Merge(
continue;
if ( !sNewText.isEmpty()) {
OString *pLine = (*pLines)[ nPos ];
OString & rLine = mvLines[ nPos ];
OString sText1( sLang );
sText1 += " = \"";
// escape quotes, unescape double escaped quotes fdo#56648
sText1 += sNewText.replaceAll("\"","\\\"").replaceAll("\\\\\"","\\\"");
sText1 += "\"";
*pLine = sText1;
rLine = sText1;
Text[ sLang ] = sNewText;
}
}
......@@ -283,12 +275,10 @@ bool LngParser::Merge(
nLastLangPos++;
nPos++;
if ( nLastLangPos < pLines->size() ) {
LngLineList::iterator it = pLines->begin();
std::advance( it, nLastLangPos );
pLines->insert( it, new OString(sLine) );
if ( nLastLangPos < mvLines.size() ) {
mvLines.insert( mvLines.begin() + nLastLangPos, sLine );
} else {
pLines->push_back( new OString(sLine) );
mvLines.push_back( sLine );
}
}
}
......@@ -296,8 +286,8 @@ bool LngParser::Merge(
}
}
for ( size_t i = 0; i < pLines->size(); ++i )
aDestination << *(*pLines)[i] << '\n';
for ( size_t i = 0; i < mvLines.size(); ++i )
aDestination << mvLines[i] << '\n';
aDestination.close();
return true;
......
......@@ -375,8 +375,8 @@ XRMResMerge::XRMResMerge(
{
if (!rMergeSource.isEmpty() && sLanguage.equalsIgnoreAsciiCase("ALL"))
{
pMergeDataFile = new MergeDataFile(
rMergeSource, sInputFileName, false);
pMergeDataFile.reset(new MergeDataFile(
rMergeSource, sInputFileName, false));
aLanguages = pMergeDataFile->GetLanguages();
}
else
......@@ -393,7 +393,6 @@ XRMResMerge::XRMResMerge(
XRMResMerge::~XRMResMerge()
{
pOutputStream.close();
delete pMergeDataFile;
}
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