Replace fast-classpath-scanner with classgraph

This commit is contained in:
Gary Tierney
2018-08-19 20:32:42 +01:00
parent 82b79ba60c
commit e255bd195e
3 changed files with 27 additions and 15 deletions
+1 -1
View File
@@ -15,7 +15,7 @@ dependencies {
compile group: 'org.jetbrains.kotlinx', name: 'kotlinx-coroutines-core', version: kotlinxCoroutinesVersion
implementation group: 'com.google.guava', name: 'guava', version: guavaVersion
implementation group: 'io.github.lukehutch', name: 'fast-classpath-scanner', version: classpathScannerVersion
implementation group: 'io.github.classgraph', name: 'classgraph', version: classGraphVersion
implementation group: 'com.lambdaworks', name: 'scrypt', version: scryptVersion
testImplementation group: 'junit', name: 'junit', version: junitVersion
@@ -1,6 +1,9 @@
package org.apollo.game.plugin;
import io.github.lukehutch.fastclasspathscanner.FastClasspathScanner;
import io.github.classgraph.ClassGraph;
import io.github.classgraph.ClassInfo;
import io.github.classgraph.ClassInfoList;
import io.github.classgraph.ScanResult;
import org.apollo.game.model.World;
import org.apollo.game.plugin.kotlin.KotlinPluginScript;
@@ -13,6 +16,7 @@ import java.util.logging.Logger;
public class KotlinPluginEnvironment implements PluginEnvironment {
private static final Logger logger = Logger.getLogger(KotlinPluginEnvironment.class.getName());
private static final String PLUGIN_SUFFIX = "_plugin";
private final World world;
private PluginContext context;
@@ -26,25 +30,26 @@ public class KotlinPluginEnvironment implements PluginEnvironment {
List<KotlinPluginScript> pluginScripts = new ArrayList<>();
List<Class<? extends KotlinPluginScript>> pluginClasses = new ArrayList<>();
new FastClasspathScanner()
.matchSubclassesOf(KotlinPluginScript.class, pluginClasses::add)
.scan();
ClassGraph classGraph = new ClassGraph().enableAllInfo();
try {
for (Class<? extends KotlinPluginScript> pluginClass : pluginClasses) {
Constructor<? extends KotlinPluginScript> pluginConstructor =
pluginClass.getConstructor(World.class, PluginContext.class);
try (ScanResult scanResult = classGraph.scan()) {
ClassInfoList pluginClassList = scanResult
.getSubclasses(KotlinPluginScript.class.getName())
.directOnly();
pluginScripts.add(pluginConstructor.newInstance(world, context));
for (ClassInfo pluginClassInfo : pluginClassList) {
Class<KotlinPluginScript> scriptClass = pluginClassInfo.loadClass(KotlinPluginScript.class);
Constructor<KotlinPluginScript> scriptConstructor = scriptClass.getConstructor(World.class,
PluginContext.class);
pluginScripts.add(scriptConstructor.newInstance(world, context));
logger.info(String.format("Loaded plugin: %s", pluginDescriptor(scriptClass)));
}
} catch (Exception e) {
throw new RuntimeException(e);
}
pluginScripts.forEach(script -> {
logger.info("Starting script: " + script.getClass().getName());
script.doStart(world);
});
pluginScripts.forEach(script -> script.doStart(world));
}
@Override
@@ -52,4 +57,11 @@ public class KotlinPluginEnvironment implements PluginEnvironment {
this.context = context;
}
private static String pluginDescriptor(Class<? extends KotlinPluginScript> clazz) {
String className = clazz.getSimpleName();
String name = className.substring(0, className.length() - PLUGIN_SUFFIX.length());
Package pkg = clazz.getPackage();
return pkg == null ? name : name + " from " + pkg.getName();
}
}
+1 -1
View File
@@ -10,5 +10,5 @@ ext {
guavaVersion = '19.0'
commonsCompressVersion = '1.10'
assertjVersion = '3.8.0'
classpathScannerVersion = '2.0.21'
classGraphVersion = '4.0.6'
}