From 6eaaa292c170f1257b287647509023f98b0dd954 Mon Sep 17 00:00:00 2001 From: John Burns Date: Mon, 19 Jan 2026 11:47:42 -0600 Subject: [PATCH] fix description of targetOwner predicate targetOwner was producing the same message as target() eg. "access target where target is annotated with..." instead of "access target where owner is annotated with..." Signed-off-by: John Burns --- .../archunit/core/domain/JavaAccess.java | 16 +++++++----- .../archunit/core/domain/JavaAccessTest.java | 26 +++++++++++++++++++ 2 files changed, 36 insertions(+), 6 deletions(-) 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")