You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by je...@apache.org on 2018/08/11 00:07:10 UTC

[geode] branch develop updated: Revert "GEODE-5535: Upgrade FastClasspathScanner to 4.0.6 (#2290)"

This is an automated email from the ASF dual-hosted git repository.

jensdeppe pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new 1628976  Revert "GEODE-5535: Upgrade FastClasspathScanner to 4.0.6 (#2290)"
1628976 is described below

commit 162897646cc56af9309527c3d764fe1fab4bc764
Author: Jens Deppe <jd...@pivotal.io>
AuthorDate: Fri Aug 10 17:06:32 2018 -0700

    Revert "GEODE-5535: Upgrade FastClasspathScanner to 4.0.6 (#2290)"
    
    This reverts commit c2d3c1e16c49aac021a26dca65b57996be7d94a2.
---
 LICENSE                                            |  2 --
 geode-assembly/build.gradle                        |  2 +-
 .../integrationTest/resources/expected_jars.txt    |  2 +-
 geode-core/build.gradle                            |  3 +-
 .../InternalConfigurationPersistenceService.java   |  2 +-
 .../internal/cli/util/ClasspathScanLoadHelper.java | 33 +++++++++++++---------
 .../internal/deployment/FunctionScanner.java       | 18 +++++++-----
 ...nternalConfigurationPersistenceServiceTest.java |  2 +-
 gradle/dependency-versions.properties              |  2 +-
 9 files changed, 37 insertions(+), 29 deletions(-)

