diff --git a/Mage/src/main/java/mage/cards/Sets.java b/Mage/src/main/java/mage/cards/Sets.java index 41b605973e8..f2aaea4437f 100644 --- a/Mage/src/main/java/mage/cards/Sets.java +++ b/Mage/src/main/java/mage/cards/Sets.java @@ -64,7 +64,7 @@ public class Sets extends HashMap { private Sets() { ArrayList packages = new ArrayList<>(); packages.add("mage.sets"); - for (Class c : ClassScanner.findClasses(packages, ExpansionSet.class)) { + for (Class c : ClassScanner.findClasses(null, packages, ExpansionSet.class)) { try { addSet((ExpansionSet) c.getMethod("getInstance").invoke(null)); } catch (Exception ex) { diff --git a/Mage/src/main/java/mage/cards/repository/CardScanner.java b/Mage/src/main/java/mage/cards/repository/CardScanner.java index 8ea8d39f468..317e92726ce 100644 --- a/Mage/src/main/java/mage/cards/repository/CardScanner.java +++ b/Mage/src/main/java/mage/cards/repository/CardScanner.java @@ -63,7 +63,7 @@ public class CardScanner { } ExpansionRepository.instance.setContentVersion(ExpansionRepository.instance.getContentVersionConstant()); - for (Class c : ClassScanner.findClasses(packages, CardImpl.class)) { + for (Class c : ClassScanner.findClasses(null, packages, CardImpl.class)) { if (!CardRepository.instance.cardExists(c.getCanonicalName())) { Card card = CardImpl.createCard(c); if (card != null) { diff --git a/Mage/src/main/java/mage/util/ClassScanner.java b/Mage/src/main/java/mage/util/ClassScanner.java index f644575e976..1d6e9d34a20 100644 --- a/Mage/src/main/java/mage/util/ClassScanner.java +++ b/Mage/src/main/java/mage/util/ClassScanner.java @@ -46,10 +46,10 @@ import java.util.jar.JarInputStream; */ public class ClassScanner { - public static List findClasses(List packages, Class type) { + public static List findClasses(ClassLoader classLoader, List packages, Class type) { List cards = new ArrayList<>(); try { - ClassLoader classLoader = Thread.currentThread().getContextClassLoader(); + if(classLoader == null) classLoader = Thread.currentThread().getContextClassLoader(); assert classLoader != null; HashMap dirs = new HashMap<>(); @@ -71,19 +71,19 @@ public class ClassScanner { } for (String filePath : dirs.keySet()) { - cards.addAll(findClasses(new File(filePath), dirs.get(filePath), type)); + cards.addAll(findClasses(classLoader, new File(filePath), dirs.get(filePath), type)); } for (String filePath : jars) { File file = new File(URLDecoder.decode(filePath, "UTF-8")); - cards.addAll(findClassesInJar(file, packages, type)); + cards.addAll(findClassesInJar(classLoader, file, packages, type)); } } catch (IOException ex) { } return cards; } - private static List findClasses(File directory, String packageName, Class type) { + private static List findClasses(ClassLoader classLoader, File directory, String packageName, Class type) { List cards = new ArrayList<>(); if (!directory.exists()) { return cards; @@ -92,7 +92,7 @@ public class ClassScanner { for (File file : directory.listFiles()) { if (file.getName().endsWith(".class")) { try { - Class clazz = Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6)); + Class clazz = Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6), true, classLoader); if (type.isAssignableFrom(clazz)) { cards.add(clazz); } @@ -103,7 +103,7 @@ public class ClassScanner { return cards; } - private static List findClassesInJar(File file, List packages, Class type) { + private static List findClassesInJar(ClassLoader classLoader, File file, List packages, Class type) { List cards = new ArrayList<>(); if (!file.exists()) { return cards; @@ -123,7 +123,7 @@ public class ClassScanner { if (packages.contains(packageName)) { Class clazz; try { - clazz = Class.forName(className); + clazz = Class.forName(className, true, classLoader); if (type.isAssignableFrom(clazz)) { cards.add(clazz); }