use of spoon.reflect.code.CtFieldRead in project spoon by INRIA.
the class MetamodelTest method testGetterSetterFroRole.
@Test
public void testGetterSetterFroRole() {
// contract: all roles in spoon metamodel must at least have a setter and a getter
SpoonAPI interfaces = new Launcher();
interfaces.addInputResource("src/main/java/spoon/reflect/declaration");
interfaces.addInputResource("src/main/java/spoon/reflect/code");
interfaces.addInputResource("src/main/java/spoon/reflect/reference");
interfaces.buildModel();
Factory factory = interfaces.getFactory();
CtTypeReference propertyGetter = factory.Type().get(PropertyGetter.class).getReference();
CtTypeReference propertySetter = factory.Type().get(PropertySetter.class).getReference();
Set<String> expectedRoles = Arrays.stream(CtRole.values()).map(r -> r.name()).collect(Collectors.toSet());
List<CtMethod<?>> getters = interfaces.getModel().getElements(new AnnotationFilter<CtMethod<?>>(PropertyGetter.class));
Set<String> getterRoles = getters.stream().map(g -> ((CtFieldRead) g.getAnnotation(propertyGetter).getValue("role")).getVariable().getSimpleName()).collect(Collectors.toSet());
Set<CtMethod<?>> isNotGetter = getters.stream().filter(m -> !(m.getSimpleName().startsWith("get") || m.getSimpleName().startsWith("is"))).collect(Collectors.toSet());
List<CtMethod<?>> setters = interfaces.getModel().getElements(new AnnotationFilter<CtMethod<?>>(PropertySetter.class));
Set<String> setterRoles = setters.stream().map(g -> ((CtFieldRead) g.getAnnotation(propertySetter).getValue("role")).getVariable().getSimpleName()).collect(Collectors.toSet());
Set<CtMethod<?>> isNotSetter = setters.stream().filter(m -> !(m.getSimpleName().startsWith("set") || m.getSimpleName().startsWith("add") || m.getSimpleName().startsWith("insert") || m.getSimpleName().startsWith("remove"))).collect(Collectors.toSet());
Assert.assertEquals(expectedRoles, getterRoles);
Assert.assertEquals(expectedRoles, setterRoles);
Assert.assertEquals(Collections.EMPTY_SET, isNotGetter);
Assert.assertEquals(Collections.EMPTY_SET, isNotSetter);
}
use of spoon.reflect.code.CtFieldRead in project spoon by INRIA.
the class TypeTest method testTypeAccessOnPrimitive.
@Test
public void testTypeAccessOnPrimitive() throws Exception {
Factory factory = createFactory();
CtClass<?> clazz = //
factory.Code().createCodeSnippetStatement(//
"class X {" + //
"public void foo() {" + //
" Class klass=null;" + //
" boolean x= (klass == short.class);" + "}};").compile();
CtMethod<?> foo = (CtMethod<?>) clazz.getMethods().toArray()[0];
CtBlock<?> body = foo.getBody();
CtLocalVariable<?> ass = body.getStatement(1);
CtBinaryOperator<?> op = (CtBinaryOperator<?>) ass.getDefaultExpression();
assertEquals("Class", op.getLeftHandOperand().getType().getSimpleName());
assertFalse(op.getLeftHandOperand().getType().isPrimitive());
assertEquals("Class", op.getRightHandOperand().getType().getSimpleName());
assertTrue(op.getRightHandOperand() instanceof CtFieldRead);
assertFalse(op.getRightHandOperand().getType().isPrimitive());
}
use of spoon.reflect.code.CtFieldRead in project spoon by INRIA.
the class TargetedExpressionTest method testCastWriteWithGenerics.
@Test
public void testCastWriteWithGenerics() throws Exception {
final Factory factory = build(Pozole.class);
final CtClass<Object> aPozole = factory.Class().get(Pozole.class);
final CtConstructor<Object> aConstructor = aPozole.getConstructor(aPozole.getReference());
final List<CtFieldRead> elements = aConstructor.getElements(new TypeFilter<>(CtFieldRead.class));
assertEquals(1, elements.size());
assertEquals("((spoon.test.targeted.testclasses.Pozole<T>) (v1))", elements.get(0).getTarget().toString());
}
use of spoon.reflect.code.CtFieldRead in project spoon by INRIA.
the class AccessTest method testCanVisitFieldAccessAndSubClasses.
@Test
public void testCanVisitFieldAccessAndSubClasses() throws Exception {
final Factory factory = build(FieldAccessSample.class);
final List<CtFieldRead<?>> fieldsRead = Query.getElements(factory, new AbstractFilter<CtFieldRead<?>>(CtFieldRead.class) {
@Override
public boolean matches(CtFieldRead<?> element) {
return super.matches(element);
}
});
assertEquals(2, fieldsRead.size());
final List<CtFieldWrite<?>> fieldsWrite = Query.getElements(factory, new AbstractFilter<CtFieldWrite<?>>(CtFieldWrite.class) {
@Override
public boolean matches(CtFieldWrite<?> element) {
return super.matches(element);
}
});
assertEquals(3, fieldsWrite.size());
final List<CtFieldAccess<?>> fieldsAccess = Query.getElements(factory, new AbstractFilter<CtFieldAccess<?>>(CtFieldAccess.class) {
@Override
public boolean matches(CtFieldAccess<?> element) {
return super.matches(element);
}
});
assertEquals(5, fieldsAccess.size());
}
Aggregations