Skip to content

Commit 28b7473

Browse files
committed
GH-1247 - Avoid registering nested packages as additional ones.
1 parent f784369 commit 28b7473

File tree

2 files changed

+22
-5
lines changed

2 files changed

+22
-5
lines changed

spring-modulith-core/src/main/java/org/springframework/modulith/core/AnnotationModulithMetadata.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import java.util.Arrays;
2020
import java.util.List;
2121
import java.util.Optional;
22+
import java.util.function.Predicate;
2223
import java.util.stream.Stream;
2324

2425
import org.springframework.core.annotation.AnnotatedElementUtils;
@@ -146,11 +147,14 @@ public List<String> getBasePackages() {
146147
var result = new ArrayList<String>();
147148
result.add(basePackage);
148149

149-
for (var candidate : annotation.additionalPackages()) {
150-
if (!result.contains(candidate)) {
151-
result.add(candidate);
152-
}
153-
}
150+
var name = PackageName.of(basePackage);
151+
152+
// Only add non-nested additional packages
153+
Stream.of(annotation.additionalPackages())
154+
.map(PackageName::of)
155+
.filter(Predicate.not(name::contains))
156+
.map(PackageName::getName)
157+
.forEach(result::add);
154158

155159
return result;
156160
}

spring-modulith-core/src/test/java/org/springframework/modulith/core/AnnotationModulithMetadataUnitTest.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,16 @@ void usesSimpleClassNameAsDefaultSystemName() {
5454
});
5555
}
5656

57+
@Test // GH-1247
58+
void skipsNestedAdditionalPackages() {
59+
60+
assertThat(AnnotationModulithMetadata.of(WithInvalidAdditionalpackages.class)).hasValueSatisfying(it -> {
61+
assertThat(it.getBasePackages())
62+
.hasSize(1)
63+
.contains(WithInvalidAdditionalpackages.class.getPackageName());
64+
});
65+
}
66+
5767
@Modulithic(useFullyQualifiedModuleNames = true)
5868
static class Sample {}
5969

@@ -63,4 +73,7 @@ static class MetaSample {}
6373
@Retention(RetentionPolicy.RUNTIME)
6474
@Modulithic(useFullyQualifiedModuleNames = true)
6575
@interface Intermediate {}
76+
77+
@Modulithic(additionalPackages = "org.springframework.modulith.core.nested")
78+
static class WithInvalidAdditionalpackages {}
6679
}

0 commit comments

Comments
 (0)