diff options
author | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-07-16 14:54:14 +0200 |
---|---|---|
committer | Noel Grandin <noel.grandin@collabora.co.uk> | 2019-07-17 09:56:25 +0200 |
commit | 8e3f4317823aa83e0ad9e7dc008a1550ef3c9798 (patch) | |
tree | b4bf7ece126d0b7838cc8d27fc1a081fe5b01abe /compilerplugins/clang | |
parent | e557bd4eb73ecee802c724c7f7f16ad8b3793bed (diff) |
make overrridevirtual a shared plugin
Change-Id: Ied3b772bdd54cb0e8d6214e7a51866364523b83b
Reviewed-on: https://gerrit.libreoffice.org/75742
Tested-by: Jenkins
Reviewed-by: Noel Grandin <noel.grandin@collabora.co.uk>
Diffstat (limited to 'compilerplugins/clang')
-rw-r--r-- | compilerplugins/clang/overridevirtual.cxx | 20 | ||||
-rw-r--r-- | compilerplugins/clang/sharedvisitor/sharedvisitor.cxx | 15 |
2 files changed, 28 insertions, 7 deletions
diff --git a/compilerplugins/clang/overridevirtual.cxx b/compilerplugins/clang/overridevirtual.cxx index 9b31035d2156..8dd29ab0e426 100644 --- a/compilerplugins/clang/overridevirtual.cxx +++ b/compilerplugins/clang/overridevirtual.cxx @@ -6,6 +6,7 @@ * 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/. */ +#ifndef LO_CLANG_SHARED_PLUGINS #include <algorithm> #include <cassert> @@ -26,6 +27,7 @@ public: explicit OverrideVirtual(loplugin::InstantiationData const & data): FilteringRewritePlugin(data) {} + virtual bool preRun() override; virtual void run() override; bool VisitCXXMethodDecl(CXXMethodDecl const * decl); @@ -34,13 +36,15 @@ private: std::set<SourceLocation> insertions_; }; -void OverrideVirtual::run() { - if (compiler.getLangOpts().CPlusPlus +bool OverrideVirtual::preRun() { + return compiler.getLangOpts().CPlusPlus && compiler.getPreprocessor().getIdentifierInfo( - "LIBO_INTERNAL_ONLY")->hasMacroDefinition()) - { + "LIBO_INTERNAL_ONLY")->hasMacroDefinition(); +} + +void OverrideVirtual::run() { + if (preRun()) TraverseDecl(compiler.getASTContext().getTranslationUnitDecl()); - } } bool OverrideVirtual::VisitCXXMethodDecl(CXXMethodDecl const * decl) { // As a heuristic, ignore declarations where the name is spelled out in an @@ -161,8 +165,10 @@ bool OverrideVirtual::VisitCXXMethodDecl(CXXMethodDecl const * decl) { return true; } -loplugin::Plugin::Registration<OverrideVirtual> X("overridevirtual", true); +loplugin::Plugin::Registration<OverrideVirtual> overridevirtual("overridevirtual"); -} +} // namespace + +#endif // LO_CLANG_SHARED_PLUGINS /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ diff --git a/compilerplugins/clang/sharedvisitor/sharedvisitor.cxx b/compilerplugins/clang/sharedvisitor/sharedvisitor.cxx index ed07569f5431..f3fe66c98fa2 100644 --- a/compilerplugins/clang/sharedvisitor/sharedvisitor.cxx +++ b/compilerplugins/clang/sharedvisitor/sharedvisitor.cxx @@ -25,6 +25,7 @@ #include "../inlinevisible.cxx" #include "../loopvartoosmall.cxx" #include "../overrideparam.cxx" +#include "../overridevirtual.cxx" #include "../pointerbool.cxx" #include "../privatebase.cxx" #include "../rangedforcopy.cxx" @@ -82,6 +83,7 @@ public: , inlineVisible( nullptr ) , loopVarTooSmall( nullptr ) , overrideParam( nullptr ) + , overrideVirtual( nullptr ) , pointerBool( nullptr ) , privateBase( nullptr ) , rangedForCopy( nullptr ) @@ -140,6 +142,8 @@ public: loopVarTooSmall = nullptr; if( overrideParam && !overrideParam->preRun()) overrideParam = nullptr; + if( overrideVirtual && !overrideVirtual->preRun()) + overrideVirtual = nullptr; if( pointerBool && !pointerBool->preRun()) pointerBool = nullptr; if( privateBase && !privateBase->preRun()) @@ -226,6 +230,8 @@ public: loopVarTooSmall->postRun(); if( overrideParam ) overrideParam->postRun(); + if( overrideVirtual ) + overrideVirtual->postRun(); if( pointerBool ) pointerBool->postRun(); if( privateBase ) @@ -318,6 +324,8 @@ public: loopVarTooSmall = static_cast< LoopVarTooSmall* >( plugin ); else if( strcmp( name, "overrideparam" ) == 0 ) overrideParam = static_cast< OverrideParam* >( plugin ); + else if( strcmp( name, "overridevirtual" ) == 0 ) + overrideVirtual = static_cast< OverrideVirtual* >( plugin ); else if( strcmp( name, "pointerbool" ) == 0 ) pointerBool = static_cast< PointerBool* >( plugin ); else if( strcmp( name, "privatebase" ) == 0 ) @@ -549,6 +557,11 @@ public: if( !overrideParam->VisitCXXMethodDecl( arg )) overrideParam = nullptr; } + if( overrideVirtual != nullptr ) + { + if( !overrideVirtual->VisitCXXMethodDecl( arg )) + overrideVirtual = nullptr; + } if( typedefParam != nullptr ) { if( !typedefParam->VisitCXXMethodDecl( arg )) @@ -1130,6 +1143,7 @@ private: || inlineVisible != nullptr || loopVarTooSmall != nullptr || overrideParam != nullptr + || overrideVirtual != nullptr || pointerBool != nullptr || privateBase != nullptr || rangedForCopy != nullptr @@ -1172,6 +1186,7 @@ private: InlineVisible* inlineVisible; LoopVarTooSmall* loopVarTooSmall; OverrideParam* overrideParam; + OverrideVirtual* overrideVirtual; PointerBool* pointerBool; PrivateBase* privateBase; RangedForCopy* rangedForCopy; |