package com.tngtech.archunit.maventest;
import com.tngtech.archunit.core.domain.JavaClass;
import com.tngtech.archunit.core.domain.JavaClasses;
import com.tngtech.archunit.junit.ArchTest;
import com.tngtech.archunit.lang.ArchCondition;
import com.tngtech.archunit.lang.ArchRule;
import com.tngtech.archunit.lang.ConditionEvents;
import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes;
public class ArchSubLibrary {
static final String RULE_ON_LEVEL_TWO_DESCRIPTOR = "rule_on_level_two";
static final String RULE_METHOD_ON_LEVEL_TWO_DESCRIPTOR = "rule_method_on_level_two";
@ArchTest
public static final ArchRule rule_on_level_two =
classes().should(registerCallAs(ArchSubLibrary.class, RULE_ON_LEVEL_TWO_DESCRIPTOR));
@ArchTest
public static void rule_method_on_level_two(JavaClasses classes) {
CalledRuleRecords.register(ArchSubLibrary.class, RULE_METHOD_ON_LEVEL_TWO_DESCRIPTOR);
}
static ArchCondition<JavaClass> registerCallAs(final Class<?> ruleDeclaringClass, final String ruleDescriptor) {
return new ArchCondition<JavaClass>("<just record call>") {
boolean firstCall = true;
@Override
public void check(JavaClass item, ConditionEvents events) {
if (firstCall) {
CalledRuleRecords.register(ruleDeclaringClass, ruleDescriptor);
firstCall = false;
}
}
};
}
}