summaryrefslogtreecommitdiff
path: root/compilerplugins/clang/sharedvisitor/sharedvisitor.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'compilerplugins/clang/sharedvisitor/sharedvisitor.cxx')
-rw-r--r--compilerplugins/clang/sharedvisitor/sharedvisitor.cxx964
1 files changed, 964 insertions, 0 deletions
diff --git a/compilerplugins/clang/sharedvisitor/sharedvisitor.cxx b/compilerplugins/clang/sharedvisitor/sharedvisitor.cxx
new file mode 100644
index 000000000000..5b72c329691d
--- /dev/null
+++ b/compilerplugins/clang/sharedvisitor/sharedvisitor.cxx
@@ -0,0 +1,964 @@
+// This file is autogenerated. Do not modify.
+// Generated by compilerplugins/clang/sharedvisitor/generator.cxx .
+
+#ifdef LO_CLANG_SHARED_PLUGINS
+
+#include <config_clang.h>
+
+#include <clang/AST/ASTContext.h>
+#include <clang/AST/RecursiveASTVisitor.h>
+
+#include "../plugin.hxx"
+
+#undef LO_CLANG_SHARED_PLUGINS // to get sources of individual plugins
+#include "../badstatics.cxx"
+#include "../blockblock.cxx"
+#include "../charrightshift.cxx"
+#include "../datamembershadow.cxx"
+#include "../dbgunhandledexception.cxx"
+#include "../derefnullptr.cxx"
+#include "../doubleconvert.cxx"
+#include "../empty.cxx"
+#include "../emptyif.cxx"
+#include "../externandnotdefined.cxx"
+#include "../externvar.cxx"
+#include "../inlinevisible.cxx"
+#include "../loopvartoosmall.cxx"
+#include "../privatebase.cxx"
+#include "../reservedid.cxx"
+#include "../simplifyconstruct.cxx"
+#include "../stringstatic.cxx"
+#include "../subtlezeroinit.cxx"
+#include "../unnecessaryoverride.cxx"
+#include "../unnecessaryparen.cxx"
+#include "../unreffun.cxx"
+#include "../unusedvariablecheck.cxx"
+#include "../weakobject.cxx"
+#include "../dyncastvisibility.cxx"
+#include "../vclwidgets.cxx"
+
+using namespace clang;
+using namespace llvm;
+
+namespace loplugin
+{
+
+class SharedRecursiveASTVisitorBasic
+ : public FilteringPlugin< SharedRecursiveASTVisitorBasic>
+{
+public:
+ explicit SharedRecursiveASTVisitorBasic(const InstantiationData& rData)
+ : FilteringPlugin(rData)
+ , badStatics( nullptr )
+ , blockBlock( nullptr )
+ , charRightShift( nullptr )
+ , dataMemberShadow( nullptr )
+ , dbgUnhandledException( nullptr )
+ , derefNullPtr( nullptr )
+ , doubleConvert( nullptr )
+ , empty( nullptr )
+ , emptyIf( nullptr )
+ , externAndNotDefined( nullptr )
+ , externVar( nullptr )
+ , inlineVisible( nullptr )
+ , loopVarTooSmall( nullptr )
+ , privateBase( nullptr )
+ , reservedId( nullptr )
+ , simplifyConstruct( nullptr )
+ , stringStatic( nullptr )
+ , subtleZeroInit( nullptr )
+ , unnecessaryOverride( nullptr )
+ , unnecessaryParen( nullptr )
+ , unrefFun( nullptr )
+ , unusedVariableCheck( nullptr )
+ , weakObject( nullptr )
+ {}
+ virtual bool preRun() override
+ {
+ if( badStatics && !badStatics->preRun())
+ badStatics = nullptr;
+ if( blockBlock && !blockBlock->preRun())
+ blockBlock = nullptr;
+ if( charRightShift && !charRightShift->preRun())
+ charRightShift = nullptr;
+ if( dataMemberShadow && !dataMemberShadow->preRun())
+ dataMemberShadow = nullptr;
+ if( dbgUnhandledException && !dbgUnhandledException->preRun())
+ dbgUnhandledException = nullptr;
+ if( derefNullPtr && !derefNullPtr->preRun())
+ derefNullPtr = nullptr;
+ if( doubleConvert && !doubleConvert->preRun())
+ doubleConvert = nullptr;
+ if( empty && !empty->preRun())
+ empty = nullptr;
+ if( emptyIf && !emptyIf->preRun())
+ emptyIf = nullptr;
+ if( externAndNotDefined && !externAndNotDefined->preRun())
+ externAndNotDefined = nullptr;
+ if( externVar && !externVar->preRun())
+ externVar = nullptr;
+ if( inlineVisible && !inlineVisible->preRun())
+ inlineVisible = nullptr;
+ if( loopVarTooSmall && !loopVarTooSmall->preRun())
+ loopVarTooSmall = nullptr;
+ if( privateBase && !privateBase->preRun())
+ privateBase = nullptr;
+ if( reservedId && !reservedId->preRun())
+ reservedId = nullptr;
+ if( simplifyConstruct && !simplifyConstruct->preRun())
+ simplifyConstruct = nullptr;
+ if( stringStatic && !stringStatic->preRun())
+ stringStatic = nullptr;
+ if( subtleZeroInit && !subtleZeroInit->preRun())
+ subtleZeroInit = nullptr;
+ if( unnecessaryOverride && !unnecessaryOverride->preRun())
+ unnecessaryOverride = nullptr;
+ if( unnecessaryParen && !unnecessaryParen->preRun())
+ unnecessaryParen = nullptr;
+ if( unrefFun && !unrefFun->preRun())
+ unrefFun = nullptr;
+ if( unusedVariableCheck && !unusedVariableCheck->preRun())
+ unusedVariableCheck = nullptr;
+ if( weakObject && !weakObject->preRun())
+ weakObject = nullptr;
+ return anyPluginActive();
+ }
+ virtual void postRun() override
+ {
+ if( badStatics )
+ badStatics->postRun();
+ if( blockBlock )
+ blockBlock->postRun();
+ if( charRightShift )
+ charRightShift->postRun();
+ if( dataMemberShadow )
+ dataMemberShadow->postRun();
+ if( dbgUnhandledException )
+ dbgUnhandledException->postRun();
+ if( derefNullPtr )
+ derefNullPtr->postRun();
+ if( doubleConvert )
+ doubleConvert->postRun();
+ if( empty )
+ empty->postRun();
+ if( emptyIf )
+ emptyIf->postRun();
+ if( externAndNotDefined )
+ externAndNotDefined->postRun();
+ if( externVar )
+ externVar->postRun();
+ if( inlineVisible )
+ inlineVisible->postRun();
+ if( loopVarTooSmall )
+ loopVarTooSmall->postRun();
+ if( privateBase )
+ privateBase->postRun();
+ if( reservedId )
+ reservedId->postRun();
+ if( simplifyConstruct )
+ simplifyConstruct->postRun();
+ if( stringStatic )
+ stringStatic->postRun();
+ if( subtleZeroInit )
+ subtleZeroInit->postRun();
+ if( unnecessaryOverride )
+ unnecessaryOverride->postRun();
+ if( unnecessaryParen )
+ unnecessaryParen->postRun();
+ if( unrefFun )
+ unrefFun->postRun();
+ if( unusedVariableCheck )
+ unusedVariableCheck->postRun();
+ if( weakObject )
+ weakObject->postRun();
+ }
+ virtual void run() override {
+ if (preRun()) {
+ TraverseDecl(compiler.getASTContext().getTranslationUnitDecl());
+ postRun();
+ }
+ }
+ enum { isSharedPlugin = true };
+ virtual bool setSharedPlugin( Plugin* plugin, const char* name ) override
+ {
+ if( strcmp( name, "badstatics" ) == 0 )
+ badStatics = static_cast< BadStatics* >( plugin );
+ else if( strcmp( name, "blockblock" ) == 0 )
+ blockBlock = static_cast< BlockBlock* >( plugin );
+ else if( strcmp( name, "charrightshift" ) == 0 )
+ charRightShift = static_cast< CharRightShift* >( plugin );
+ else if( strcmp( name, "datamembershadow" ) == 0 )
+ dataMemberShadow = static_cast< DataMemberShadow* >( plugin );
+ else if( strcmp( name, "dbgunhandledexception" ) == 0 )
+ dbgUnhandledException = static_cast< DbgUnhandledException* >( plugin );
+ else if( strcmp( name, "derefnullptr" ) == 0 )
+ derefNullPtr = static_cast< DerefNullPtr* >( plugin );
+ else if( strcmp( name, "doubleconvert" ) == 0 )
+ doubleConvert = static_cast< DoubleConvert* >( plugin );
+ else if( strcmp( name, "empty" ) == 0 )
+ empty = static_cast< Empty* >( plugin );
+ else if( strcmp( name, "emptyif" ) == 0 )
+ emptyIf = static_cast< EmptyIf* >( plugin );
+ else if( strcmp( name, "externandnotdefined" ) == 0 )
+ externAndNotDefined = static_cast< ExternAndNotDefined* >( plugin );
+ else if( strcmp( name, "externvar" ) == 0 )
+ externVar = static_cast< ExternVar* >( plugin );
+ else if( strcmp( name, "inlinevisible" ) == 0 )
+ inlineVisible = static_cast< InlineVisible* >( plugin );
+ else if( strcmp( name, "loopvartoosmall" ) == 0 )
+ loopVarTooSmall = static_cast< LoopVarTooSmall* >( plugin );
+ else if( strcmp( name, "privatebase" ) == 0 )
+ privateBase = static_cast< PrivateBase* >( plugin );
+ else if( strcmp( name, "reservedid" ) == 0 )
+ reservedId = static_cast< ReservedId* >( plugin );
+ else if( strcmp( name, "simplifyconstruct" ) == 0 )
+ simplifyConstruct = static_cast< SimplifyConstruct* >( plugin );
+ else if( strcmp( name, "stringstatic" ) == 0 )
+ stringStatic = static_cast< StringStatic* >( plugin );
+ else if( strcmp( name, "subtlezeroinit" ) == 0 )
+ subtleZeroInit = static_cast< SubtleZeroInit* >( plugin );
+ else if( strcmp( name, "unnecessaryoverride" ) == 0 )
+ unnecessaryOverride = static_cast< UnnecessaryOverride* >( plugin );
+ else if( strcmp( name, "unnecessaryparen" ) == 0 )
+ unnecessaryParen = static_cast< UnnecessaryParen* >( plugin );
+ else if( strcmp( name, "unreffun" ) == 0 )
+ unrefFun = static_cast< UnrefFun* >( plugin );
+ else if( strcmp( name, "unusedvariablecheck" ) == 0 )
+ unusedVariableCheck = static_cast< UnusedVariableCheck* >( plugin );
+ else if( strcmp( name, "weakobject" ) == 0 )
+ weakObject = static_cast< WeakObject* >( plugin );
+ else
+ return false;
+ return true;
+ }
+ bool VisitBinEQ(const class clang::BinaryOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( empty != nullptr )
+ {
+ if( !empty->VisitBinEQ( arg ))
+ empty = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitBinGE(const class clang::BinaryOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( empty != nullptr )
+ {
+ if( !empty->VisitBinGE( arg ))
+ empty = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitBinGT(const class clang::BinaryOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( empty != nullptr )
+ {
+ if( !empty->VisitBinGT( arg ))
+ empty = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitBinLE(const class clang::BinaryOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( empty != nullptr )
+ {
+ if( !empty->VisitBinLE( arg ))
+ empty = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitBinLT(const class clang::BinaryOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( empty != nullptr )
+ {
+ if( !empty->VisitBinLT( arg ))
+ empty = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitBinNE(const class clang::BinaryOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( empty != nullptr )
+ {
+ if( !empty->VisitBinNE( arg ))
+ empty = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitBinShr(const class clang::BinaryOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( charRightShift != nullptr )
+ {
+ if( !charRightShift->VisitBinShr( arg ))
+ charRightShift = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitBinaryConditionalOperator(const class clang::BinaryConditionalOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitBinaryConditionalOperator( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCXXConstructExpr(const class clang::CXXConstructExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( simplifyConstruct != nullptr )
+ {
+ if( !simplifyConstruct->VisitCXXConstructExpr( arg ))
+ simplifyConstruct = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCXXDeleteExpr(const class clang::CXXDeleteExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitCXXDeleteExpr( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCXXMethodDecl(const class clang::CXXMethodDecl * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( unnecessaryOverride != nullptr )
+ {
+ if( !unnecessaryOverride->VisitCXXMethodDecl( arg ))
+ unnecessaryOverride = nullptr;
+ }
+ if( weakObject != nullptr )
+ {
+ if( !weakObject->VisitCXXMethodDecl( arg ))
+ weakObject = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCXXNewExpr(const class clang::CXXNewExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( subtleZeroInit != nullptr )
+ {
+ if( !subtleZeroInit->VisitCXXNewExpr( arg ))
+ subtleZeroInit = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCXXOperatorCallExpr(const class clang::CXXOperatorCallExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitCXXOperatorCallExpr( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCXXRecordDecl(const class clang::CXXRecordDecl * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( privateBase != nullptr )
+ {
+ if( !privateBase->VisitCXXRecordDecl( arg ))
+ privateBase = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCallExpr(const class clang::CallExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( dbgUnhandledException != nullptr )
+ {
+ if( !dbgUnhandledException->VisitCallExpr( arg ))
+ dbgUnhandledException = nullptr;
+ }
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitCallExpr( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCaseStmt(const class clang::CaseStmt * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitCaseStmt( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCompoundStmt(const class clang::CompoundStmt * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( blockBlock != nullptr )
+ {
+ if( !blockBlock->VisitCompoundStmt( arg ))
+ blockBlock = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitConditionalOperator(const class clang::ConditionalOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitConditionalOperator( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitDoStmt(const class clang::DoStmt * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( loopVarTooSmall != nullptr )
+ {
+ if( !loopVarTooSmall->VisitDoStmt( arg ))
+ loopVarTooSmall = nullptr;
+ }
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitDoStmt( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitFieldDecl(const class clang::FieldDecl * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( dataMemberShadow != nullptr )
+ {
+ if( !dataMemberShadow->VisitFieldDecl( arg ))
+ dataMemberShadow = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitForStmt(const class clang::ForStmt * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( loopVarTooSmall != nullptr )
+ {
+ if( !loopVarTooSmall->VisitForStmt( arg ))
+ loopVarTooSmall = nullptr;
+ }
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitForStmt( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitFunctionDecl(const class clang::FunctionDecl * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( externAndNotDefined != nullptr )
+ {
+ if( !externAndNotDefined->VisitFunctionDecl( arg ))
+ externAndNotDefined = nullptr;
+ }
+ if( inlineVisible != nullptr )
+ {
+ if( !inlineVisible->VisitFunctionDecl( arg ))
+ inlineVisible = nullptr;
+ }
+ if( unrefFun != nullptr )
+ {
+ if( !unrefFun->VisitFunctionDecl( arg ))
+ unrefFun = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitIfStmt(const class clang::IfStmt * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( emptyIf != nullptr )
+ {
+ if( !emptyIf->VisitIfStmt( arg ))
+ emptyIf = nullptr;
+ }
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitIfStmt( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitMaterializeTemporaryExpr(const class clang::MaterializeTemporaryExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( doubleConvert != nullptr )
+ {
+ if( !doubleConvert->VisitMaterializeTemporaryExpr( arg ))
+ doubleConvert = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitMemberExpr(const class clang::MemberExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitMemberExpr( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitNamedDecl(const class clang::NamedDecl * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( reservedId != nullptr )
+ {
+ if( !reservedId->VisitNamedDecl( arg ))
+ reservedId = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitParenExpr(const class clang::ParenExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitParenExpr( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitReturnStmt(const class clang::ReturnStmt * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( stringStatic != nullptr )
+ {
+ if( !stringStatic->VisitReturnStmt( arg ))
+ stringStatic = nullptr;
+ }
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitReturnStmt( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitSwitchStmt(const class clang::SwitchStmt * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitSwitchStmt( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitUnaryDeref(const class clang::UnaryOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( derefNullPtr != nullptr )
+ {
+ if( !derefNullPtr->VisitUnaryDeref( arg ))
+ derefNullPtr = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitUnaryExprOrTypeTraitExpr(const class clang::UnaryExprOrTypeTraitExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitUnaryExprOrTypeTraitExpr( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitVarDecl(const class clang::VarDecl *const arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( badStatics != nullptr )
+ {
+ if( !badStatics->VisitVarDecl( arg ))
+ badStatics = nullptr;
+ }
+ if( externVar != nullptr )
+ {
+ if( !externVar->VisitVarDecl( arg ))
+ externVar = nullptr;
+ }
+ if( stringStatic != nullptr )
+ {
+ if( !stringStatic->VisitVarDecl( arg ))
+ stringStatic = nullptr;
+ }
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitVarDecl( arg ))
+ unnecessaryParen = nullptr;
+ }
+ if( unusedVariableCheck != nullptr )
+ {
+ if( !unusedVariableCheck->VisitVarDecl( arg ))
+ unusedVariableCheck = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitWhileStmt(const class clang::WhileStmt * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( loopVarTooSmall != nullptr )
+ {
+ if( !loopVarTooSmall->VisitWhileStmt( arg ))
+ loopVarTooSmall = nullptr;
+ }
+ if( unnecessaryParen != nullptr )
+ {
+ if( !unnecessaryParen->VisitWhileStmt( arg ))
+ unnecessaryParen = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool TraverseCXXBindTemporaryExpr(class clang::CXXBindTemporaryExpr * arg)
+ {
+ SimplifyConstruct* saveSimplifyConstruct = simplifyConstruct;
+ if( simplifyConstruct != nullptr )
+ {
+ if( !simplifyConstruct->PreTraverseCXXBindTemporaryExpr( arg ))
+ simplifyConstruct = nullptr;
+ }
+ bool ret = RecursiveASTVisitor::TraverseCXXBindTemporaryExpr( arg );
+ simplifyConstruct = saveSimplifyConstruct;
+ return ret;
+ }
+ bool TraverseCXXCatchStmt(class clang::CXXCatchStmt * arg)
+ {
+ DbgUnhandledException* saveDbgUnhandledException = dbgUnhandledException;
+ if( dbgUnhandledException != nullptr )
+ {
+ if( !dbgUnhandledException->PreTraverseCXXCatchStmt( arg ))
+ dbgUnhandledException = nullptr;
+ }
+ bool ret = RecursiveASTVisitor::TraverseCXXCatchStmt( arg );
+ if( dbgUnhandledException != nullptr )
+ {
+ if( !dbgUnhandledException->PostTraverseCXXCatchStmt( arg, ret ))
+ saveDbgUnhandledException = nullptr;
+ }
+ dbgUnhandledException = saveDbgUnhandledException;
+ return ret;
+ }
+ bool TraverseFriendDecl(class clang::FriendDecl * arg)
+ {
+ UnrefFun* saveUnrefFun = unrefFun;
+ if( unrefFun != nullptr )
+ {
+ if( !unrefFun->PreTraverseFriendDecl( arg ))
+ unrefFun = nullptr;
+ }
+ bool ret = RecursiveASTVisitor::TraverseFriendDecl( arg );
+ if( unrefFun != nullptr )
+ {
+ if( !unrefFun->PostTraverseFriendDecl( arg, ret ))
+ saveUnrefFun = nullptr;
+ }
+ unrefFun = saveUnrefFun;
+ return ret;
+ }
+ bool TraverseInitListExpr(class clang::InitListExpr * arg)
+ {
+ SimplifyConstruct* saveSimplifyConstruct = simplifyConstruct;
+ if( simplifyConstruct != nullptr )
+ {
+ if( !simplifyConstruct->PreTraverseInitListExpr( arg ))
+ simplifyConstruct = nullptr;
+ }
+ bool ret = RecursiveASTVisitor::TraverseInitListExpr( arg );
+ simplifyConstruct = saveSimplifyConstruct;
+ return ret;
+ }
+ bool TraverseReturnStmt(class clang::ReturnStmt * arg)
+ {
+ SimplifyConstruct* saveSimplifyConstruct = simplifyConstruct;
+ if( simplifyConstruct != nullptr )
+ {
+ if( !simplifyConstruct->PreTraverseReturnStmt( arg ))
+ simplifyConstruct = nullptr;
+ }
+ bool ret = RecursiveASTVisitor::TraverseReturnStmt( arg );
+ simplifyConstruct = saveSimplifyConstruct;
+ return ret;
+ }
+private:
+ bool anyPluginActive() const
+ {
+ return badStatics != nullptr
+ || blockBlock != nullptr
+ || charRightShift != nullptr
+ || dataMemberShadow != nullptr
+ || dbgUnhandledException != nullptr
+ || derefNullPtr != nullptr
+ || doubleConvert != nullptr
+ || empty != nullptr
+ || emptyIf != nullptr
+ || externAndNotDefined != nullptr
+ || externVar != nullptr
+ || inlineVisible != nullptr
+ || loopVarTooSmall != nullptr
+ || privateBase != nullptr
+ || reservedId != nullptr
+ || simplifyConstruct != nullptr
+ || stringStatic != nullptr
+ || subtleZeroInit != nullptr
+ || unnecessaryOverride != nullptr
+ || unnecessaryParen != nullptr
+ || unrefFun != nullptr
+ || unusedVariableCheck != nullptr
+ || weakObject != nullptr;
+ }
+ BadStatics* badStatics;
+ BlockBlock* blockBlock;
+ CharRightShift* charRightShift;
+ DataMemberShadow* dataMemberShadow;
+ DbgUnhandledException* dbgUnhandledException;
+ DerefNullPtr* derefNullPtr;
+ DoubleConvert* doubleConvert;
+ Empty* empty;
+ EmptyIf* emptyIf;
+ ExternAndNotDefined* externAndNotDefined;
+ ExternVar* externVar;
+ InlineVisible* inlineVisible;
+ LoopVarTooSmall* loopVarTooSmall;
+ PrivateBase* privateBase;
+ ReservedId* reservedId;
+ SimplifyConstruct* simplifyConstruct;
+ StringStatic* stringStatic;
+ SubtleZeroInit* subtleZeroInit;
+ UnnecessaryOverride* unnecessaryOverride;
+ UnnecessaryParen* unnecessaryParen;
+ UnrefFun* unrefFun;
+ UnusedVariableCheck* unusedVariableCheck;
+ WeakObject* weakObject;
+};
+
+loplugin::Plugin::Registration< SharedRecursiveASTVisitorBasic > registrationBasic("sharedvisitorBasic");
+
+
+class SharedRecursiveASTVisitorVisitTemplates
+ : public FilteringPlugin< SharedRecursiveASTVisitorVisitTemplates>
+{
+public:
+ explicit SharedRecursiveASTVisitorVisitTemplates(const InstantiationData& rData)
+ : FilteringPlugin(rData)
+ , dynCastVisibility( nullptr )
+ , vCLWidgets( nullptr )
+ {}
+ virtual bool preRun() override
+ {
+ if( dynCastVisibility && !dynCastVisibility->preRun())
+ dynCastVisibility = nullptr;
+ if( vCLWidgets && !vCLWidgets->preRun())
+ vCLWidgets = nullptr;
+ return anyPluginActive();
+ }
+ virtual void postRun() override
+ {
+ if( dynCastVisibility )
+ dynCastVisibility->postRun();
+ if( vCLWidgets )
+ vCLWidgets->postRun();
+ }
+ virtual void run() override {
+ if (preRun()) {
+ TraverseDecl(compiler.getASTContext().getTranslationUnitDecl());
+ postRun();
+ }
+ }
+ enum { isSharedPlugin = true };
+ virtual bool setSharedPlugin( Plugin* plugin, const char* name ) override
+ {
+ if( strcmp( name, "dyncastvisibility" ) == 0 )
+ dynCastVisibility = static_cast< DynCastVisibility* >( plugin );
+ else if( strcmp( name, "vclwidgets" ) == 0 )
+ vCLWidgets = static_cast< VCLWidgets* >( plugin );
+ else
+ return false;
+ return true;
+ }
+bool shouldVisitTemplateInstantiations() const { return true; }
+ bool VisitBinaryOperator(const class clang::BinaryOperator * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( vCLWidgets != nullptr )
+ {
+ if( !vCLWidgets->VisitBinaryOperator( arg ))
+ vCLWidgets = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCXXConstructExpr(const class clang::CXXConstructExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( vCLWidgets != nullptr )
+ {
+ if( !vCLWidgets->VisitCXXConstructExpr( arg ))
+ vCLWidgets = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCXXDeleteExpr(const class clang::CXXDeleteExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( vCLWidgets != nullptr )
+ {
+ if( !vCLWidgets->VisitCXXDeleteExpr( arg ))
+ vCLWidgets = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCXXDestructorDecl(const class clang::CXXDestructorDecl * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( vCLWidgets != nullptr )
+ {
+ if( !vCLWidgets->VisitCXXDestructorDecl( arg ))
+ vCLWidgets = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCXXDynamicCastExpr(const class clang::CXXDynamicCastExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( dynCastVisibility != nullptr )
+ {
+ if( !dynCastVisibility->VisitCXXDynamicCastExpr( arg ))
+ dynCastVisibility = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitCallExpr(const class clang::CallExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( vCLWidgets != nullptr )
+ {
+ if( !vCLWidgets->VisitCallExpr( arg ))
+ vCLWidgets = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitDeclRefExpr(const class clang::DeclRefExpr * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( vCLWidgets != nullptr )
+ {
+ if( !vCLWidgets->VisitDeclRefExpr( arg ))
+ vCLWidgets = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitFieldDecl(const class clang::FieldDecl * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( vCLWidgets != nullptr )
+ {
+ if( !vCLWidgets->VisitFieldDecl( arg ))
+ vCLWidgets = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitFunctionDecl(const class clang::FunctionDecl * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( vCLWidgets != nullptr )
+ {
+ if( !vCLWidgets->VisitFunctionDecl( arg ))
+ vCLWidgets = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitParmVarDecl(const class clang::ParmVarDecl * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( vCLWidgets != nullptr )
+ {
+ if( !vCLWidgets->VisitParmVarDecl( arg ))
+ vCLWidgets = nullptr;
+ }
+ return anyPluginActive();
+ }
+ bool VisitVarDecl(const class clang::VarDecl * arg)
+ {
+ if( ignoreLocation( arg ))
+ return true;
+ if( vCLWidgets != nullptr )
+ {
+ if( !vCLWidgets->VisitVarDecl( arg ))
+ vCLWidgets = nullptr;
+ }
+ return anyPluginActive();
+ }
+private:
+ bool anyPluginActive() const
+ {
+ return dynCastVisibility != nullptr
+ || vCLWidgets != nullptr;
+ }
+ DynCastVisibility* dynCastVisibility;
+ VCLWidgets* vCLWidgets;
+};
+
+loplugin::Plugin::Registration< SharedRecursiveASTVisitorVisitTemplates > registrationVisitTemplates("sharedvisitorVisitTemplates");
+
+} // namespace loplugin
+
+#endif // LO_CLANG_SHARED_PLUGINS