getClassesList can find multiple classes

This commit is contained in:
7u83 2018-12-01 10:32:30 +01:00
parent bdb7ae4992
commit 5c2921fa82

View File

@ -54,8 +54,9 @@ public class XClassLoader {
ArrayList<URL> urllist = new ArrayList<>(); ArrayList<URL> urllist = new ArrayList<>();
URL url; URL url;
if (xpath == null) if (xpath == null) {
return urllist; return urllist;
}
// add xpath to load find classes stored under xpath // add xpath to load find classes stored under xpath
try { try {
@ -75,19 +76,19 @@ public class XClassLoader {
} }
private static Class<?> lClass(ArrayList<URL> urllist, Class<?> check, String class_name) { private static Class lClass(ArrayList<URL> urllist, Class checks[], String class_name) {
URLClassLoader cl; URLClassLoader cl;
URL[] urls = urllist.toArray(new URL[urllist.size()]); URL[] urls = urllist.toArray(new URL[urllist.size()]);
cl = new URLClassLoader(urls); cl = new URLClassLoader(urls);
Class<?> cls; Class cls;
try { try {
cls = cl.loadClass(class_name); cls = cl.loadClass(class_name);
} catch (ClassNotFoundException ex) { } catch (ClassNotFoundException ex) {
Logger.getLogger(XClassLoader.class.getName()).log(Level.SEVERE, null, ex); Logger.getLogger(XClassLoader.class.getName()).log(Level.SEVERE, null, ex);
return null; return null;
} catch (NoClassDefFoundError e){ } catch (NoClassDefFoundError e) {
return null; return null;
} }
@ -102,20 +103,23 @@ public class XClassLoader {
if (Modifier.isInterface(cls.getModifiers())) { if (Modifier.isInterface(cls.getModifiers())) {
return null; return null;
} }
for (Class check : checks) {
if (check.isAssignableFrom(cls)) { if (check.isAssignableFrom(cls)) {
return cls; return cls;
}
}; };
return null; return null;
} }
public static ArrayList<Class<?>> getClassesList(ArrayList<URL> urllist, Class<?> check) { public static ArrayList<Class<?>> getClassesList(ArrayList<URL> urllist, Class<?> checks[]) {
ArrayList<Class<?>> class_list; ArrayList<Class<?>> class_list;
class_list = new ArrayList<>(); class_list = new ArrayList<>();
if (urllist==null) if (urllist == null) {
return class_list; return class_list;
}
for (URL url : urllist) { for (URL url : urllist) {
if (url.getProtocol().equals("file")) { if (url.getProtocol().equals("file")) {
@ -132,10 +136,7 @@ public class XClassLoader {
class_name = class_name.replace("\\", "/"); class_name = class_name.replace("\\", "/");
class_name = class_name.substring(1, class_name.length() - 6).replace('/', '.'); class_name = class_name.substring(1, class_name.length() - 6).replace('/', '.');
System.out.println("Auqa"); Class c = XClassLoader.lClass(urllist, checks, class_name);
System.out.println(class_name);
Class<?> c = XClassLoader.lClass(urllist, check, class_name);
if (null != c) { if (null != c) {
class_list.add(c); class_list.add(c);
} }
@ -147,7 +148,6 @@ public class XClassLoader {
} }
} }
JarInputStream jarstream; JarInputStream jarstream;
try { try {
jarstream = new JarInputStream(url.openConnection().getInputStream()); jarstream = new JarInputStream(url.openConnection().getInputStream());
@ -166,7 +166,7 @@ public class XClassLoader {
if (class_name.endsWith(".class")) { if (class_name.endsWith(".class")) {
class_name = class_name.substring(0, class_name.length() - 6).replace('/', '.'); class_name = class_name.substring(0, class_name.length() - 6).replace('/', '.');
Class<?> c = XClassLoader.lClass(urllist, check, class_name); Class<?> c = XClassLoader.lClass(urllist, checks, class_name);
if (null != c) { if (null != c) {
class_list.add(c); class_list.add(c);
} }
@ -180,12 +180,15 @@ public class XClassLoader {
return class_list; return class_list;
} }
public static ArrayList<Class<?>> getClassesList(ArrayList<URL> urllist, Class<?> check){
return XClassLoader.getClassesList(urllist,new Class<?>[] {check} );
}
/** /**
* *
* @param pathlist * @param pathlist
* @return * @return
*/ */
/* public static ArrayList<Class<?>> getClasses(ArrayList<String> pathlist) { /* public static ArrayList<Class<?>> getClasses(ArrayList<String> pathlist) {
ArrayList<Class<?>> result = new ArrayList<>(); ArrayList<Class<?>> result = new ArrayList<>();
@ -270,10 +273,8 @@ public class XClassLoader {
} }
*/ */
/*
/*
private static Class<?> checkClass(String directory, String class_name) { private static Class<?> checkClass(String directory, String class_name) {
if (class_name == null) { if (class_name == null) {
@ -338,5 +339,5 @@ public class XClassLoader {
} }
} }
*/ */
} }