Problem
ApplicationModules.of(…) factory methods are restrictive. Specifically:
- Naming Collisions: A
DescribedPredicate sharing a name with the class blocks the import.
- Lack of Composition: Cannot apply multiple
ImportOption filters (e.g., excluding tests AND fixtures) while using predicates.
Proposed Solution
Introduce a Builder or expanded Varargs support to match ArchUnit’s ClassFileImporter flexibility:
// Option A: Builder Pattern
ApplicationModules modules = ApplicationModules.builder(MyApplication.class)
.withImportOption(ImportOption.Predefined.DO_NOT_INCLUDE_TESTS)
.withExclusion(DescribedPredicate.resideInAPackage("..internal.."))
.build();
// Option B: Importer Injection
ClassFileImporter importer = new ClassFileImporter()
.withImportOption(new DontIncludeTests());
ApplicationModules modules = ApplicationModules.of(MyApplication.class, importer);
Problem
ApplicationModules.of(…)factory methods are restrictive. Specifically:DescribedPredicatesharing a name with the class blocks the import.ImportOptionfilters (e.g., excluding tests AND fixtures) while using predicates.Proposed Solution
Introduce a Builder or expanded Varargs support to match ArchUnit’s
ClassFileImporterflexibility: