clang
20.0.0git
include
clang
AST
ASTMutationListener.h
Go to the documentation of this file.
1
//===--- ASTMutationListener.h - AST Mutation Interface --------*- C++ -*-===//
2
//
3
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4
// See https://llvm.org/LICENSE.txt for license information.
5
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6
//
7
//===----------------------------------------------------------------------===//
8
//
9
// This file defines the ASTMutationListener interface.
10
//
11
//===----------------------------------------------------------------------===//
12
#ifndef LLVM_CLANG_AST_ASTMUTATIONLISTENER_H
13
#define LLVM_CLANG_AST_ASTMUTATIONLISTENER_H
14
15
namespace
clang
{
16
class
Attr;
17
class
ClassTemplateDecl;
18
class
ClassTemplateSpecializationDecl;
19
class
ConstructorUsingShadowDecl;
20
class
CXXDestructorDecl;
21
class
CXXRecordDecl;
22
class
Decl
;
23
class
DeclContext;
24
class
Expr;
25
class
FieldDecl;
26
class
FunctionDecl;
27
class
FunctionTemplateDecl;
28
class
Module
;
29
class
NamedDecl;
30
class
NamespaceDecl;
31
class
ObjCCategoryDecl;
32
class
ObjCContainerDecl;
33
class
ObjCInterfaceDecl;
34
class
ObjCPropertyDecl;
35
class
ParmVarDecl;
36
class
QualType;
37
class
RecordDecl;
38
class
TagDecl;
39
class
TranslationUnitDecl;
40
class
ValueDecl;
41
class
VarDecl;
42
class
VarTemplateDecl;
43
class
VarTemplateSpecializationDecl;
44
45
/// An abstract interface that should be implemented by listeners
46
/// that want to be notified when an AST entity gets modified after its
47
/// initial creation.
48
class
ASTMutationListener
{
49
public
:
50
virtual
~ASTMutationListener
();
51
52
/// A new TagDecl definition was completed.
53
virtual
void
CompletedTagDefinition
(
const
TagDecl
*
D
) { }
54
55
/// A new declaration with name has been added to a DeclContext.
56
virtual
void
AddedVisibleDecl
(
const
DeclContext
*DC,
const
Decl
*
D
) {}
57
58
/// An implicit member was added after the definition was completed.
59
virtual
void
AddedCXXImplicitMember
(
const
CXXRecordDecl
*RD,
const
Decl
*
D
) {}
60
61
/// A template specialization (or partial one) was added to the
62
/// template declaration.
63
virtual
void
AddedCXXTemplateSpecialization
(
const
ClassTemplateDecl
*TD,
64
const
ClassTemplateSpecializationDecl
*
D
) {}
65
66
/// A template specialization (or partial one) was added to the
67
/// template declaration.
68
virtual
void
69
AddedCXXTemplateSpecialization
(
const
VarTemplateDecl
*TD,
70
const
VarTemplateSpecializationDecl
*
D
) {}
71
72
/// A template specialization (or partial one) was added to the
73
/// template declaration.
74
virtual
void
AddedCXXTemplateSpecialization
(
const
FunctionTemplateDecl
*TD,
75
const
FunctionDecl
*
D
) {}
76
77
/// A function's exception specification has been evaluated or
78
/// instantiated.
79
virtual
void
ResolvedExceptionSpec
(
const
FunctionDecl
*FD) {}
80
81
/// A function's return type has been deduced.
82
virtual
void
DeducedReturnType
(
const
FunctionDecl
*FD,
QualType
ReturnType);
83
84
/// A virtual destructor's operator delete has been resolved.
85
virtual
void
ResolvedOperatorDelete
(
const
CXXDestructorDecl
*DD,
86
const
FunctionDecl
*
Delete
,
87
Expr
*ThisArg) {}
88
89
/// An implicit member got a definition.
90
virtual
void
CompletedImplicitDefinition
(
const
FunctionDecl
*
D
) {}
91
92
/// The instantiation of a templated function or variable was
93
/// requested. In particular, the point of instantiation and template
94
/// specialization kind of \p D may have changed.
95
virtual
void
InstantiationRequested
(
const
ValueDecl
*
D
) {}
96
97
/// A templated variable's definition was implicitly instantiated.
98
virtual
void
VariableDefinitionInstantiated
(
const
VarDecl
*
D
) {}
99
100
/// A function template's definition was instantiated.
101
virtual
void
FunctionDefinitionInstantiated
(
const
FunctionDecl
*
D
) {}
102
103
/// A default argument was instantiated.