Skip to content

Commit

Permalink
Review: Unify ClassKindCondition and IsConditionByPredicate
Browse files Browse the repository at this point in the history
These conditions actually do almost the same, `IsConditionByPredicate` simply needs to be enhanced to customize the description of a single event instead of always taking the predicate description.

Signed-off-by: Peter Gafert <peter.gafert@tngtech.com>
  • Loading branch information
codecholeric committed Jan 10, 2020
1 parent 222ccd2 commit 6c75e21
Showing 1 changed file with 32 additions and 41 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -841,62 +841,62 @@ public static ArchCondition<JavaClass> notBeEnums() {

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> beTopLevelClasses() {
return ClassKindCondition.BE_TOP_LEVEL_CLASSES;
return BE_TOP_LEVEL_CLASSES;
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> notBeTopLevelClasses() {
return not(ClassKindCondition.BE_TOP_LEVEL_CLASSES);
return not(BE_TOP_LEVEL_CLASSES);
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> beNestedClasses() {
return ClassKindCondition.BE_NESTED_CLASSES;
return BE_NESTED_CLASSES;
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> notBeNestedClasses() {
return not(ClassKindCondition.BE_NESTED_CLASSES);
return not(BE_NESTED_CLASSES);
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> beMemberClasses() {
return ClassKindCondition.BE_MEMBER_CLASSES;
return BE_MEMBER_CLASSES;
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> notBeMemberClasses() {
return not(ClassKindCondition.BE_MEMBER_CLASSES);
return not(BE_MEMBER_CLASSES);
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> beInnerClasses() {
return ClassKindCondition.BE_INNER_CLASSES;
return BE_INNER_CLASSES;
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> notBeInnerClasses() {
return not(ClassKindCondition.BE_INNER_CLASSES);
return not(BE_INNER_CLASSES);
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> beAnonymousClasses() {
return ClassKindCondition.BE_ANONYMOUS_CLASSES;
return BE_ANONYMOUS_CLASSES;
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> notBeAnonymousClasses() {
return not(ClassKindCondition.BE_ANONYMOUS_CLASSES);
return not(BE_ANONYMOUS_CLASSES);
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> beLocalClasses() {
return ClassKindCondition.BE_LOCAL_CLASSES;
return BE_LOCAL_CLASSES;
}

@PublicAPI(usage = ACCESS)
public static ArchCondition<JavaClass> notBeLocalClasses() {
return not(ClassKindCondition.BE_LOCAL_CLASSES);
return not(BE_LOCAL_CLASSES);
}

@PublicAPI(usage = ACCESS)
Expand Down Expand Up @@ -997,6 +997,19 @@ private static <T extends HasDescription & HasSourceCodeLocation> String createM
return object.getDescription() + " " + message + " in " + object.getSourceCodeLocation();
}

private static final IsConditionByPredicate<JavaClass> BE_TOP_LEVEL_CLASSES =
new IsConditionByPredicate<>("a top level class", JavaClass.Predicates.TOP_LEVEL_CLASSES);
private static final IsConditionByPredicate<JavaClass> BE_NESTED_CLASSES =
new IsConditionByPredicate<>("a nested class", JavaClass.Predicates.NESTED_CLASSES);
private static final IsConditionByPredicate<JavaClass> BE_MEMBER_CLASSES =
new IsConditionByPredicate<>("a member class", JavaClass.Predicates.MEMBER_CLASSES);
private static final IsConditionByPredicate<JavaClass> BE_INNER_CLASSES =
new IsConditionByPredicate<>("an inner class", JavaClass.Predicates.INNER_CLASSES);
private static final IsConditionByPredicate<JavaClass> BE_ANONYMOUS_CLASSES =
new IsConditionByPredicate<>("an anonymous class", JavaClass.Predicates.ANONYMOUS_CLASSES);
private static final IsConditionByPredicate<JavaClass> BE_LOCAL_CLASSES =
new IsConditionByPredicate<>("a local class", JavaClass.Predicates.LOCAL_CLASSES);

private static class HaveOnlyModifiersCondition<T extends HasModifiers & HasDescription & HasSourceCodeLocation>
extends AllAttributesMatchCondition<T> {

Expand Down Expand Up @@ -1080,34 +1093,6 @@ public void check(JavaClass javaClass, ConditionEvents events) {
}
}

private static class ClassKindCondition extends ArchCondition<JavaClass> {

private static final ClassKindCondition BE_TOP_LEVEL_CLASSES =
new ClassKindCondition("a top level class", JavaClass.Predicates.TOP_LEVEL_CLASSES);
private static final ClassKindCondition BE_NESTED_CLASSES = new ClassKindCondition("a nested class", JavaClass.Predicates.NESTED_CLASSES);
private static final ClassKindCondition BE_MEMBER_CLASSES = new ClassKindCondition("a member class", JavaClass.Predicates.MEMBER_CLASSES);
private static final ClassKindCondition BE_INNER_CLASSES = new ClassKindCondition("an inner class", JavaClass.Predicates.INNER_CLASSES);
private static final ClassKindCondition BE_ANONYMOUS_CLASSES =
new ClassKindCondition("an anonymous class", JavaClass.Predicates.ANONYMOUS_CLASSES);
private static final ClassKindCondition BE_LOCAL_CLASSES = new ClassKindCondition("a local class", JavaClass.Predicates.LOCAL_CLASSES);

private final String kind;
private final DescribedPredicate<JavaClass> predicate;

private ClassKindCondition(String kind, DescribedPredicate<JavaClass> predicate) {
super("be " + predicate.getDescription());
this.kind = kind;
this.predicate = predicate;
}

@Override
public void check(JavaClass javaClass, ConditionEvents events) {
boolean isSatisfied = predicate.apply(javaClass);
String message = createMessage(javaClass, (isSatisfied ? "is" : "is not") + " " + kind);
events.add(new SimpleConditionEvent(javaClass, isSatisfied, message));
}
}

private static class NumberOfElementsCondition extends ArchCondition<JavaClass> {
private final DescribedPredicate<Integer> predicate;
private SortedSet<String> allClassNames;
Expand Down Expand Up @@ -1276,18 +1261,24 @@ public void check(T item, ConditionEvents events) {
}

private static class IsConditionByPredicate<T extends HasDescription & HasSourceCodeLocation> extends ArchCondition<T> {
private final String eventDescription;
private final DescribedPredicate<T> predicate;

IsConditionByPredicate(DescribedPredicate<? super T> predicate) {
this(predicate.getDescription(), predicate);
}

IsConditionByPredicate(String eventDescription, DescribedPredicate<? super T> predicate) {
super(ArchPredicates.be(predicate).getDescription());
this.eventDescription = eventDescription;
this.predicate = predicate.forSubType();
}

@Override
public void check(T member, ConditionEvents events) {
boolean satisfied = predicate.apply(member);
String message = createMessage(member,
(satisfied ? "is " : "is not ") + predicate.getDescription());
(satisfied ? "is " : "is not ") + eventDescription);
events.add(new SimpleConditionEvent(member, satisfied, message));
}
}
Expand Down

0 comments on commit 6c75e21

Please sign in to comment.