// This file is autogenerated. Do not modify. // Generated by compilerplugins/clang/sharedvisitor/generator.cxx . #ifdef LO_CLANG_SHARED_PLUGINS #include #include #include #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( simplifyConstruct != nullptr ) { if( !simplifyConstruct->VisitVarDecl( arg )) simplifyConstruct = 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