Search in sources :

Example 1 with CtEnum

use of spoon.reflect.declaration.CtEnum in project spoon by INRIA.

the class EnumsTest method testAnnotationsOnEnum.

@Test
public void testAnnotationsOnEnum() throws Exception {
    final Launcher launcher = new Launcher();
    launcher.run(new String[] { "-i", "./src/test/java/spoon/test/enums/testclasses", "-o", "./target/spooned" });
    final CtEnum<?> foo = (CtEnum) launcher.getFactory().Type().get(Foo.class);
    assertEquals(1, foo.getFields().size());
    assertEquals(1, foo.getFields().get(0).getAnnotations().size());
    assertEquals(Deprecated.class, AnnotationTest.getActualClassFromAnnotation(foo.getFields().get(0).getAnnotations().get(0)));
    assertEquals("public enum Foo {" + DefaultJavaPrettyPrinter.LINE_SEPARATOR + "    @java.lang.Deprecated" + DefaultJavaPrettyPrinter.LINE_SEPARATOR + "    Bar;}", foo.toString());
}
Also used : Foo(spoon.test.enums.testclasses.Foo) Launcher(spoon.Launcher) CtEnum(spoon.reflect.declaration.CtEnum) AnnotationTest(spoon.test.annotation.AnnotationTest) Test(org.junit.Test)

Example 2 with CtEnum

use of spoon.reflect.declaration.CtEnum in project spoon by INRIA.

the class EnumsTypeTest method testEnumsType.

@Test
public void testEnumsType() throws Exception {
    // contract: shadow enum should still be considered as an enum
    Launcher launcher = new Launcher();
    launcher.addInputResource("./src/test/resources/reference-test/EnumsRef.java");
    Factory factory = launcher.getFactory();
    List<SpoonResource> classpath = SpoonResourceHelper.resources("./src/test/resources/reference-test/EnumJar.jar");
    String[] dependencyClasspath = new String[] { classpath.get(0).getPath() };
    factory.getEnvironment().setSourceClasspath(dependencyClasspath);
    assertEquals(1, classpath.size());
    launcher.buildModel();
    List<CtAssignment> assignments = Query.getElements(factory, new TypeFilter<>(CtAssignment.class));
    CtTypeReference typeRefFromSource = assignments.get(0).getType();
    CtType typeFromSource = typeRefFromSource.getTypeDeclaration();
    assertTrue(typeRefFromSource.isEnum());
    assertTrue(typeFromSource.isEnum());
    assertTrue(typeFromSource instanceof CtEnum);
    CtTypeReference typeRefFromJar = assignments.get(1).getType();
    CtType typeFromJar = typeRefFromJar.getTypeDeclaration();
    // fail
    assertTrue(typeRefFromJar.isEnum());
    // fail
    assertTrue(typeFromJar.isEnum());
    // fail
    assertTrue(typeFromJar instanceof CtEnum);
}
Also used : CtAssignment(spoon.reflect.code.CtAssignment) CtType(spoon.reflect.declaration.CtType) CtTypeReference(spoon.reflect.reference.CtTypeReference) Launcher(spoon.Launcher) Factory(spoon.reflect.factory.Factory) CtEnum(spoon.reflect.declaration.CtEnum) SpoonResource(spoon.compiler.SpoonResource) Test(org.junit.Test)

Example 3 with CtEnum

use of spoon.reflect.declaration.CtEnum in project spoon by INRIA.

the class TypeReferenceTest method testCorrectEnumParent.

@Test
public void testCorrectEnumParent() {
    final Launcher launcher = new Launcher();
    launcher.getEnvironment().setNoClasspath(true);
    launcher.buildModel();
    CtEnum e = launcher.getFactory().Enum().create("spoon.test.reference.EnumE");
    CtTypeReference correctParent = launcher.getFactory().Type().createReference(java.lang.Enum.class);
    assertEquals(correctParent, e.getReference().getSuperclass());
}
Also used : CtTypeReference(spoon.reflect.reference.CtTypeReference) Launcher(spoon.Launcher) CtEnum(spoon.reflect.declaration.CtEnum) Test(org.junit.Test)

Example 4 with CtEnum

use of spoon.reflect.declaration.CtEnum in project spoon by INRIA.

the class JavaReflectionTreeBuilder method visitEnum.

