/** * Retrieves declared field information objects for fields in a type. */ public static @Nonnull FiniteIterable<@Nonnull NonAccessibleDeclaredFieldInformation> getNonAccessibleFieldInformation(@Nonnull TypeElement typeElement, @Nonnull FiniteIterable<@Nonnull MethodInformation> methodsOfType) { final @Nonnull FiniteIterable<@Nonnull VariableElement> fields = ProcessingUtility.getAllFields(typeElement); return fields.filter(field -> ( field.getModifiers().contains(Modifier.PRIVATE) && !hasGetter(field.getSimpleName().toString(), field.asType(), methodsOfType) )).map(field -> NonAccessibleDeclaredFieldInformation.of(field, (DeclaredType) typeElement.asType()) ); }
/** * Retrieves declared field information objects for fields in a type. */ public static @Nonnull FiniteIterable<@Nonnull NonDirectlyAccessibleDeclaredFieldInformation> getNonDirectlyAccessibleFieldInformation(@Nonnull TypeElement typeElement, @Nonnull FiniteIterable<@Nonnull MethodInformation> methodsOfType) { final @Nonnull FiniteIterable<@Nonnull VariableElement> fields = ProcessingUtility.getAllFields(typeElement); return fields.filter(field -> ( field.getModifiers().contains(Modifier.PRIVATE) && hasGetter(field.getSimpleName().toString(), field.asType(), methodsOfType) )).map(field -> NonDirectlyAccessibleDeclaredFieldInformation.of(field, (DeclaredType) typeElement.asType(), getGetterOf(field.getSimpleName().toString(), methodsOfType), getSetterOf(field.getSimpleName().toString(), ProcessingUtility.getQualifiedName(field.asType()), methodsOfType)) ); }
/** * Returns an iterable of directly accessible field information for a given type element. */ public static @Unmodifiable @Nonnull FiniteIterable<DirectlyAccessibleDeclaredFieldInformation> getDirectlyAccessibleFieldInformation(@Nonnull TypeElement typeElement) { final @Nonnull FiniteIterable<@Nonnull VariableElement> fields = ProcessingUtility.getAllFields(typeElement); return fields.filter((field) -> (!field.getModifiers().contains(Modifier.PRIVATE))).map((field) -> (DirectlyAccessibleDeclaredFieldInformation.of(field, (DeclaredType) typeElement.asType()))); }
@Pure @Override public void checkUsage(@Nonnull Element element, @Nonnull AnnotationMirror annotationMirror, @NonCaptured @Modified @Nonnull ErrorLogger errorLogger) { for (@Nonnull VariableElement field : ProcessingUtility.getAllFields((TypeElement) element)) { if (!field.getModifiers().contains(Modifier.STATIC)) { errorLogger.log("The stateless type $ may only have static fields.", SourcePosition.of(field), element); } } }
@Pure @Override public void checkUsage(@Nonnull Element element, @Nonnull AnnotationMirror annotationMirror, @NonCaptured @Modified @Nonnull ErrorLogger errorLogger) { for (@Nonnull ExecutableElement method : ProcessingUtility.getAllMethods((TypeElement) element).filter(ProcessingUtility::isDeclaredInDigitalIDLibrary).filterNot(method -> method.getModifiers().contains(Modifier.STATIC))) { if (!ProcessingUtility.hasAnnotation(method, Pure.class) && !ProcessingUtility.hasAnnotation(method, PureWithSideEffects.class)) { errorLogger.log("The read-only type $ may only contain pure non-static methods.", SourcePosition.of(method), element); } } for (@Nonnull VariableElement field : ProcessingUtility.getAllFields((TypeElement) element).filter(ProcessingUtility::isDeclaredInDigitalIDLibrary).filterNot(field -> field.getModifiers().contains(Modifier.STATIC))) { if (!field.getModifiers().contains(Modifier.FINAL)) { errorLogger.log("The read-only type $ may only contain final non-static fields.", SourcePosition.of(field), element); } } }
@Pure @Override public void checkUsage(@Nonnull Element element, @Nonnull AnnotationMirror annotationMirror, @NonCaptured @Modified @Nonnull ErrorLogger errorLogger) { for (@Nonnull ExecutableElement method : ProcessingUtility.getAllMethods((TypeElement) element).filter(ProcessingUtility::isDeclaredInDigitalIDLibrary).filterNot(method -> method.getModifiers().contains(Modifier.STATIC))) { if (!ProcessingUtility.hasAnnotation(method, Pure.class) && !ProcessingUtility.hasAnnotation(method, PureWithSideEffects.class)) { errorLogger.log("The immutable type $ may only contain pure non-static methods.", SourcePosition.of(method), element); } } for (@Nonnull VariableElement field : ProcessingUtility.getAllFields((TypeElement) element).filter(ProcessingUtility::isDeclaredInDigitalIDLibrary).filterNot(field -> field.getModifiers().contains(Modifier.STATIC))) { if (!field.getModifiers().contains(Modifier.FINAL)) { errorLogger.log("The immutable type $ may only contain final non-static fields.", SourcePosition.of(field), element); } } }
public @Nullable String getDefaultValue() { if (isGetter()) { final @Nonnull FiniteIterable<@Nonnull VariableElement> fields = ProcessingUtility.getAllFields((TypeElement) getContainingType().asElement()); final @Nullable VariableElement fieldElement = fields.findFirst(field -> field.getSimpleName().contentEquals(getFieldName())); if (fieldElement == null) {