From 8b2d383aba4e2d0589cd770cefde18589ed4e0b8 Mon Sep 17 00:00:00 2001 From: 7u83 <7u83@mail.ru> Date: Sat, 1 Dec 2018 11:36:40 +0100 Subject: [PATCH] Implemented the ClassCache class --- src/opensesim/util/XClassLoader.java | 48 +++++++++++++++++++++++++--- 1 file changed, 44 insertions(+), 4 deletions(-) diff --git a/src/opensesim/util/XClassLoader.java b/src/opensesim/util/XClassLoader.java index 11c2de9..a2ae626 100644 --- a/src/opensesim/util/XClassLoader.java +++ b/src/opensesim/util/XClassLoader.java @@ -32,6 +32,10 @@ import java.net.MalformedURLException; import java.net.URL; import java.net.URLClassLoader; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; import java.util.jar.JarEntry; import java.util.jar.JarInputStream; import java.util.logging.Level; @@ -112,9 +116,9 @@ public class XClassLoader { return null; } - public static ArrayList> getClassesList(ArrayList urllist, Class checks[]) { + public static ArrayList getClassesList(ArrayList urllist, Class checks[]) { - ArrayList> class_list; + ArrayList class_list; class_list = new ArrayList<>(); if (urllist == null) { @@ -180,8 +184,44 @@ public class XClassLoader { return class_list; } - public static ArrayList> getClassesList(ArrayList urllist, Class check){ - return XClassLoader.getClassesList(urllist,new Class[] {check} ); + public static ArrayList getClassesList(ArrayList urllist, Class check){ + return XClassLoader.getClassesList(urllist,new Class[] {check} ); + } + + + public static class ClassCache { + HashMap byName; + HashMap > byInstanceOf; + + public ClassCache (ArrayList urllist,Class[] classes){ + byName=new HashMap<>(); + byInstanceOf=new HashMap<>(); + + ArrayList results = getClassesList(urllist,classes); + for (Class result:results){ + for (Class c:classes){ + if (c.isAssignableFrom(result)) { + HashSet h; + h = byInstanceOf.get(c); + if (h==null){ + h=new HashSet<>(); + byInstanceOf.put(c, h); + } + h.add(result); + } + } + byName.put(result.getName(), result); + } + } + + public Collection getClassCollection(Class cls){ + HashSet h; + h=byInstanceOf.get(cls); + if (h==null) + return h; + return Collections.unmodifiableCollection(h); + } + } /** *