diff --git a/archunit/src/main/java/com/tngtech/archunit/core/domain/JavaAccess.java b/archunit/src/main/java/com/tngtech/archunit/core/domain/JavaAccess.java index c17f39c74f..2f8a7f0b39 100644 --- a/archunit/src/main/java/com/tngtech/archunit/core/domain/JavaAccess.java +++ b/archunit/src/main/java/com/tngtech/archunit/core/domain/JavaAccess.java @@ -15,9 +15,6 @@ */ package com.tngtech.archunit.core.domain; -import java.util.Collections; -import java.util.Set; - import com.tngtech.archunit.PublicAPI; import com.tngtech.archunit.base.ChainableFunction; import com.tngtech.archunit.base.DescribedPredicate; @@ -29,6 +26,9 @@ import com.tngtech.archunit.core.domain.properties.HasSourceCodeLocation; import com.tngtech.archunit.core.importer.DomainBuilders.JavaAccessBuilder; +import java.util.Collections; +import java.util.Set; + import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.collect.ImmutableSet.toImmutableSet; import static com.tngtech.archunit.PublicAPI.Usage.ACCESS; @@ -112,7 +112,7 @@ public Set convertTo(Class type) { @Override public String toString() { return getClass().getSimpleName() + - "{origin=" + origin + ", target=" + target + ", lineNumber=" + getLineNumber() + additionalToStringFields() + '}'; + "{origin=" + origin + ", target=" + target + ", lineNumber=" + getLineNumber() + additionalToStringFields() + '}'; } String additionalToStringFields() { @@ -168,12 +168,16 @@ public static DescribedPredicate> originOwnerEqualsTargetOwner() { @PublicAPI(usage = ACCESS) public static DescribedPredicate> targetOwner(DescribedPredicate predicate) { - return target(Get.owner().is(predicate)); + DescribedPredicate> targetPredicate = + predicate.onResultOf(JavaAccess.Functions.Get.target() + .then(HasOwner.Functions.Get.owner())); + return targetPredicate.as("owner %s", predicate.getDescription()); } @PublicAPI(usage = ACCESS) public static DescribedPredicate> target(DescribedPredicate predicate) { - return new TargetPredicate<>(predicate); + DescribedPredicate> targetPredicate = predicate.onResultOf(JavaAccess.Functions.Get.target()); + return targetPredicate.as("target %s", predicate.getDescription()); } private static class OriginOwnerEqualsTargetOwnerPredicate extends DescribedPredicate> { diff --git a/archunit/src/test/java/com/tngtech/archunit/core/domain/JavaAccessTest.java b/archunit/src/test/java/com/tngtech/archunit/core/domain/JavaAccessTest.java index d9e8c84014..31a2364b30 100644 --- a/archunit/src/test/java/com/tngtech/archunit/core/domain/JavaAccessTest.java +++ b/archunit/src/test/java/com/tngtech/archunit/core/domain/JavaAccessTest.java @@ -60,6 +60,32 @@ public void origin_predicate() { assertThat(predicate).rejects(anyAccess()); } + @Test + public void target_predicate() { + DescribedPredicate> predicate = + JavaAccess.Predicates.target(DescribedPredicate.alwaysTrue().as("some text")); + + assertThat(predicate) + .hasDescription("target some text") + .accepts(anyAccess()); + + predicate = JavaAccess.Predicates.target(alwaysFalse()); + assertThat(predicate).rejects(anyAccess()); + } + + @Test + public void targetOwner_predicate() { + DescribedPredicate> predicate = + JavaAccess.Predicates.targetOwner(DescribedPredicate.alwaysTrue().as("some text")); + + assertThat(predicate) + .hasDescription("owner some text") + .accepts(anyAccess()); + + predicate = JavaAccess.Predicates.targetOwner(alwaysFalse()); + assertThat(predicate).rejects(anyAccess()); + } + @Test public void convertTo() { TestJavaAccess access = javaAccessFrom(importClassWithContext(String.class), "toString")