1
0
mirror of https://github.com/DanilaFe/abacus synced 2026-01-11 17:45:20 +00:00

Change ClassFinder code to be static.

This commit is contained in:
2017-07-28 14:21:43 -07:00
parent 0c07695991
commit 243dc81deb
2 changed files with 40 additions and 48 deletions

View File

@@ -4,48 +4,56 @@ import java.io.File;
import java.io.IOException;
import java.net.URL;
import java.net.URLClassLoader;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.jar.JarEntry;
import java.util.jar.JarFile;
import java.util.stream.Collectors;
/**
* Class that loads plugin classes from their jars.
*/
public class ClassFinder {
ArrayList<Class> classes;
URL[] urls;
public ClassFinder(){
classes = new ArrayList();
public static ArrayList<Class<?>> loadJars(String filePath) throws IOException, ClassNotFoundException {
return loadJars(new File(filePath));
}
public ArrayList<String> addJar(String path) throws IOException, ClassNotFoundException {
//urls = new URL[]{new URL("jar:file:" + path + "!/")};
return addJar(new File(path));
public static ArrayList<Class<?>> loadJars(File pluginFolderPath) throws IOException, ClassNotFoundException {
ArrayList<Class<?>> toReturn = new ArrayList<>();
if(!pluginFolderPath.exists()) return toReturn;
ArrayList<File> files = Files.walk(pluginFolderPath.toPath())
.map(Path::toFile)
.filter(f -> f.getName().endsWith(".jar"))
.collect(Collectors.toCollection(ArrayList::new));
for (File file : files){
toReturn.addAll(loadJar(file));
}
return toReturn;
}
public ArrayList<String> addJar(File jarLocation) throws IOException, ClassNotFoundException {
public static ArrayList<Class<?>> loadJar(String path) throws IOException, ClassNotFoundException {
return loadJar(new File(path));
}
public static ArrayList<Class<?>> loadJar(File jarLocation) throws IOException, ClassNotFoundException {
ArrayList<Class<?>> loadedClasses = new ArrayList<>();
String path = jarLocation.getPath();
urls = new URL[]{new URL("jar:file:" + path + "!/")};
URL[] urls = new URL[]{new URL("jar:file:" + path + "!/")};
URLClassLoader classLoader = URLClassLoader.newInstance(urls);
JarFile jarFolder = new JarFile(jarLocation);
Enumeration jarList = jarFolder.entries();
ArrayList<String> classNames = new ArrayList();
while(jarList.hasMoreElements()){
JarEntry tempJar = (JarEntry)jarList.nextElement();
if(tempJar.getName().endsWith(".class")){
//System.out.println(tempJar.getName());
classNames.add(tempJar.getName());
classes.add(classLoader.loadClass(tempJar.getName().replace('/','.').substring(0,tempJar.getName().length()-6)));
Enumeration jarEntityList = jarFolder.entries();
while (jarEntityList.hasMoreElements()) {
JarEntry jarEntity = (JarEntry) jarEntityList.nextElement();
if (jarEntity.getName().endsWith(".class")) {
loadedClasses.add(classLoader.loadClass(jarEntity.getName().replace('/', '.').substring(0, jarEntity.getName().length() - 6)));
}
}
return classNames;
}
public ArrayList<Class> getClasses(){
return classes;
}
public Class getClass(int number){
return classes.get(number);
}
public void delClasses(){
classes=new ArrayList();
}
public int classCount(){
return classes.size();
return loadedClasses;
}
}