diff --git a/pom.xml b/pom.xml
index b841f65..a0fe38a 100644
--- a/pom.xml
+++ b/pom.xml
@@ -33,5 +33,37 @@
1.2
compile
+
+ io.github.classgraph
+ classgraph
+ 4.8.90
+ compile
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-shade-plugin
+ 2.4.3
+
+
+
+ package
+
+ shade
+
+
+
+
+ io.github.classgraph:classgraph
+
+
+
+
+
+
+
+
diff --git a/src/main/java/fr/pandacube/util/ReflexionUtil.java b/src/main/java/fr/pandacube/util/ReflexionUtil.java
index c087699..a07474c 100644
--- a/src/main/java/fr/pandacube/util/ReflexionUtil.java
+++ b/src/main/java/fr/pandacube/util/ReflexionUtil.java
@@ -2,6 +2,15 @@ package fr.pandacube.util;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.util.List;
+import java.util.concurrent.ExecutionException;
+import java.util.concurrent.TimeUnit;
+
+import com.google.common.cache.Cache;
+import com.google.common.cache.CacheBuilder;
+
+import io.github.classgraph.ClassGraph;
+import io.github.classgraph.ScanResult;
public class ReflexionUtil {
@@ -150,6 +159,27 @@ public class ReflexionUtil {
+ private static Cache, List>> subClassesLists = CacheBuilder.newBuilder()
+ .expireAfterAccess(10, TimeUnit.MINUTES)
+ .build();
+
+ public static List> getAllSubclasses(Class clazz) {
+ try {
+ @SuppressWarnings("unchecked")
+ List> classes = (List>) (List>) subClassesLists.get(clazz, () -> {
+ try (ScanResult scanResult = new ClassGraph().enableClassInfo().ignoreClassVisibility().scan()) {
+ return scanResult.getSubclasses(clazz.getName()).loadClasses();
+ }
+ });
+ return classes;
+ } catch(ExecutionException e) {
+ Log.severe(e);
+ return null;
+ }
+
+ }
+
+
}