package p.studio.architecture; import com.tngtech.archunit.base.DescribedPredicate; import com.tngtech.archunit.core.domain.JavaClass; final class PbsModuleOrigins { static final String PBS_GRADLE_PATH = ":prometeu-compiler:frontends:prometeu-frontend-pbs"; private PbsModuleOrigins() { } static boolean isPbsModule(final JavaClass javaClass) { return uriContains(javaClass, "/prometeu-frontend-pbs/") || uriContains(javaClass, "prometeu-frontend-pbs.jar"); } static boolean isRegistryModule(final JavaClass javaClass) { return uriContains(javaClass, "/prometeu-frontend-registry/") || uriContains(javaClass, "prometeu-frontend-registry.jar"); } static boolean isFrontendApiModule(final JavaClass javaClass) { return uriContains(javaClass, "/prometeu-frontend-api/") || uriContains(javaClass, "prometeu-frontend-api.jar"); } static DescribedPredicate fromPbsModule() { return DescribedPredicate.describe( "originate from the PBS frontend module", PbsModuleOrigins::isPbsModule); } static DescribedPredicate fromRegistryModule() { return DescribedPredicate.describe( "originate from the frontend registry module", PbsModuleOrigins::isRegistryModule); } static DescribedPredicate fromFrontendApiModule() { return DescribedPredicate.describe( "originate from the frontend-api module", PbsModuleOrigins::isFrontendApiModule); } static String sourceUri(final JavaClass javaClass) { return javaClass.getSource() .map(source -> normalize(source.getUri().toString())) .orElse(""); } private static boolean uriContains(final JavaClass javaClass, final String fragment) { return javaClass.getSource() .map(source -> normalize(source.getUri().toString()).contains(fragment)) .orElse(false); } private static String normalize(final String uri) { return uri.replace('\\', '/'); } }