diff --git a/LICENSE b/LICENSE
index a243c40..0dc431d 100644
--- a/LICENSE
+++ b/LICENSE
@@ -257,8 +257,6 @@ The MIT License (http://opensource.org/licenses/mit-license.html)
 
 Apache Geode bundles the following files under the MIT license:
 
-  - ClassGraph v4.0.6 (https://github.com/classgraph/classgraph), Copyright (c)
-    2015 Luke Hutchison
   - HTML5 Shiv vpre3.5 (https://github.com/aFarkas/html5shiv), Copyright
     (c) 2014 Alexander Farkas (aFarkas)
   - JavaScript InfoVis Toolkit v2.0.1 (http://philogb.github.io/jit/),
diff --git a/geode-assembly/build.gradle b/geode-assembly/build.gradle
index 84b2aa7..cfea7e2 100755
--- a/geode-assembly/build.gradle
+++ b/geode-assembly/build.gradle
@@ -181,13 +181,13 @@ def cp = {
         // depedencies from geode-core
         it.contains('antlr') ||
         it.contains('commons-io') ||
-        it.contains('classgraph') ||
         it.contains('commons-collections') ||
         it.contains('commons-lang') ||
         it.contains('commons-logging') ||
         it.contains('commons-validator') ||
         it.contains('commons-beanutils') ||
         it.contains('commons-codec') ||
+        it.contains('fast-classpath-scanner') ||
         it.contains('fastutil') ||
         it.contains('jackson-annotations') ||
         it.contains('jackson-core') ||
diff --git a/geode-assembly/src/integrationTest/resources/expected_jars.txt b/geode-assembly/src/integrationTest/resources/expected_jars.txt
index 480c12c..6418396 100644
--- a/geode-assembly/src/integrationTest/resources/expected_jars.txt
+++ b/geode-assembly/src/integrationTest/resources/expected_jars.txt
@@ -2,7 +2,6 @@ activation
 antlr
 aopalliance
 byte-buddy
-classgraph
 classmate
 commons-beanutils
 commons-codec
@@ -14,6 +13,7 @@ commons-lang
 commons-logging
 commons-modeler
 commons-validator
+fast-classpath-scanner
 fastutil
 findbugs-annotations
 gfsh-dependencies.jar
diff --git a/geode-core/build.gradle b/geode-core/build.gradle
index 5ce12fb..f432b52 100755
--- a/geode-core/build.gradle
+++ b/geode-core/build.gradle
@@ -132,7 +132,8 @@ dependencies {
 
   compile 'org.apache.shiro:shiro-core:' + project.'shiro.version'
 
-  compile 'io.github.classgraph:classgraph:' + project.'classgraph.version'
+  // https://mvnrepository.com/artifact/io.github.lukehutch/fast-classpath-scanner
+  compile 'io.github.lukehutch:fast-classpath-scanner:' + project.'fast-classpath-scanner.version'
 
   compile 'com.healthmarketscience.rmiio:rmiio:' + project.'rmiio.version'
 
diff --git a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
index f4d19b9..fae9b74 100644
--- a/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
+++ b/geode-core/src/main/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceService.java
@@ -190,7 +190,7 @@ public class InternalConfigurationPersistenceService implements ConfigurationPer
 
   protected String[] getPackagesToScan() {
     String sysProperty = SystemPropertyHelper.getProperty(SystemPropertyHelper.PACKAGES_TO_SCAN);
-    String[] packages = {"org.apache.geode"};
+    String[] packages = {""};
     if (sysProperty != null) {
       packages = sysProperty.split(",");
     }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java
index 7acad82..08e1170 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/cli/util/ClasspathScanLoadHelper.java
@@ -16,11 +16,12 @@ package org.apache.geode.management.internal.cli.util;
 
 import static java.util.stream.Collectors.toSet;
 
+import java.lang.reflect.Modifier;
+import java.util.HashSet;
 import java.util.Set;
 
-import io.github.classgraph.ClassGraph;
-import io.github.classgraph.ClassInfoList;
-import io.github.classgraph.ScanResult;
+import io.github.lukehutch.fastclasspathscanner.FastClasspathScanner;
+
 
 /**
  * Utility class to scan class-path & load classes.
@@ -30,22 +31,26 @@ import io.github.classgraph.ScanResult;
 public class ClasspathScanLoadHelper {
   public static Set<Class<?>> scanPackagesForClassesImplementing(Class<?> implementedInterface,
       String... packagesToScan) {
-    ScanResult scanResult = new ClassGraph().whitelistPackages(packagesToScan).enableClassInfo()
-        .enableAnnotationInfo().scan();
-
-    ClassInfoList classInfoList = scanResult.getClassesImplementing(implementedInterface.getName())
-        .filter(ci -> !ci.isAbstract() && !ci.isInterface() && ci.isPublic());
+    Set<Class<?>> classesImplementing = new HashSet<>();
+    new FastClasspathScanner(packagesToScan)
+        .matchClassesImplementing(implementedInterface, classesImplementing::add).scan();
 
-    return classInfoList.loadClasses().stream().collect(toSet());
+    return classesImplementing.stream().filter(ClasspathScanLoadHelper::isInstantiable)
+        .collect(toSet());
   }
 
   public static Set<Class<?>> scanClasspathForAnnotation(Class<?> annotation,
       String... packagesToScan) {
-    ScanResult scanResult = new ClassGraph().whitelistPackages(packagesToScan).enableClassInfo()
-        .enableAnnotationInfo().scan();
-    ClassInfoList classInfoList = scanResult.getClassesWithAnnotation(annotation.getName());
-
-    return classInfoList.loadClasses().stream().collect(toSet());
+    Set<Class<?>> classesWithAnnotation = new HashSet<>();
+    new FastClasspathScanner(packagesToScan)
+        .matchClassesWithAnnotation(annotation, classesWithAnnotation::add).scan();
+    return classesWithAnnotation;
   }
 
+  private static boolean isInstantiable(Class<?> klass) {
+    int modifiers = klass.getModifiers();
+
+    return !Modifier.isAbstract(modifiers) && !Modifier.isInterface(modifiers)
+        && Modifier.isPublic(modifiers);
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/management/internal/deployment/FunctionScanner.java b/geode-core/src/main/java/org/apache/geode/management/internal/deployment/FunctionScanner.java
index 9108390..3e4ec66 100644
--- a/geode-core/src/main/java/org/apache/geode/management/internal/deployment/FunctionScanner.java
+++ b/geode-core/src/main/java/org/apache/geode/management/internal/deployment/FunctionScanner.java
@@ -16,12 +16,14 @@ package org.apache.geode.management.internal.deployment;
 
 import java.io.File;
 import java.io.IOException;
+import java.net.URL;
+import java.net.URLClassLoader;
 import java.util.Collection;
 import java.util.HashSet;
 import java.util.Set;
 
-import io.github.classgraph.ClassGraph;
-import io.github.classgraph.ScanResult;
+import io.github.lukehutch.fastclasspathscanner.FastClasspathScanner;
+import io.github.lukehutch.fastclasspathscanner.scanner.ScanResult;
 
 import org.apache.geode.cache.execute.Function;
 import org.apache.geode.cache.execute.FunctionAdapter;
@@ -29,14 +31,16 @@ import org.apache.geode.cache.execute.FunctionAdapter;
 public class FunctionScanner {
 
   public Collection<String> findFunctionsInJar(File jarFile) throws IOException {
-    ClassGraph fastClasspathScanner = new ClassGraph().disableDirScanning()
-        .removeTemporaryFilesAfterScan().overrideClasspath(jarFile.getAbsolutePath());
-    ScanResult scanResult = fastClasspathScanner.enableClassInfo().scan();
+    URLClassLoader urlClassLoader =
+        new URLClassLoader(new URL[] {jarFile.getCanonicalFile().toURL()});
+    FastClasspathScanner fastClasspathScanner = new FastClasspathScanner("-dir:")
+        .removeTemporaryFilesAfterScan(true).overrideClassLoaders(urlClassLoader);
+    ScanResult scanResult = fastClasspathScanner.scan();
 
     Set<String> functionClasses = new HashSet<>();
 
-    functionClasses.addAll(scanResult.getClassesImplementing(Function.class.getName()).getNames());
-    functionClasses.addAll(scanResult.getSubclasses(FunctionAdapter.class.getName()).getNames());
+    functionClasses.addAll(scanResult.getNamesOfClassesImplementing(Function.class));
+    functionClasses.addAll(scanResult.getNamesOfSubclassesOf(FunctionAdapter.class));
 
     return functionClasses;
   }
diff --git a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
index 82c5937..6dbf018 100644
--- a/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
+++ b/geode-core/src/test/java/org/apache/geode/distributed/internal/InternalConfigurationPersistenceServiceTest.java
@@ -193,7 +193,7 @@ public class InternalConfigurationPersistenceServiceTest {
   public void getPackagesToScanWithoutSystemProperty() {
     String[] packages = service.getPackagesToScan();
     assertThat(packages).hasSize(1);
-    assertThat(packages[0]).isEqualTo("org.apache.geode");
+    assertThat(packages[0]).isEqualTo("");
   }
 
   @Test
diff --git a/gradle/dependency-versions.properties b/gradle/dependency-versions.properties
index 48ad4d5..d9a1ae6 100644
--- a/gradle/dependency-versions.properties
+++ b/gradle/dependency-versions.properties
@@ -21,7 +21,6 @@ bcel.version = 6.0
 catch-exception.version = 1.4.4
 catch-throwable.version = 1.4.4
 cglib.version = 3.2.4
-classgraph.version = 4.0.6
 commons-beanutils.version = 1.9.3
 commons-collections.version = 3.2.2
 commons-configuration.version = 1.10
@@ -36,6 +35,7 @@ commons-validator.version = 1.6
 HikariCP.version = 3.2.0
 derby.version = 10.13.1.1
 dom4j.version = 1.6.1
+fast-classpath-scanner.version=2.21
 fastutil.version = 8.2.1
 google-gson.version=2.8.5
 guava.version = 25.1-jre