@Override public boolean apply(MethodInfo input) { return input.hasModifierInfo(modifierInfo); }
@Override public boolean apply(MethodInfo input) { return !input.hasModifierInfo(modifierInfo); } }
@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 -> Contribution.empty()) .orElseGet(() -> execute0(pojoInfo)); }
private static List<Property> of0(PojoInfo pojoInfo) { return pojoInfo.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(pojoInfo, 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()); }
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); }