/** * Copyright (C) 2006-2017 INRIA and contributors * Spoon - http://spoon.gforge.inria.fr/ * * This software is governed by the CeCILL-C License under French law and * abiding by the rules of distribution of free software. You can use, modify * and/or redistribute the software under the terms of the CeCILL-C license as * circulated by CEA, CNRS and INRIA at http://www.cecill.info. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the CeCILL-C License for more details. * * The fact that you are presently reading this means that you have had * knowledge of the CeCILL-C license and that you accept its terms. */ package spoon.reflect.visitor; import spoon.reflect.code.CtAbstractInvocation; import spoon.reflect.code.CtAnnotationFieldAccess; import spoon.reflect.code.CtArrayAccess; import spoon.reflect.code.CtArrayRead; import spoon.reflect.code.CtArrayWrite; import spoon.reflect.code.CtAssert; import spoon.reflect.code.CtAssignment; import spoon.reflect.code.CtBinaryOperator; import spoon.reflect.code.CtBlock; import spoon.reflect.code.CtBreak; import spoon.reflect.code.CtCFlowBreak; import spoon.reflect.code.CtCase; import spoon.reflect.code.CtCatch; import spoon.reflect.code.CtCatchVariable; import spoon.reflect.code.CtCodeElement; import spoon.reflect.code.CtCodeSnippetExpression; import spoon.reflect.code.CtCodeSnippetStatement; import spoon.reflect.code.CtComment; import spoon.reflect.code.CtConditional; import spoon.reflect.code.CtConstructorCall; import spoon.reflect.code.CtContinue; import spoon.reflect.code.CtDo; import spoon.reflect.code.CtExecutableReferenceExpression; import spoon.reflect.code.CtExpression; import spoon.reflect.code.CtFieldAccess; import spoon.reflect.code.CtFieldRead; import spoon.reflect.code.CtFieldWrite; import spoon.reflect.code.CtFor; import spoon.reflect.code.CtForEach; import spoon.reflect.code.CtIf; import spoon.reflect.code.CtInvocation; import spoon.reflect.code.CtLambda; import spoon.reflect.code.CtLiteral; import spoon.reflect.code.CtLocalVariable; import spoon.reflect.code.CtLoop; import spoon.reflect.code.CtNewArray; import spoon.reflect.code.CtNewClass; import spoon.reflect.code.CtOperatorAssignment; import spoon.reflect.code.CtReturn; import spoon.reflect.code.CtStatement; import spoon.reflect.code.CtStatementList; import spoon.reflect.code.CtSuperAccess; import spoon.reflect.code.CtSwitch; import spoon.reflect.code.CtSynchronized; import spoon.reflect.code.CtTargetedExpression; import spoon.reflect.code.CtThisAccess; import spoon.reflect.code.CtThrow; import spoon.reflect.code.CtTry; import spoon.reflect.code.CtTryWithResource; import spoon.reflect.code.CtTypeAccess; import spoon.reflect.code.CtUnaryOperator; import spoon.reflect.code.CtVariableAccess; import spoon.reflect.code.CtVariableRead; import spoon.reflect.code.CtVariableWrite; import spoon.reflect.code.CtWhile; import spoon.reflect.declaration.CtAnnotation; import spoon.reflect.declaration.CtAnnotationMethod; import spoon.reflect.declaration.CtAnnotationType; import spoon.reflect.declaration.CtAnonymousExecutable; import spoon.reflect.declaration.CtClass; import spoon.reflect.declaration.CtCodeSnippet; import spoon.reflect.declaration.CtConstructor; import spoon.reflect.declaration.CtElement; import spoon.reflect.declaration.CtEnum; import spoon.reflect.declaration.CtEnumValue; import spoon.reflect.declaration.CtExecutable; import spoon.reflect.declaration.CtField; import spoon.reflect.declaration.CtFormalTypeDeclarer; import spoon.reflect.declaration.CtInterface; import spoon.reflect.declaration.CtMethod; import spoon.reflect.declaration.CtModifiable; import spoon.reflect.declaration.CtMultiTypedElement; import spoon.reflect.declaration.CtNamedElement; import spoon.reflect.declaration.CtPackage; import spoon.reflect.declaration.CtParameter; import spoon.reflect.declaration.CtType; import spoon.reflect.declaration.CtTypeInformation; import spoon.reflect.declaration.CtTypeMember; import spoon.reflect.declaration.CtTypeParameter; import spoon.reflect.declaration.CtTypedElement; import spoon.reflect.declaration.CtVariable; import spoon.reflect.reference.CtActualTypeContainer; import spoon.reflect.reference.CtArrayTypeReference; import spoon.reflect.reference.CtCatchVariableReference; import spoon.reflect.reference.CtExecutableReference; import spoon.reflect.reference.CtFieldReference; import spoon.reflect.reference.CtIntersectionTypeReference; import spoon.reflect.reference.CtLocalVariableReference; import spoon.reflect.reference.CtPackageReference; import spoon.reflect.reference.CtParameterReference; import spoon.reflect.reference.CtReference; import spoon.reflect.reference.CtTypeParameterReference; import spoon.reflect.reference.CtTypeReference; import spoon.reflect.reference.CtUnboundVariableReference; import spoon.reflect.reference.CtVariableReference; import spoon.reflect.reference.CtWildcardReference; import java.lang.annotation.Annotation; import java.util.Collection; /** * This class provides an abstract implementation of the visitor that allows its * subclasses to scans the metamodel elements by recursively using their * (abstract) supertype scanning methods. It declares a scan method for each * abstract element of the AST and a visit method for each element of the AST. */ public abstract class CtInheritanceScanner implements CtVisitor { /** * Default constructor. */ public CtInheritanceScanner() { } public <T> void visitCtCodeSnippetExpression( CtCodeSnippetExpression<T> e) { scanCtCodeSnippet(e); scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtCodeSnippetStatement(CtCodeSnippetStatement e) { scanCtCodeSnippet(e); scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } /** * Generically scans a collection of meta-model elements. */ public void scan(Collection<? extends CtElement> elements) { if (elements != null) { for (CtElement e : elements) { scan(e); } } } /** * Generically scans a meta-model element. */ public void scan(CtElement element) { if (element != null) { element.accept(this); } } /** * Scans an abstract invocation. */ public <T> void scanCtAbstractInvocation(CtAbstractInvocation<T> a) { } /** * Scans an abstract control flow break. */ public void scanCtCFlowBreak(CtCFlowBreak flowBreak) { } /** * Scans an abstract code element. */ public void scanCtCodeElement(CtCodeElement e) { } public void scanCtTypeMember(CtTypeMember e) { } /** * Scans an abstract element. */ public void scanCtElement(CtElement e) { } /** * Scans an abstract executable. */ public <R> void scanCtExecutable(CtExecutable<R> e) { } /** * Scans an abstract expression. */ public <T> void scanCtExpression(CtExpression<T> expression) { } /** * Scans a formal type declarer. */ public void scanCtFormalTypeDeclarer(CtFormalTypeDeclarer e) { } public void scanCtVisitable(CtVisitable e) { } /** * Scans an actual type container.. */ public void scanCtActualTypeContainer(CtActualTypeContainer reference) { } /** * Scans an abstract loop. */ public void scanCtLoop(CtLoop loop) { } /** * Scans an abstract modifiable element. */ public void scanCtModifiable(CtModifiable m) { } /** * Scans an abstract named element. */ public void scanCtNamedElement(CtNamedElement e) { } /** * Scans an abstract reference. */ public void scanCtReference(CtReference reference) { } /** * Scans an abstract statement. */ public void scanCtStatement(CtStatement s) { } /** * Scans an abstract targeted expression. */ public <T, E extends CtExpression<?>> void scanCtTargetedExpression( CtTargetedExpression<T, E> targetedExpression) { } /** * Scans an abstract type. */ public <T> void scanCtType(CtType<T> type) { } /** * Scans an abstract typed element. */ public <T> void scanCtTypedElement(CtTypedElement<T> e) { } /** * Scans an abstract variable declaration. */ public <T> void scanCtVariable(CtVariable<T> v) { } /** * Scans an array access (read and write). */ public <T, E extends CtExpression<?>> void scanCtArrayAccess(CtArrayAccess<T, E> arrayAccess) { } /** * Scans a field access (read and write). */ public <T> void scanCtFieldAccess(CtFieldAccess<T> fieldAccess) { } /** * Scans a variable access (read and write). */ public <T> void scanCtVariableAccess(CtVariableAccess<T> variableAccess) { } @Override public <T> void visitCtFieldRead(CtFieldRead<T> fieldRead) { visitCtVariableRead(fieldRead); scanCtFieldAccess(fieldRead); scanCtTargetedExpression(fieldRead); } @Override public <T> void visitCtFieldWrite(CtFieldWrite<T> fieldWrite) { visitCtVariableWrite(fieldWrite); scanCtFieldAccess(fieldWrite); scanCtTargetedExpression(fieldWrite); } public <T> void visitCtSuperAccess(CtSuperAccess<T> f) { visitCtVariableRead(f); scanCtTargetedExpression(f); } public void scanCtMultiTypedElement(CtMultiTypedElement f) { } public <T, A extends T> void visitCtOperatorAssignment( CtOperatorAssignment<T, A> e) { visitCtAssignment(e); } /** * Scans an abstract variable reference. */ public <T> void scanCtVariableReference(CtVariableReference<T> reference) { } /** * Scans an abstract variable reference. */ public <T> void scanCtTypeInformation(CtTypeInformation typeInfo) { } public <A extends Annotation> void visitCtAnnotation( CtAnnotation<A> e) { scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } public <A extends Annotation> void visitCtAnnotationType(CtAnnotationType<A> e) { scanCtType(e); scanCtNamedElement(e); scanCtTypeInformation(e); scanCtTypeMember(e); scanCtFormalTypeDeclarer(e); scanCtModifiable(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtAnonymousExecutable(CtAnonymousExecutable e) { scanCtExecutable(e); scanCtNamedElement(e); scanCtTypedElement(e); scanCtTypeMember(e); scanCtModifiable(e); scanCtElement(e); scanCtVisitable(e); } @Override public <T> void visitCtArrayRead(CtArrayRead<T> arrayRead) { scanCtArrayAccess(arrayRead); scanCtTargetedExpression(arrayRead); scanCtExpression(arrayRead); scanCtCodeElement(arrayRead); scanCtTypedElement(arrayRead); scanCtElement(arrayRead); scanCtVisitable(arrayRead); } @Override public <T> void visitCtArrayWrite(CtArrayWrite<T> arrayWrite) { scanCtArrayAccess(arrayWrite); scanCtTargetedExpression(arrayWrite); scanCtExpression(arrayWrite); scanCtCodeElement(arrayWrite); scanCtTypedElement(arrayWrite); scanCtElement(arrayWrite); scanCtVisitable(arrayWrite); } public <T> void visitCtArrayTypeReference(CtArrayTypeReference<T> e) { visitCtTypeReference(e); } public <T> void visitCtAssert(CtAssert<T> e) { scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public <T, A extends T> void visitCtAssignment( CtAssignment<T, A> e) { scanCtStatement(e); scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtBinaryOperator(CtBinaryOperator<T> e) { scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } public <R> void visitCtBlock(CtBlock<R> e) { scanCtStatement(e); visitCtStatementList(e); } public void visitCtBreak(CtBreak e) { scanCtCFlowBreak(e); scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public <E> void visitCtCase(CtCase<E> e) { scanCtStatement(e); visitCtStatementList(e); } public void visitCtCatch(CtCatch e) { scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtClass(CtClass<T> e) { scanCtType(e); scanCtStatement(e); scanCtTypeInformation(e); scanCtFormalTypeDeclarer(e); scanCtCodeElement(e); scanCtNamedElement(e); scanCtTypeMember(e); scanCtElement(e); scanCtModifiable(e); scanCtVisitable(e); } @Override public void visitCtTypeParameter(CtTypeParameter typeParameter) { scanCtType(typeParameter); scanCtTypeInformation(typeParameter); scanCtFormalTypeDeclarer(typeParameter); scanCtNamedElement(typeParameter); scanCtTypeMember(typeParameter); scanCtElement(typeParameter); scanCtModifiable(typeParameter); scanCtVisitable(typeParameter); } public <T> void visitCtConditional(CtConditional<T> e) { scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtConstructor(CtConstructor<T> e) { scanCtExecutable(e); scanCtNamedElement(e); scanCtFormalTypeDeclarer(e); scanCtTypedElement(e); scanCtTypeMember(e); scanCtModifiable(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtContinue(CtContinue e) { scanCtCFlowBreak(e); scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtDo(CtDo e) { scanCtLoop(e); scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public <T extends Enum<?>> void visitCtEnum(CtEnum<T> e) { visitCtClass(e); } public <T> void visitCtExecutableReference(CtExecutableReference<T> e) { scanCtReference(e); scanCtElement(e); scanCtActualTypeContainer(e); scanCtVisitable(e); } public <T> void visitCtField(CtField<T> e) { scanCtNamedElement(e); scanCtVariable(e); scanCtTypeMember(e); scanCtModifiable(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } @Override public <T> void visitCtEnumValue(CtEnumValue<T> enumValue) { visitCtField(enumValue); } public <T> void visitCtThisAccess(CtThisAccess<T> e) { scanCtTargetedExpression(e); scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtFieldReference(CtFieldReference<T> e) { scanCtVariableReference(e); scanCtReference(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtFor(CtFor e) { scanCtLoop(e); scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtForEach(CtForEach e) { scanCtLoop(e); scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtIf(CtIf e) { scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtInterface(CtInterface<T> e) { scanCtType(e); scanCtTypeInformation(e); scanCtFormalTypeDeclarer(e); scanCtNamedElement(e); scanCtTypeMember(e); scanCtElement(e); scanCtModifiable(e); scanCtVisitable(e); } public <T> void visitCtInvocation(CtInvocation<T> e) { scanCtAbstractInvocation(e); scanCtStatement(e); scanCtActualTypeContainer(e); scanCtTargetedExpression(e); scanCtElement(e); scanCtCodeElement(e); scanCtExpression(e); scanCtVisitable(e); scanCtTypedElement(e); } public <T> void visitCtLiteral(CtLiteral<T> e) { scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtLocalVariable(CtLocalVariable<T> e) { scanCtStatement(e); scanCtVariable(e); scanCtCodeElement(e); scanCtNamedElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtModifiable(e); scanCtVisitable(e); } public <T> void visitCtLocalVariableReference( CtLocalVariableReference<T> e) { scanCtVariableReference(e); scanCtReference(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtCatchVariable(CtCatchVariable<T> e) { scanCtVariable(e); scanCtMultiTypedElement(e); scanCtCodeElement(e); scanCtNamedElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtModifiable(e); scanCtVisitable(e); } public <T> void visitCtCatchVariableReference(CtCatchVariableReference<T> e) { scanCtVariableReference(e); scanCtReference(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtMethod(CtMethod<T> e) { scanCtExecutable(e); scanCtTypedElement(e); scanCtNamedElement(e); scanCtFormalTypeDeclarer(e); scanCtTypeMember(e); scanCtElement(e); scanCtModifiable(e); scanCtVisitable(e); } @Override public <T> void visitCtAnnotationMethod(CtAnnotationMethod<T> annotationMethod) { visitCtMethod(annotationMethod); } public <T> void visitCtNewArray(CtNewArray<T> e) { scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } @Override public <T> void visitCtConstructorCall(CtConstructorCall<T> e) { scanCtTargetedExpression(e); scanCtAbstractInvocation(e); scanCtStatement(e); scanCtActualTypeContainer(e); scanCtExpression(e); scanCtElement(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtVisitable(e); } public <T> void visitCtNewClass(CtNewClass<T> e) { visitCtConstructorCall(e); } @Override public <T> void visitCtLambda(CtLambda<T> e) { scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtExecutable(e); scanCtNamedElement(e); scanCtElement(e); scanCtVisitable(e); } @Override public <T, E extends CtExpression<?>> void visitCtExecutableReferenceExpression( CtExecutableReferenceExpression<T, E> e) { scanCtTargetedExpression(e); scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } public <T, A extends T> void visitCtOperatorAssignement( CtOperatorAssignment<T, A> assignment) { } public void visitCtPackage(CtPackage e) { scanCtNamedElement(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtPackageReference(CtPackageReference e) { scanCtReference(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtParameter(CtParameter<T> e) { scanCtNamedElement(e); scanCtVariable(e); scanCtModifiable(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtParameterReference(CtParameterReference<T> e) { scanCtVariableReference(e); scanCtReference(e); scanCtElement(e); scanCtVisitable(e); } public <R> void visitCtReturn(CtReturn<R> e) { scanCtCFlowBreak(e); scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public <R> void visitCtStatementList(CtStatementList e) { scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public <E> void visitCtSwitch(CtSwitch<E> e) { scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtSynchronized(CtSynchronized e) { scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtThrow(CtThrow e) { scanCtCFlowBreak(e); scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public void visitCtTry(CtTry e) { scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } @Override public void visitCtTryWithResource(CtTryWithResource e) { visitCtTry(e); } public void visitCtTypeParameterReference(CtTypeParameterReference e) { visitCtTypeReference(e); } @Override public void visitCtWildcardReference(CtWildcardReference wildcardReference) { visitCtTypeParameterReference(wildcardReference); } @Override public <T> void visitCtIntersectionTypeReference(CtIntersectionTypeReference<T> e) { visitCtTypeReference(e); } public <T> void visitCtTypeReference(CtTypeReference<T> e) { scanCtReference(e); scanCtTypeInformation(e); scanCtActualTypeContainer(e); scanCtElement(e); scanCtVisitable(e); } @Override public <T> void visitCtTypeAccess(CtTypeAccess<T> e) { scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtUnaryOperator(CtUnaryOperator<T> e) { scanCtExpression(e); scanCtStatement(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } @Override public <T> void visitCtVariableRead(CtVariableRead<T> e) { scanCtVariableAccess(e); scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } @Override public <T> void visitCtVariableWrite(CtVariableWrite<T> e) { scanCtVariableAccess(e); scanCtExpression(e); scanCtCodeElement(e); scanCtTypedElement(e); scanCtElement(e); scanCtVisitable(e); } @Override public void visitCtComment(CtComment e) { scanCtElement(e); scanCtVisitable(e); scanCtStatement(e); scanCtCodeElement(e); } public <T> void visitCtAnnotationFieldAccess( CtAnnotationFieldAccess<T> e) { visitCtVariableRead(e); scanCtTargetedExpression(e); } public void visitCtWhile(CtWhile e) { scanCtLoop(e); scanCtStatement(e); scanCtCodeElement(e); scanCtElement(e); scanCtVisitable(e); } public <T> void visitCtUnboundVariableReference(CtUnboundVariableReference<T> reference) { scanCtVariableReference(reference); scanCtReference(reference); scanCtElement(reference); scanCtVisitable(reference); } public void scanCtCodeSnippet(CtCodeSnippet snippet) { } }