@Override
public <T> void visitEnum(Class<T> clazz) {
    final CtEnum ctEnum = factory.Core().createEnum();
    ctEnum.setSimpleName(clazz.getSimpleName());
    setModifier(ctEnum, clazz.getModifiers());
    enter(new TypeRuntimeBuilderContext(ctEnum) {

        @Override
        public void addConstructor(CtConstructor<?> ctConstructor) {
            ctEnum.addConstructor(ctConstructor);
        }

        @Override
        public void addEnumValue(CtEnumValue<?> ctEnumValue) {
            ctEnum.addEnumValue(ctEnumValue);
        }
    });
    super.visitEnum(clazz);
    exit();
    contexts.peek().addType(ctEnum);
}
Also used : TypeRuntimeBuilderContext(spoon.support.visitor.java.internal.TypeRuntimeBuilderContext) CtEnum(spoon.reflect.declaration.CtEnum)

Example 5 with CtEnum

use of spoon.reflect.declaration.CtEnum in project spoon by INRIA.

the class TemplateTest method createTypeFromTemplate.

@Test
public void createTypeFromTemplate() throws Exception {
    // contract: the Substitution API provides a method createTypeFromTemplate
    final Launcher launcher = new Launcher();
    launcher.setArgs(new String[] { "--output-type", "nooutput" });
    launcher.addTemplateResource(new FileSystemFolder("./src/test/java/spoon/test/template/testclasses/types"));
    launcher.buildModel();
    Factory factory = launcher.getFactory();
    Map<String, Object> parameters = new HashMap<>();
    // replace someMethod with genMethod
    parameters.put("someMethod", "genMethod");
    // contract: we can generate interface
    final CtType<?> aIfaceModel = launcher.getFactory().Interface().get(AnIfaceModel.class);
    CtType<?> genIface = Substitution.createTypeFromTemplate("generated.GenIface", aIfaceModel, parameters);
    assertNotNull(genIface);
    assertSame(genIface, factory.Type().get("generated.GenIface"));
    CtMethod<?> generatedIfaceMethod = genIface.getMethod("genMethod");
    assertNotNull(generatedIfaceMethod);
    assertNull(genIface.getMethod("someMethod"));
    // add new substitution request - replace AnIfaceModel by GenIface
    parameters.put("AnIfaceModel", genIface.getReference());
    // contract: we can generate class
    final CtType<?> aClassModel = launcher.getFactory().Class().get(AClassModel.class);
    CtType<?> genClass = Substitution.createTypeFromTemplate("generated.GenClass", aClassModel, parameters);
    assertNotNull(genClass);
    assertSame(genClass, factory.Type().get("generated.GenClass"));
    CtMethod<?> generatedClassMethod = genClass.getMethod("genMethod");
    assertNotNull(generatedClassMethod);
    assertNull(genClass.getMethod("someMethod"));
    assertTrue(generatedIfaceMethod != generatedClassMethod);
    assertTrue(generatedClassMethod.isOverriding(generatedIfaceMethod));
    // contract: we can generate enum
    parameters.put("case1", "GOOD");
    parameters.put("case2", "BETTER");
    final CtType<?> aEnumModel = launcher.getFactory().Type().get(AnEnumModel.class);
    CtEnum<?> genEnum = (CtEnum<?>) Substitution.createTypeFromTemplate("generated.GenEnum", aEnumModel, parameters);
    assertNotNull(genEnum);
    assertSame(genEnum, factory.Type().get("generated.GenEnum"));
    assertEquals(2, genEnum.getEnumValues().size());
    assertEquals("GOOD", genEnum.getEnumValues().get(0).getSimpleName());
    assertEquals("BETTER", genEnum.getEnumValues().get(1).getSimpleName());
}
Also used : IdentityHashMap(java.util.IdentityHashMap) HashMap(java.util.HashMap) Launcher(spoon.Launcher) Factory(spoon.reflect.factory.Factory) CtEnum(spoon.reflect.declaration.CtEnum) FileSystemFolder(spoon.support.compiler.FileSystemFolder) Test(org.junit.Test)

Aggregations

CtEnum (spoon.reflect.declaration.CtEnum)5 Test (org.junit.Test)4 Launcher (spoon.Launcher)4 Factory (spoon.reflect.factory.Factory)2 CtTypeReference (spoon.reflect.reference.CtTypeReference)2 HashMap (java.util.HashMap)1 IdentityHashMap (java.util.IdentityHashMap)1 SpoonResource (spoon.compiler.SpoonResource)1 CtAssignment (spoon.reflect.code.CtAssignment)1 CtType (spoon.reflect.declaration.CtType)1 FileSystemFolder (spoon.support.compiler.FileSystemFolder)1 TypeRuntimeBuilderContext (spoon.support.visitor.java.internal.TypeRuntimeBuilderContext)1 AnnotationTest (spoon.test.annotation.AnnotationTest)1 Foo (spoon.test.enums.testclasses.Foo)1