Search in sources :

Example 1 with STATIC

use of com.tngtech.archunit.core.domain.JavaModifier.STATIC in project sirius-components by eclipse-sirius.

the class HaveAValidBuilderCondition method check.

@Override
public void check(JavaClass javaClass, ConditionEvents events) {
    String fullName = javaClass.getFullName();
    // $NON-NLS-1$
    JavaClass builderJavaClass = this.javaClasses.get(fullName + "$Builder");
    boolean isValidBuilder = builderJavaClass.getModifiers().contains(FINAL);
    isValidBuilder = isValidBuilder && builderJavaClass.getModifiers().contains(PUBLIC);
    // @formatter:off
    List<JavaField> javaFields = javaClass.getAllFields().stream().filter(field -> !field.getModifiers().contains(STATIC)).collect(Collectors.toUnmodifiableList());
    for (JavaField javaField : javaFields) {
        JavaField builderField = builderJavaClass.getField(javaField.getName());
        isValidBuilder = isValidBuilder && builderField != null && builderField.getRawType().getName().equals(javaField.getRawType().getName());
    }
    for (JavaMethod javaMethod : builderJavaClass.getMethods()) {
        if (!BUILD_METHOD_NAME.equals(javaMethod.getName()) && !javaMethod.getName().contains(LAMBDA)) {
            isValidBuilder = isValidBuilder && javaMethod.getRawReturnType().equals(builderJavaClass);
            JavaField javaField = builderJavaClass.getField(javaMethod.getName());
            isValidBuilder = isValidBuilder && javaField != null;
            isValidBuilder = isValidBuilder && javaMethod.getRawParameterTypes().size() == 1;
        }
    }
    // @formatter:off
    long buildMethodCount = builderJavaClass.getMethods().stream().filter(method -> BUILD_METHOD_NAME.equals(method.getName())).filter(method -> javaClass.getSimpleName().equals(method.getRawReturnType().getSimpleName())).count();
    // @formatter:on
    isValidBuilder = isValidBuilder && buildMethodCount == 1;
    // $NON-NLS-1$
    String message = "The builder is valid";
    if (!isValidBuilder) {
        // $NON-NLS-1$
        message = MessageFormat.format("The builder of the class {0} is not valid", javaClass.getSimpleName());
    }
    events.add(new SimpleConditionEvent(builderJavaClass, isValidBuilder, message));
}
Also used : JavaClasses(com.tngtech.archunit.core.domain.JavaClasses) JavaMethod(com.tngtech.archunit.core.domain.JavaMethod) STATIC(com.tngtech.archunit.core.domain.JavaModifier.STATIC) ArchCondition(com.tngtech.archunit.lang.ArchCondition) Collectors(java.util.stream.Collectors) FINAL(com.tngtech.archunit.core.domain.JavaModifier.FINAL) JavaField(com.tngtech.archunit.core.domain.JavaField) MessageFormat(java.text.MessageFormat) Objects(java.util.Objects) List(java.util.List) ConditionEvents(com.tngtech.archunit.lang.ConditionEvents) SimpleConditionEvent(com.tngtech.archunit.lang.SimpleConditionEvent) JavaClass(com.tngtech.archunit.core.domain.JavaClass) PUBLIC(com.tngtech.archunit.core.domain.JavaModifier.PUBLIC) SimpleConditionEvent(com.tngtech.archunit.lang.SimpleConditionEvent) JavaField(com.tngtech.archunit.core.domain.JavaField) JavaClass(com.tngtech.archunit.core.domain.JavaClass) JavaMethod(com.tngtech.archunit.core.domain.JavaMethod)

Aggregations

JavaClass (com.tngtech.archunit.core.domain.JavaClass)1 JavaClasses (com.tngtech.archunit.core.domain.JavaClasses)1 JavaField (com.tngtech.archunit.core.domain.JavaField)1 JavaMethod (com.tngtech.archunit.core.domain.JavaMethod)1 FINAL (com.tngtech.archunit.core.domain.JavaModifier.FINAL)1 PUBLIC (com.tngtech.archunit.core.domain.JavaModifier.PUBLIC)1 STATIC (com.tngtech.archunit.core.domain.JavaModifier.STATIC)1 ArchCondition (com.tngtech.archunit.lang.ArchCondition)1 ConditionEvents (com.tngtech.archunit.lang.ConditionEvents)1 SimpleConditionEvent (com.tngtech.archunit.lang.SimpleConditionEvent)1 MessageFormat (java.text.MessageFormat)1 List (java.util.List)1 Objects (java.util.Objects)1 Collectors (java.util.stream.Collectors)1