| //===--- ASTMutationListener.h - AST Mutation Interface --------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| // |
| // This file defines the ASTMutationListener interface. |
| // |
| //===----------------------------------------------------------------------===// |
| #ifndef LLVM_CLANG_AST_ASTMUTATIONLISTENER_H |
| #define LLVM_CLANG_AST_ASTMUTATIONLISTENER_H |
| |
| namespace clang { |
| class Attr; |
| class ClassTemplateDecl; |
| class ClassTemplateSpecializationDecl; |
| class ConstructorUsingShadowDecl; |
| class CXXDestructorDecl; |
| class CXXRecordDecl; |
| class Decl; |
| class DeclContext; |
| class Expr; |
| class FieldDecl; |
| class FunctionDecl; |
| class FunctionTemplateDecl; |
| class Module; |
| class NamedDecl; |
| class ObjCCategoryDecl; |
| class ObjCContainerDecl; |
| class ObjCInterfaceDecl; |
| class ObjCPropertyDecl; |
| class ParmVarDecl; |
| class QualType; |
| class RecordDecl; |
| class TagDecl; |
| class ValueDecl; |
| class VarDecl; |
| class VarTemplateDecl; |
| class VarTemplateSpecializationDecl; |
| |
| /// An abstract interface that should be implemented by listeners |
| /// that want to be notified when an AST entity gets modified after its |
| /// initial creation. |
| class ASTMutationListener { |
| public: |
| virtual ~ASTMutationListener(); |
| |
| /// A new TagDecl definition was completed. |
| virtual void CompletedTagDefinition(const TagDecl *D) { } |
| |
| /// A new declaration with name has been added to a DeclContext. |
| virtual void AddedVisibleDecl(const DeclContext *DC, const Decl *D) {} |
| |
| /// An implicit member was added after the definition was completed. |
| virtual void AddedCXXImplicitMember(const CXXRecordDecl *RD, const Decl *D) {} |
| |
| /// A template specialization (or partial one) was added to the |
| /// template declaration. |
| virtual void AddedCXXTemplateSpecialization(const ClassTemplateDecl *TD, |
| const ClassTemplateSpecializationDecl *D) {} |
| |
| /// A template specialization (or partial one) was added to the |
| /// template declaration. |
| virtual void |
| AddedCXXTemplateSpecialization(const VarTemplateDecl *TD, |
| const VarTemplateSpecializationDecl *D) {} |
| |
| /// A template specialization (or partial one) was added to the |
| /// template declaration. |
| virtual void AddedCXXTemplateSpecialization(const FunctionTemplateDecl *TD, |
| const FunctionDecl *D) {} |
| |
| /// A function's exception specification has been evaluated or |
| /// instantiated. |
| virtual void ResolvedExceptionSpec(const FunctionDecl *FD) {} |
| |
| /// A function's return type has been deduced. |
| virtual void DeducedReturnType(const FunctionDecl *FD, QualType ReturnType); |
| |
| /// A virtual destructor's operator delete has been resolved. |
| virtual void ResolvedOperatorDelete(const CXXDestructorDecl *DD, |
| const FunctionDecl *Delete, |
| Expr *ThisArg) {} |
| |
| /// An implicit member got a definition. |
| virtual void CompletedImplicitDefinition(const FunctionDecl *D) {} |
| |
| /// The instantiation of a templated function or variable was |
| /// requested. In particular, the point of instantiation and template |
| /// specialization kind of \p D may have changed. |
| virtual void InstantiationRequested(const ValueDecl *D) {} |
| |
| /// A templated variable's definition was implicitly instantiated. |
| virtual void VariableDefinitionInstantiated(const VarDecl *D) {} |
| |
| /// A function template's definition was instantiated. |
| virtual void FunctionDefinitionInstantiated(const FunctionDecl *D) {} |
| |
| /// A default argument was instantiated. |
| virtual void DefaultArgumentInstantiated(const ParmVarDecl *D) {} |
| |
| /// A default member initializer was instantiated. |
| virtual void DefaultMemberInitializerInstantiated(const FieldDecl *D) {} |
| |
| /// A new objc category class was added for an interface. |
| virtual void AddedObjCCategoryToInterface(const ObjCCategoryDecl *CatD, |
| const ObjCInterfaceDecl *IFD) {} |
| |
| /// A declaration is marked used which was not previously marked used. |
| /// |
| /// \param D the declaration marked used |
| virtual void DeclarationMarkedUsed(const Decl *D) {} |
| |
| /// A declaration is marked as OpenMP threadprivate which was not |
| /// previously marked as threadprivate. |
| /// |
| /// \param D the declaration marked OpenMP threadprivate. |
| virtual void DeclarationMarkedOpenMPThreadPrivate(const Decl *D) {} |
| |
| /// A declaration is marked as OpenMP declaretarget which was not |
| /// previously marked as declaretarget. |
| /// |
| /// \param D the declaration marked OpenMP declaretarget. |
| /// \param Attr the added attribute. |
| virtual void DeclarationMarkedOpenMPDeclareTarget(const Decl *D, |
| const Attr *Attr) {} |
| |
| /// A declaration is marked as a variable with OpenMP allocator. |
| /// |
| /// \param D the declaration marked as a variable with OpenMP allocator. |
| virtual void DeclarationMarkedOpenMPAllocate(const Decl *D, const Attr *A) {} |
| |
| /// A definition has been made visible by being redefined locally. |
| /// |
| /// \param D The definition that was previously not visible. |
| /// \param M The containing module in which the definition was made visible, |
| /// if any. |
| virtual void RedefinedHiddenDefinition(const NamedDecl *D, Module *M) {} |
| |
| /// An attribute was added to a RecordDecl |
| /// |
| /// \param Attr The attribute that was added to the Record |
| /// |
| /// \param Record The RecordDecl that got a new attribute |
| virtual void AddedAttributeToRecord(const Attr *Attr, |
| const RecordDecl *Record) {} |
| |
| // NOTE: If new methods are added they should also be added to |
| // MultiplexASTMutationListener. |
| }; |
| |
| } // end namespace clang |
| |
| #endif |