package spoon.test.reference; import org.junit.Test; import spoon.reflect.code.CtInvocation; import spoon.reflect.declaration.CtExecutable; import spoon.reflect.declaration.CtMethod; import spoon.reflect.factory.Factory; import spoon.reflect.visitor.filter.TypeFilter; import spoon.test.reference.testclasses.Mole; import spoon.test.reference.testclasses.Parameter; import spoon.testing.utils.ModelUtils; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; public class AnnotationFieldReferenceTest { @Test public void testAnnotationFieldReference() throws Exception { final Factory factory = ModelUtils.build(Parameter.class, Mole.class); final CtMethod<Object> make = factory.Class().get(Mole.class).getMethod("make", factory.Type().createReference(Parameter.class)); final CtInvocation<?> annotationInv = make.getElements(new TypeFilter<CtInvocation<?>>(CtInvocation.class)).get(0); final CtExecutable<?> executableDeclaration = annotationInv.getExecutable().getExecutableDeclaration(); assertNotNull(executableDeclaration); final CtMethod<?> value = factory.Annotation().get(Parameter.class).getMethod("value"); assertNotNull(value); assertEquals(value.getSimpleName(), executableDeclaration.getSimpleName()); assertEquals(value.getType(), executableDeclaration.getType()); } }