An AST node representing a
class declaration.
The shape of this node is:
IClassNode IMetaTagsNode <-- getMetaTagsNode() INamespaceDecorationNode <-- getNamespaceNode() IKeywordNode <-- getKeywordNode() IExpressionNode <-- getNameExpressionNode() IKeywordNode <-- getExtendsKeywordNode() IExpressionNode <-- getBaseClassExpressionNode() IKeywordNode <-- getImplementsKeywordNode() IContainerNode <-- getInterfacesNode() IScopedNode <-- getScopedNode()
For example,
[Foo] [Bar] public class B extends A implements I1, I2 { ... } is represented as
IClassNode IMetaTagsNode IMetaTagNode "Foo" IMetaTagNode "Bar" INamespaceDecorationNode "public" IKeywordNode "class" IIdentifierNode "B" IKeywordNode "extends" IIdentifierNode "A" IKeywordNode "implements" IContainerNode IIdentifierNode "I1" IIdentifierNode "I2" IScopedNode ...
If there is no metadata, the corresponding child node is not present.
If there is no namespace, the corresponding child node is not present.
If there is no extends clause, the two corresponding child nodes are not present.
If there is no implements clause, the two corresponding child nodes are not present.
If the class implements only one interface, there is still an IContainerNode containing the one node for the interface.