diff --git a/src/main/java/spoon/reflect/factory/Factory.java b/src/main/java/spoon/reflect/factory/Factory.java
index 65d5201893b..06305f93ecd 100644
--- a/src/main/java/spoon/reflect/factory/Factory.java
+++ b/src/main/java/spoon/reflect/factory/Factory.java
@@ -18,6 +18,95 @@
import spoon.compiler.Environment;
import spoon.reflect.CtModel;
+import spoon.reflect.code.BinaryOperatorKind;
+import spoon.reflect.code.CtAnnotationFieldAccess;
+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.CtCase;
+import spoon.reflect.code.CtCatch;
+import spoon.reflect.code.CtCatchVariable;
+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.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.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.cu.CompilationUnit;
+import spoon.reflect.cu.SourcePosition;
+import spoon.reflect.cu.position.BodyHolderSourcePosition;
+import spoon.reflect.cu.position.DeclarationSourcePosition;
+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.CtConstructor;
+import spoon.reflect.declaration.CtEnum;
+import spoon.reflect.declaration.CtEnumValue;
+import spoon.reflect.declaration.CtExecutable;
+import spoon.reflect.declaration.CtField;
+import spoon.reflect.declaration.CtInterface;
+import spoon.reflect.declaration.CtMethod;
+import spoon.reflect.declaration.CtPackage;
+import spoon.reflect.declaration.CtParameter;
+import spoon.reflect.declaration.CtType;
+import spoon.reflect.declaration.CtTypeParameter;
+import spoon.reflect.declaration.CtVariable;
+import spoon.reflect.declaration.ModifierKind;
+import spoon.reflect.eval.PartialEvaluator;
+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.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.List;
/**
* Provides the sub-factories required by Spoon.
@@ -60,4 +149,617 @@ public interface Factory {
EvalFactory Eval(); // used 4 times
ConstructorFactory Constructor(); // used 3 times
+
+ /**
+ * @see CodeFactory#createAnnotation(CtTypeReference)
+ */
+ CtAnnotation createAnnotation(CtTypeReference annotationType);
+
+ /**
+ * @see CodeFactory#createVariableAssignment(CtVariableReference,boolean, CtExpression)
+ */
+ CtAssignment createVariableAssignment(CtVariableReference variable, boolean isStatic, CtExpression expression);
+
+ /**
+ * @see CodeFactory#createStatementList(CtBlock)
+ */
+ CtStatementList createStatementList(CtBlock block);
+
+ /**
+ * @see CodeFactory#createCtBlock(T)
+ */
+ CtBlock> createCtBlock(T element);
+
+ /**
+ * @see CodeFactory#createBinaryOperator(CtExpression,CtExpression, BinaryOperatorKind)
+ */
+ CtBinaryOperator createBinaryOperator(CtExpression> left, CtExpression> right, BinaryOperatorKind kind);
+
+ /**
+ * @see CodeFactory#createCatchVariable(CtTypeReference,String, ModifierKind[])
+ */
+ CtCatchVariable createCatchVariable(CtTypeReference type, String name, ModifierKind... modifierKinds);
+
+ /**
+ * @see CodeFactory#createCodeSnippetExpression(String)
+ */
+ CtCodeSnippetExpression createCodeSnippetExpression(String expression);
+
+ /**
+ * @see CodeFactory#createConstructorCall(CtTypeReference,CtExpression[])
+ */
+ CtConstructorCall createConstructorCall(CtTypeReference type, CtExpression>... parameters);
+
+ /**
+ * @see CodeFactory#createClassAccess(CtTypeReference)
+ */
+ CtFieldAccess> createClassAccess(CtTypeReference type);
+
+ /**
+ * @see CodeFactory#createInvocation(CtExpression, CtExecutableReference, List)
+ */
+ CtInvocation createInvocation(CtExpression> target, CtExecutableReference executable, List> arguments);
+
+ /**
+ * @see CodeFactory#createInvocation(CtExpression,CtExecutableReference,CtExpression[])
+ */
+ CtInvocation createInvocation(CtExpression> target, CtExecutableReference executable, CtExpression>... arguments);
+
+ /**
+ * @see CodeFactory#createLiteral(T)
+ */
+ CtLiteral createLiteral(T value);
+
+ /**
+ * @see CodeFactory#createLocalVariable(CtTypeReference,String,CtExpression)
+ */
+ CtLocalVariable createLocalVariable(CtTypeReference type, String name, CtExpression defaultExpression);
+
+ /**
+ * @see CodeFactory#createLiteralArray(T[])
+ */
+ @SuppressWarnings(value = "unchecked")
+ CtNewArray createLiteralArray(T[] value);
+
+ /**
+ * @see CodeFactory#createNewClass(CtTypeReference, CtClass,CtExpression[])
+ */
+ CtNewClass createNewClass(CtTypeReference type, CtClass> anonymousClass, CtExpression>... parameters);
+
+ /**
+ * @see CodeFactory#createVariableAssignments(List,List)
+ */
+ CtStatementList createVariableAssignments(List extends CtVariable> variables, List extends CtExpression> expressions);
+
+ /**
+ * @see CodeFactory#createThisAccess(CtTypeReference)
+ */
+ CtThisAccess createThisAccess(CtTypeReference type);
+
+ /**
+ * @see CodeFactory#createThisAccess(CtTypeReference,boolean)
+ */
+ CtThisAccess createThisAccess(CtTypeReference type, boolean isImplicit);
+
+ /**
+ * @see CodeFactory#createTypeAccess(CtTypeReference)
+ */
+ CtTypeAccess createTypeAccess(CtTypeReference accessedType);
+
+ /**
+ * @see CodeFactory#createTypeAccess(CtTypeReference,boolean)
+ */
+ CtTypeAccess createTypeAccess(CtTypeReference accessedType, boolean isImplicit);
+
+ /**
+ * @see CodeFactory#createTypeAccessWithoutCloningReference(CtTypeReference)
+ */
+ CtTypeAccess createTypeAccessWithoutCloningReference(CtTypeReference accessedType);
+
+ /**
+ * @see CodeFactory#createVariableRead(CtVariableReference,boolean)
+ */
+ CtVariableAccess createVariableRead(CtVariableReference variable, boolean isStatic);
+
+ /**
+ * @see CodeFactory#createCtField(String,CtTypeReference,String,ModifierKind[])
+ */
+ CtField createCtField(String name, CtTypeReference type, String exp, ModifierKind... visibilities);
+
+ /**
+ * @see CodeFactory#createCatchVariableReference(CtCatchVariable)
+ */
+ CtCatchVariableReference createCatchVariableReference(CtCatchVariable catchVariable);
+
+ /**
+ * @see CodeFactory#createLocalVariableReference(CtLocalVariable)
+ */
+ CtLocalVariableReference createLocalVariableReference(CtLocalVariable localVariable);
+
+ /**
+ * @see CodeFactory#createLocalVariableReference(CtTypeReference,String)
+ */
+ CtLocalVariableReference createLocalVariableReference(CtTypeReference type, String name);
+
+ /**
+ * @see CodeFactory#createCtTypeReference(Class)
+ */
+ CtTypeReference createCtTypeReference(Class> originalClass);
+
+ /**
+ * @see CodeFactory#createVariableReads(List)
+ */
+ List> createVariableReads(List extends CtVariable>> variables);
+
+ /**
+ * @see CodeFactory#createCtCatch(String,Class,CtBlock)
+ */
+ CtCatch createCtCatch(String nameCatch, Class extends Throwable> exception, CtBlock> ctBlock);
+
+ /**
+ * @see CodeFactory#createCodeSnippetStatement(String)
+ */
+ CtCodeSnippetStatement createCodeSnippetStatement(String statement);
+
+ /**
+ * @see CodeFactory#createComment(String,CtComment.CommentType)
+ */
+ CtComment createComment(String content, CtComment.CommentType type);
+
+ /**
+ * @see CodeFactory#createInlineComment(String)
+ */
+ CtComment createInlineComment(String content);
+
+ /**
+ * @see CodeFactory#createCtThrow(String)
+ */
+ CtThrow createCtThrow(String thrownExp);
+
+ /**
+ * @see CodeFactory#createCtPackageReference(Package)
+ */
+ CtPackageReference createCtPackageReference(Package originalPackage);
+
+ /**
+ * @see ConstructorFactory#createDefault(CtClass)
+ */
+ CtConstructor createDefault(CtClass target);
+
+ /**
+ * @see CoreFactory#createAnnotation()
+ */
+ CtAnnotation createAnnotation();
+
+ /**
+ * @see CoreFactory#createBlock()
+ */
+ CtBlock createBlock();
+
+ /**
+ * @see CoreFactory#createReturn()
+ */
+ CtReturn createReturn();
+
+ /**
+ * @see CoreFactory#createStatementList()
+ */
+ CtStatementList createStatementList();
+
+ /**
+ * @see CoreFactory#createCase()
+ */
+ CtCase createCase();
+
+ /**
+ * @see CoreFactory#createSwitch()
+ */
+ CtSwitch createSwitch();
+
+ /**
+ * @see CoreFactory#createEnum()
+ */
+ > CtEnum createEnum();
+
+ /**
+ * @see CoreFactory#createAnnotationType()
+ */
+ CtAnnotationType createAnnotationType();
+
+ /**
+ * @see CoreFactory#createAssignment()
+ */
+ CtAssignment createAssignment();
+
+ /**
+ * @see CoreFactory#createOperatorAssignment()
+ */
+ CtOperatorAssignment createOperatorAssignment();
+
+ /**
+ * @see CoreFactory#createExecutableReferenceExpression()
+ */
+ > CtExecutableReferenceExpression createExecutableReferenceExpression();
+
+ /**
+ * @see CoreFactory#createAnnotationFieldAccess()
+ */
+ CtAnnotationFieldAccess createAnnotationFieldAccess();
+
+ /**
+ * @see CoreFactory#createArrayRead()
+ */
+ CtArrayRead createArrayRead();
+
+ /**
+ * @see CoreFactory#createArrayWrite()
+ */
+ CtArrayWrite createArrayWrite();
+
+ /**
+ * @see CoreFactory#createAssert()
+ */
+ CtAssert createAssert();
+
+ /**
+ * @see CoreFactory#createBinaryOperator()
+ */
+ CtBinaryOperator createBinaryOperator();
+
+ /**
+ * @see CoreFactory#createCatchVariable()
+ */
+ CtCatchVariable createCatchVariable();
+
+ /**
+ * @see CoreFactory#createCodeSnippetExpression()
+ */
+ CtCodeSnippetExpression createCodeSnippetExpression();
+
+ /**
+ * @see CoreFactory#createConditional()
+ */
+ CtConditional createConditional();
+
+ /**
+ * @see CoreFactory#createConstructorCall()
+ */
+ CtConstructorCall createConstructorCall();
+
+ /**
+ * @see CoreFactory#createFieldRead()
+ */
+ CtFieldRead createFieldRead();
+
+ /**
+ * @see CoreFactory#createFieldWrite()
+ */
+ CtFieldWrite createFieldWrite();
+
+ /**
+ * @see CoreFactory#createInvocation()
+ */
+ CtInvocation createInvocation();
+
+ /**
+ * @see CoreFactory#createLambda()
+ */
+ CtLambda createLambda();
+
+ /**
+ * @see CoreFactory#createLiteral()
+ */
+ CtLiteral createLiteral();
+
+ /**
+ * @see CoreFactory#createLocalVariable()
+ */
+ CtLocalVariable createLocalVariable();
+
+ /**
+ * @see CoreFactory#createNewArray()
+ */
+ CtNewArray createNewArray();
+
+ /**
+ * @see CoreFactory#createNewClass()
+ */
+ CtNewClass createNewClass();
+
+ /**
+ * @see CoreFactory#createSuperAccess()
+ */
+ CtSuperAccess createSuperAccess();
+
+ /**
+ * @see CoreFactory#createThisAccess()
+ */
+ CtThisAccess createThisAccess();
+
+ /**
+ * @see CoreFactory#createTypeAccess()
+ */
+ CtTypeAccess createTypeAccess();
+
+ /**
+ * @see CoreFactory#createUnaryOperator()
+ */
+ CtUnaryOperator createUnaryOperator();
+
+ /**
+ * @see CoreFactory#createVariableRead()
+ */
+ CtVariableRead createVariableRead();
+
+ /**
+ * @see CoreFactory#createVariableWrite()
+ */
+ CtVariableWrite createVariableWrite();
+
+ /**
+ * @see CoreFactory#createAnnotationMethod()
+ */
+ CtAnnotationMethod createAnnotationMethod();
+
+ /**
+ * @see CoreFactory#createClass()
+ */
+ CtClass createClass();
+
+ /**
+ * @see CoreFactory#createConstructor()
+ */
+ CtConstructor createConstructor();
+
+ /**
+ * @see CoreFactory#createEnumValue()
+ */
+ CtEnumValue createEnumValue();
+
+ /**
+ * @see CoreFactory#createField()
+ */
+ CtField createField();
+
+ /**
+ * @see CoreFactory#createInterface()
+ */
+ CtInterface createInterface();
+
+ /**
+ * @see CoreFactory#createMethod()
+ */
+ CtMethod createMethod();
+
+ /**
+ * @see CoreFactory#createParameter()
+ */
+ CtParameter createParameter();
+
+ /**
+ * @see CoreFactory#createArrayTypeReference()
+ */
+ CtArrayTypeReference createArrayTypeReference();
+
+ /**
+ * @see CoreFactory#createCatchVariableReference()
+ */
+ CtCatchVariableReference createCatchVariableReference();
+
+ /**
+ * @see CoreFactory#createExecutableReference()
+ */
+ CtExecutableReference createExecutableReference();
+
+ /**
+ * @see CoreFactory#createFieldReference()
+ */
+ CtFieldReference createFieldReference();
+
+ /**
+ * @see CoreFactory#createIntersectionTypeReference()
+ */
+ CtIntersectionTypeReference createIntersectionTypeReference();
+
+ /**
+ * @see CoreFactory#createLocalVariableReference()
+ */
+ CtLocalVariableReference createLocalVariableReference();
+
+ /**
+ * @see CoreFactory#createParameterReference()
+ */
+ CtParameterReference createParameterReference();
+
+ /**
+ * @see CoreFactory#createTypeReference()
+ */
+ CtTypeReference createTypeReference();
+
+ /**
+ * @see CoreFactory#createUnboundVariableReference()
+ */
+ CtUnboundVariableReference createUnboundVariableReference();
+
+ /**
+ * @see CoreFactory#createBreak()
+ */
+ CtBreak createBreak();
+
+ /**
+ * @see CoreFactory#createCatch()
+ */
+ CtCatch createCatch();
+
+ /**
+ * @see CoreFactory#createCodeSnippetStatement()
+ */
+ CtCodeSnippetStatement createCodeSnippetStatement();
+
+ /**
+ * @see CoreFactory#createComment()
+ */
+ CtComment createComment();
+
+ /**
+ * @see CoreFactory#createContinue()
+ */
+ CtContinue createContinue();
+
+ /**
+ * @see CoreFactory#createDo()
+ */
+ CtDo createDo();
+
+ /**
+ * @see CoreFactory#createFor()
+ */
+ CtFor createFor();
+
+ /**
+ * @see CoreFactory#createForEach()
+ */
+ CtForEach createForEach();
+
+ /**
+ * @see CoreFactory#createIf()
+ */
+ CtIf createIf();
+
+ /**
+ * @see CoreFactory#createSynchronized()
+ */
+ CtSynchronized createSynchronized();
+
+ /**
+ * @see CoreFactory#createThrow()
+ */
+ CtThrow createThrow();
+
+ /**
+ * @see CoreFactory#createTry()
+ */
+ CtTry createTry();
+
+ /**
+ * @see CoreFactory#createTryWithResource()
+ */
+ CtTryWithResource createTryWithResource();
+
+ /**
+ * @see CoreFactory#createWhile()
+ */
+ CtWhile createWhile();
+
+ /**
+ * @see CoreFactory#createCompilationUnit()
+ */
+ CompilationUnit createCompilationUnit();
+
+ /**
+ * @see CoreFactory#createSourcePosition(CompilationUnit,int,int,int,int[])
+ */
+ @Deprecated
+ SourcePosition createSourcePosition(CompilationUnit compilationUnit, int startDeclaration, int startSource, int end, int[] lineSeparatorPositions);
+
+ /**
+ * @see CoreFactory#createSourcePosition(CompilationUnit,int,int,int[])
+ */
+ SourcePosition createSourcePosition(CompilationUnit compilationUnit, int startSource, int end, int[] lineSeparatorPositions);
+
+ /**
+ * @see CoreFactory#createBodyHolderSourcePosition(CompilationUnit,int,int,int,int,int,int,int,int,int[])
+ */
+ BodyHolderSourcePosition createBodyHolderSourcePosition(CompilationUnit compilationUnit, int startSource, int end, int modifierStart, int modifierEnd, int declarationStart, int declarationEnd, int bodyStart, int bodyEnd, int[] lineSeparatorPositions);
+
+ /**
+ * @see CoreFactory#createDeclarationSourcePosition(CompilationUnit,int,int,int,int,int,int,int[])
+ */
+ DeclarationSourcePosition createDeclarationSourcePosition(CompilationUnit compilationUnit, int startSource, int end, int modifierStart, int modifierEnd, int declarationStart, int declarationEnd, int[] lineSeparatorPositions);
+
+ /**
+ * @see CoreFactory#createAnonymousExecutable()
+ */
+ CtAnonymousExecutable createAnonymousExecutable();
+
+ /**
+ * @see CoreFactory#createPackage()
+ */
+ CtPackage createPackage();
+
+ /**
+ * @see CoreFactory#createTypeParameter()
+ */
+ CtTypeParameter createTypeParameter();
+
+ /**
+ * @see CoreFactory#createPackageReference()
+ */
+ CtPackageReference createPackageReference();
+
+ /**
+ * @see CoreFactory#createTypeParameterReference()
+ */
+ CtTypeParameterReference createTypeParameterReference();
+
+ /**
+ * @see CoreFactory#createWildcardReference()
+ */
+ CtWildcardReference createWildcardReference();
+
+ /**
+ * @see EvalFactory#createPartialEvaluator()
+ */
+ PartialEvaluator createPartialEvaluator();
+
+ /**
+ * @see ExecutableFactory#createParameter(CtExecutable,CtTypeReference,String)
+ */
+ CtParameter createParameter(CtExecutable> parent, CtTypeReference type, String name);
+
+ /**
+ * @see ExecutableFactory#createParameterReference(CtParameter)
+ */
+ CtParameterReference createParameterReference(CtParameter parameter);
+
+ /**
+ * @see ExecutableFactory#createAnonymous(CtClass,CtBlock)
+ */
+ CtAnonymousExecutable createAnonymous(CtClass> target, CtBlock body);
+
+ /**
+ * @see TypeFactory#createArrayReference(String)
+ */
+ CtArrayTypeReference createArrayReference(String qualifiedName);
+
+ /**
+ * @see TypeFactory#createArrayReference(CtType)
+ */
+ CtArrayTypeReference createArrayReference(CtType type);
+
+ /**
+ * @see TypeFactory#createArrayReference(CtTypeReference)
+ */
+ CtArrayTypeReference createArrayReference(CtTypeReference reference);
+
+ /**
+ * @see TypeFactory#createIntersectionTypeReferenceWithBounds(List)
+ */
+ CtIntersectionTypeReference createIntersectionTypeReferenceWithBounds(List> bounds);
+
+ /**
+ * @see TypeFactory#createReferences(List)
+ */
+ List> createReferences(List> classes);
+
+ /**
+ * @see TypeFactory#createArrayReference(CtTypeReference,int)
+ */
+ CtArrayTypeReference> createArrayReference(CtTypeReference> reference, int n);
+
+ /**
+ * @see TypeFactory#createTypeParameterReference(String)
+ */
+ CtTypeParameterReference createTypeParameterReference(String name);
+
}
diff --git a/src/main/java/spoon/reflect/factory/FactoryImpl.java b/src/main/java/spoon/reflect/factory/FactoryImpl.java
index bf24af4e0a4..6952ef4f7ab 100644
--- a/src/main/java/spoon/reflect/factory/FactoryImpl.java
+++ b/src/main/java/spoon/reflect/factory/FactoryImpl.java
@@ -19,23 +19,100 @@
import spoon.compiler.Environment;
import spoon.reflect.CtModel;
import spoon.reflect.CtModelImpl;
+import spoon.reflect.code.BinaryOperatorKind;
+import spoon.reflect.code.CtAnnotationFieldAccess;
+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.CtCase;
+import spoon.reflect.code.CtCatch;
+import spoon.reflect.code.CtCatchVariable;
+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.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.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.cu.CompilationUnit;
+import spoon.reflect.cu.SourcePosition;
+import spoon.reflect.cu.position.BodyHolderSourcePosition;
+import spoon.reflect.cu.position.DeclarationSourcePosition;
+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.CtConstructor;
import spoon.reflect.declaration.CtEnum;
+import spoon.reflect.declaration.CtEnumValue;
import spoon.reflect.declaration.CtExecutable;
import spoon.reflect.declaration.CtField;
import spoon.reflect.declaration.CtInterface;
import spoon.reflect.declaration.CtMethod;
import spoon.reflect.declaration.CtPackage;
+import spoon.reflect.declaration.CtParameter;
import spoon.reflect.declaration.CtType;
+import spoon.reflect.declaration.CtTypeParameter;
+import spoon.reflect.declaration.CtVariable;
+import spoon.reflect.declaration.ModifierKind;
+import spoon.reflect.eval.PartialEvaluator;
+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.CtTypeParameterReference;
+import spoon.reflect.reference.CtTypeReference;
+import spoon.reflect.reference.CtUnboundVariableReference;
+import spoon.reflect.reference.CtVariableReference;
+import spoon.reflect.reference.CtWildcardReference;
import spoon.support.DefaultCoreFactory;
import spoon.support.StandardEnvironment;
import java.io.IOException;
import java.io.Serializable;
+import java.lang.annotation.Annotation;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;
@@ -334,4 +411,617 @@ protected Dedup initialValue() {
public CtModel getModel() {
return model;
}
+
+ @Override
+ public CtAnnotation createAnnotation(CtTypeReference annotationType) {
+ return Code().createAnnotation(annotationType);
+ }
+
+ @Override
+ public CtAssignment createVariableAssignment(CtVariableReference variable, boolean isStatic, CtExpression expression) {
+ return Code().createVariableAssignment(variable, isStatic, expression);
+ }
+
+ @Override
+ public CtStatementList createStatementList(CtBlock block) {
+ return Code().createStatementList(block);
+ }
+
+ @Override
+ public CtBlock> createCtBlock(T element) {
+ return Code().createCtBlock(element);
+ }
+
+ @Override
+ public CtBinaryOperator createBinaryOperator(CtExpression> left, CtExpression> right, BinaryOperatorKind kind) {
+ return Code().createBinaryOperator(left, right, kind);
+ }
+
+ @Override
+ public CtCatchVariable createCatchVariable(CtTypeReference type, String name, ModifierKind... modifierKinds) {
+ return Code().createCatchVariable(type, name, modifierKinds);
+ }
+
+ @Override
+ public CtCodeSnippetExpression createCodeSnippetExpression(String expression) {
+ return Code().createCodeSnippetExpression(expression);
+ }
+
+ @Override
+ public CtConstructorCall createConstructorCall(CtTypeReference type, CtExpression>... parameters) {
+ return Code().createConstructorCall(type, parameters);
+ }
+
+ @Override
+ public CtFieldAccess> createClassAccess(CtTypeReference type) {
+ return Code().createClassAccess(type);
+ }
+
+ @Override
+ public CtInvocation createInvocation(CtExpression> target, CtExecutableReference executable, List> arguments) {
+ return Code().createInvocation(target, executable, arguments);
+ }
+
+ @Override
+ public CtInvocation createInvocation(CtExpression> target, CtExecutableReference executable, CtExpression>... arguments) {
+ return Code().createInvocation(target, executable, arguments);
+ }
+
+ @Override
+ public CtLiteral createLiteral(T value) {
+ return Code().createLiteral(value);
+ }
+
+ @Override
+ public CtLocalVariable createLocalVariable(CtTypeReference type, String name, CtExpression defaultExpression) {
+ return Code().createLocalVariable(type, name, defaultExpression);
+ }
+
+ @SuppressWarnings(value = "unchecked")
+ @Override
+ public CtNewArray createLiteralArray(T[] value) {
+ return Code().createLiteralArray(value);
+ }
+
+ @Override
+ public CtNewClass createNewClass(CtTypeReference type, CtClass> anonymousClass, CtExpression>... parameters) {
+ return Code().createNewClass(type, anonymousClass, parameters);
+ }
+
+ @Override
+ public CtStatementList createVariableAssignments(List extends CtVariable> variables, List extends CtExpression> expressions) {
+ return Code().createVariableAssignments(variables, expressions);
+ }
+
+ @Override
+ public CtThisAccess createThisAccess(CtTypeReference type) {
+ return Code().createThisAccess(type);
+ }
+
+ @Override
+ public CtThisAccess createThisAccess(CtTypeReference type, boolean isImplicit) {
+ return Code().createThisAccess(type, isImplicit);
+ }
+
+ @Override
+ public CtTypeAccess createTypeAccess(CtTypeReference accessedType) {
+ return Code().createTypeAccess(accessedType);
+ }
+
+ @Override
+ public CtTypeAccess createTypeAccess(CtTypeReference accessedType, boolean isImplicit) {
+ return Code().createTypeAccess(accessedType, isImplicit);
+ }
+
+ @Override
+ public CtTypeAccess createTypeAccessWithoutCloningReference(CtTypeReference accessedType) {
+ return Code().createTypeAccessWithoutCloningReference(accessedType);
+ }
+
+ @Override
+ public CtVariableAccess createVariableRead(CtVariableReference variable, boolean isStatic) {
+ return Code().createVariableRead(variable, isStatic);
+ }
+
+ @Override
+ public CtField createCtField(String name, CtTypeReference