mirror of
https://github.com/magefree/mage.git
synced 2025-12-22 11:32:00 -08:00
Make ClassScanner not load inner classes.
This commit is contained in:
parent
51b9d5ba38
commit
e606deded8
1 changed files with 18 additions and 24 deletions
|
|
@ -46,6 +46,17 @@ import java.util.jar.JarInputStream;
|
||||||
*/
|
*/
|
||||||
public class ClassScanner {
|
public class ClassScanner {
|
||||||
|
|
||||||
|
private static void checkClassForInclusion(List<Class> cards, Class type, String name, ClassLoader cl) {
|
||||||
|
try {
|
||||||
|
Class clazz = Class.forName(name, true, cl);
|
||||||
|
if (clazz.getEnclosingClass() == null && type.isAssignableFrom(clazz)) {
|
||||||
|
cards.add(clazz);
|
||||||
|
}
|
||||||
|
} catch (ClassNotFoundException ex) {
|
||||||
|
// ignored
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static List<Class> findClasses(ClassLoader classLoader, List<String> packages, Class<?> type) {
|
public static List<Class> findClasses(ClassLoader classLoader, List<String> packages, Class<?> type) {
|
||||||
List<Class> cards = new ArrayList<>();
|
List<Class> cards = new ArrayList<>();
|
||||||
try {
|
try {
|
||||||
|
|
@ -85,19 +96,12 @@ public class ClassScanner {
|
||||||
|
|
||||||
private static List<Class> findClasses(ClassLoader classLoader, File directory, String packageName, Class<?> type) {
|
private static List<Class> findClasses(ClassLoader classLoader, File directory, String packageName, Class<?> type) {
|
||||||
List<Class> cards = new ArrayList<>();
|
List<Class> cards = new ArrayList<>();
|
||||||
if (!directory.exists()) {
|
if (!directory.exists()) return cards;
|
||||||
return cards;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (File file : directory.listFiles()) {
|
for (File file : directory.listFiles()) {
|
||||||
if (file.getName().endsWith(".class")) {
|
if (file.getName().endsWith(".class")) {
|
||||||
try {
|
String name = packageName + '.' + file.getName().substring(0, file.getName().length() - 6);
|
||||||
Class<?> clazz = Class.forName(packageName + '.' + file.getName().substring(0, file.getName().length() - 6), true, classLoader);
|
checkClassForInclusion(cards, type, name, classLoader);
|
||||||
if (type.isAssignableFrom(clazz)) {
|
|
||||||
cards.add(clazz);
|
|
||||||
}
|
|
||||||
} catch (ClassNotFoundException ex) {
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cards;
|
return cards;
|
||||||
|
|
@ -105,9 +109,8 @@ public class ClassScanner {
|
||||||
|
|
||||||
private static List<Class> findClassesInJar(ClassLoader classLoader, File file, List<String> packages, Class<?> type) {
|
private static List<Class> findClassesInJar(ClassLoader classLoader, File file, List<String> packages, Class<?> type) {
|
||||||
List<Class> cards = new ArrayList<>();
|
List<Class> cards = new ArrayList<>();
|
||||||
if (!file.exists()) {
|
if (!file.exists()) return cards;
|
||||||
return cards;
|
|
||||||
}
|
|
||||||
JarInputStream jarFile = null;
|
JarInputStream jarFile = null;
|
||||||
try {
|
try {
|
||||||
jarFile = new JarInputStream(new FileInputStream(file));
|
jarFile = new JarInputStream(new FileInputStream(file));
|
||||||
|
|
@ -120,22 +123,13 @@ public class ClassScanner {
|
||||||
String className = jarEntry.getName().replace(".class", "").replace('/', '.');
|
String className = jarEntry.getName().replace(".class", "").replace('/', '.');
|
||||||
int packageNameEnd = className.lastIndexOf('.');
|
int packageNameEnd = className.lastIndexOf('.');
|
||||||
String packageName = packageNameEnd != -1 ? className.substring(0, packageNameEnd) : "";
|
String packageName = packageNameEnd != -1 ? className.substring(0, packageNameEnd) : "";
|
||||||
if (packages.contains(packageName)) {
|
if (packages.contains(packageName)) checkClassForInclusion(cards, type, className, classLoader);
|
||||||
Class<?> clazz;
|
|
||||||
try {
|
|
||||||
clazz = Class.forName(className, true, classLoader);
|
|
||||||
if (type.isAssignableFrom(clazz)) {
|
|
||||||
cards.add(clazz);
|
|
||||||
}
|
|
||||||
} catch (ClassNotFoundException ex) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
} finally {
|
} finally {
|
||||||
try {
|
try {
|
||||||
jarFile.close();
|
if(jarFile != null) jarFile.close();
|
||||||
} catch (IOException ex) {
|
} catch (IOException ex) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue