@PublicAPI(usage = ACCESS, state = EXPERIMENTAL)
    public static CreatorByRootClass defineByRootClasses(Predicate<? super JavaClass> rootClassPredicate) {
        return CreatorByRootClass.from(rootClassPredicate);
    }
@Test
    public void rejects_overlapping_modules_by_root_classes() {
        JavaClasses invalidExamples = new ClassFileImporter().importPackages(getExamplePackage("invalid"));

        assertThatThrownBy(
                () -> ArchModules
                        .defineByRootClasses(javaClass -> javaClass.getSimpleName().endsWith("Descriptor"))
                        .modularize(invalidExamples)
        )
                .isInstanceOf(IllegalArgumentException.class)
                .hasMessageContaining("modules would overlap")
                .hasMessageContaining(
                        com.tngtech.archunit.library.modules.testexamples.invalid.overlapping_root_classes.ModuleOneDescriptor.class.getPackage().getName())
                .hasMessageContaining(
                        com.tngtech.archunit.library.modules.testexamples.invalid.overlapping_root_classes.child.ModuleTwoDescriptor.class.getPackage().getName());
    }