diff options
author | Noel Grandin <noel@peralex.com> | 2014-06-09 09:37:32 +0200 |
---|---|---|
committer | Noel Grandin <noel@peralex.com> | 2014-06-09 10:10:14 +0200 |
commit | 5d1e22d52a659b12fe7f6b5870bd12d07ddca0d8 (patch) | |
tree | 332102e4ff55b5414725c8613db3cb7847248bb9 | |
parent | loplugin: inlinesimplememberfunctions (diff) | |
download | core-5d1e22d52a659b12fe7f6b5870bd12d07ddca0d8.tar.gz core-5d1e22d52a659b12fe7f6b5870bd12d07ddca0d8.zip |
improve safety of loplugin inlinesimplememberfunctions
don't try and move functions containing comments
Change-Id: I2de8fc8be851af979acf9d1a91e7cdd9a5dc6a32
-rw-r--r-- | compilerplugins/clang/inlinesimplememberfunctions.cxx | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/compilerplugins/clang/inlinesimplememberfunctions.cxx b/compilerplugins/clang/inlinesimplememberfunctions.cxx index 4bee14c25200..cd5aa238b66e 100644 --- a/compilerplugins/clang/inlinesimplememberfunctions.cxx +++ b/compilerplugins/clang/inlinesimplememberfunctions.cxx @@ -171,6 +171,12 @@ bool InlineSimpleMemberFunctions::VisitCXXMethodDecl(const CXXMethodDecl * funct "inlinesimpleaccessmethods", functionDecl->getSourceRange().getBegin()) << functionDecl->getSourceRange(); + // display the location of the class member declaration + report( + DiagnosticsEngine::Note, + "inlinesimpleaccessmethods", + functionDecl->getCanonicalDecl()->getSourceRange().getBegin()) + << functionDecl->getCanonicalDecl()->getSourceRange(); } return true; } @@ -197,6 +203,7 @@ bool InlineSimpleMemberFunctions::isInUnoIncludeFile(SourceLocation spellingLoca || name.startswith(SRCDIR "/include/systools/") || name.startswith(SRCDIR "/include/typelib/") || name.startswith(SRCDIR "/include/uno/") + || name.startswith(SRCDIR "/workdir/") || name == SRCDIR "/include/comphelper/implbase_var.hxx"); } @@ -239,6 +246,12 @@ bool InlineSimpleMemberFunctions::rewrite(const CXXMethodDecl * functionDecl) { p1 = compiler.getSourceManager().getCharacterData( functionDecl->getBody()->getLocStart() ); p2 = compiler.getSourceManager().getCharacterData( functionDecl->getBody()->getLocEnd() ); std::string s1( p1, p2 - p1 + 1); + + /* we can't safely move around stuff containing comments, we mess up the resulting code */ + if ( s1.find("/*") != std::string::npos || s1.find("//") != std::string::npos ) { + return false; + } + // strip linefeeds and any double-spaces, so we have a max of one space between tokens s1 = ReplaceString(s1, "\r", ""); s1 = ReplaceString(s1, "\n", ""); |