@Override public Contribution execute(PojoInfo pojoInfo) { return pojoInfo.methodInfoStream() .filter(m -> m.hasName("isEqualTo")) .filter(m -> m.hasParameterInfoListSize(1)) .filter(m -> m.hasModifierInfo(ModifierInfo.ABSTRACT)) .findFirst() .map(m -> execute0(pojoInfo)) .orElse(Contribution.empty()); }
private static List<Property> of0(Mode mode, TypeInfo typeInfo) { Naming naming = Naming.of(typeInfo); return typeInfo.methodInfoStream() .filter(m -> m.hasModifierInfo(ModifierInfo.ABSTRACT)) .filter(m -> !m.hasReturnTypeInfo(SimpleTypePrimitives.VOID)) .filter(m -> m.hasParameterInfoListSize(0)) .filter(m -> !m.hasAnnotation(Invalidate.class)) .map(m -> new Property(mode, naming, m)) .collect(MoreCollectors.toImmutableList()); }
private static List<Property> of0(Mode mode, TypeInfo typeInfo) { Naming naming = Naming.of(typeInfo); return typeInfo.methodInfoStream() .filter(m -> m.hasModifierInfo(ModifierInfo.ABSTRACT)) .filter(m -> !m.hasReturnTypeInfo(SimpleTypePrimitives.VOID)) .filter(m -> m.hasParameterInfoListSize(0)) .filter(m -> !m.hasAnnotation(Invalidate.class)) .map(m -> new Property(mode, naming, m)) .collect(MoreCollectors.toImmutableList()); }
void accept(TypeSpec.Builder type) { MethodInfoOverrideWriter writer = methodInfo.overrideWriter(); if (!methodInfo.hasModifierInfo(ModifierInfo.ABSTRACT)) { writer.addStatement("super.$L()", methodInfo.name()); } contributionList.forEach(contribution -> contribution.accept(writer)); if (self) { writer.addStatement("return this"); } type.addMethod(writer.write()); }
void accept(TypeSpec.Builder type) { MethodInfoOverrideWriter writer = methodInfo.overrideWriter(); if (!methodInfo.hasModifierInfo(ModifierInfo.ABSTRACT)) { writer.addStatement("super.$L()", methodInfo.name()); } contributionList.forEach(contribution -> contribution.accept(writer)); if (self) { writer.addStatement("return this"); } type.addMethod(writer.write()); }
public static <T> Optional<T> of(MethodInfo methodInfo, Constructor<T> constructor) { if (!methodInfo.hasModifierInfo(ModifierInfo.ABSTRACT)) { methodInfo.compilationError("@Query method must be abstract"); return Optional.empty(); } if (methodInfo.hasAccessInfo(AccessInfo.PRIVATE)) { methodInfo.compilationError("@Query must not be private"); return Optional.empty(); } SimpleTypeInfo returnTypeInfo = methodInfo.returnTypeInfo(); QueryReturnType returnType = QueryReturnType.of(returnTypeInfo); TypeInfo pojoTypeInfo = returnType.pojoTypeInfo(returnTypeInfo); if (!pojoTypeInfo.hasAnnotation(Pojo.class)) { methodInfo.compilationError("@Query must return a List of, an Optional of or an instance of a @Pojo."); return Optional.empty(); } T method = constructor.apply(methodInfo, returnType, pojoTypeInfo); return Optional.of(method); }
private static Optional<InvalidateMethod> of1(TypeInfo typeInfo, MethodInfo method, AnnotationInfo annotation) { String annotationName = annotation.simpleName(); if (method.hasModifierInfo(ModifierInfo.FINAL)) { method.compilationError("@%s method cannot be final", annotationName); return Optional.empty(); } if (method.hasAccessInfo(AccessInfo.PRIVATE)) { method.compilationError("@%s method cannot be private", annotationName); return Optional.empty(); } SimpleTypeInfo returnTypeInfo = method.returnTypeInfo(); boolean self = returnTypeInfo.equals(typeInfo.toSimpleTypeInfo()); if (!returnTypeInfo.equals(SimpleTypePrimitives.VOID) && !self) { method.compilationError("@%s method must return void or self", annotationName); return Optional.empty(); } InvalidateMethod invalidateMethod = new InvalidateMethod(method, annotation, self); return Optional.of(invalidateMethod); }
private static Optional<InvalidateMethod> of1(TypeInfo typeInfo, MethodInfo method, AnnotationInfo annotation) { String annotationName = annotation.simpleName(); if (method.hasModifierInfo(ModifierInfo.FINAL)) { method.compilationError("@%s method cannot be final", annotationName); return Optional.empty(); } if (method.hasAccessInfo(AccessInfo.PRIVATE)) { method.compilationError("@%s method cannot be private", annotationName); return Optional.empty(); } SimpleTypeInfo returnTypeInfo = method.returnTypeInfo(); boolean self = returnTypeInfo.equals(typeInfo.toSimpleTypeInfo()); if (!returnTypeInfo.equals(SimpleTypePrimitives.VOID) && !self) { method.compilationError("@%s method must return void or self", annotationName); return Optional.empty(); } InvalidateMethod invalidateMethod = new InvalidateMethod(method, annotation, self); return Optional.of(invalidateMethod); }
if (!methodInfo.hasModifierInfo(ModifierInfo.ABSTRACT)) { methodInfo.compilationError("@Setter method must be abstract."); return Optional.empty();