diff options
Diffstat (limited to 'compilerplugins/clang/sharedvisitor/sharedvisitor.cxx')
-rw-r--r-- | compilerplugins/clang/sharedvisitor/sharedvisitor.cxx | 964 |
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 |