From f333d47613337d52005e90446397c082b12cffaf Mon Sep 17 00:00:00 2001 From: Paul Campbell Date: Sat, 10 Mar 2018 22:52:08 +0000 Subject: [PATCH] builder: split Java 8 and 9 class path scanning - java 9 unsupported --- .../builder/DefaultPackageScanner.java | 25 ++++++++++++++++--- 1 file changed, 22 insertions(+), 3 deletions(-) diff --git a/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/DefaultPackageScanner.java b/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/DefaultPackageScanner.java index aea4769..1e7c246 100644 --- a/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/DefaultPackageScanner.java +++ b/builder/src/main/java/net/kemitix/checkstyle/ruleset/builder/DefaultPackageScanner.java @@ -23,8 +23,11 @@ package net.kemitix.checkstyle.ruleset.builder; import com.google.common.reflect.ClassPath; import lombok.RequiredArgsConstructor; +import net.kemitix.conditional.Value; import org.springframework.stereotype.Service; +import java.net.URLClassLoader; +import java.util.function.Supplier; import java.util.stream.Stream; /** @@ -40,8 +43,24 @@ public class DefaultPackageScanner implements PackageScanner { @Override public final Stream apply(final RuleSource ruleSource) { - return classPath.getTopLevelClassesRecursive(ruleSource.getBasePackage()) - .stream() - .map(ClassPath.ClassInfo::getName); + return Value.>where(isJava8()) + .then(scanPackageByClassPath(ruleSource)) + .otherwise(scanPackageByModulePath()); + } + + private boolean isJava8() { + return getClass().getClassLoader() instanceof URLClassLoader; + } + + private Supplier> scanPackageByClassPath(final RuleSource ruleSource) { + return () -> classPath.getTopLevelClassesRecursive(ruleSource.getBasePackage()) + .stream() + .map(ClassPath.ClassInfo::getName); + } + + private Supplier> scanPackageByModulePath() { + return () -> { + throw new UnsupportedOperationException("Java 9 Module Path in unsupported"); + }; } }