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); }