fix(gui): don't init already loaded plugins while collecting options (#2727)
This commit is contained in:
+14
-10
@@ -31,7 +31,7 @@ public class JadxExternalPluginsLoader implements JadxPluginLoader {
|
||||
public List<JadxPlugin> load() {
|
||||
close();
|
||||
long start = System.currentTimeMillis();
|
||||
Map<Class<? extends JadxPlugin>, JadxPlugin> map = new HashMap<>();
|
||||
Map<String, JadxPlugin> map = new HashMap<>();
|
||||
loadFromClsLoader(map, thisClassLoader());
|
||||
loadInstalledPlugins(map);
|
||||
|
||||
@@ -45,7 +45,7 @@ public class JadxExternalPluginsLoader implements JadxPluginLoader {
|
||||
}
|
||||
|
||||
public JadxPlugin loadFromJar(Path jar) {
|
||||
Map<Class<? extends JadxPlugin>, JadxPlugin> map = new HashMap<>();
|
||||
Map<String, JadxPlugin> map = new HashMap<>();
|
||||
loadFromJar(map, jar);
|
||||
int loaded = map.size();
|
||||
if (loaded == 0) {
|
||||
@@ -59,22 +59,26 @@ public class JadxExternalPluginsLoader implements JadxPluginLoader {
|
||||
|
||||
}
|
||||
|
||||
private void loadFromClsLoader(Map<Class<? extends JadxPlugin>, JadxPlugin> map, ClassLoader classLoader) {
|
||||
ServiceLoader.load(JadxPlugin.class, classLoader)
|
||||
.stream()
|
||||
.filter(p -> p.type().getClassLoader() == classLoader)
|
||||
.filter(p -> !map.containsKey(p.type()))
|
||||
.forEach(p -> map.put(p.type(), p.get()));
|
||||
private void loadFromClsLoader(Map<String, JadxPlugin> map, ClassLoader classLoader) {
|
||||
ServiceLoader<JadxPlugin> serviceLoader = ServiceLoader.load(JadxPlugin.class, classLoader);
|
||||
for (ServiceLoader.Provider<JadxPlugin> provider : serviceLoader.stream().collect(Collectors.toList())) {
|
||||
Class<? extends JadxPlugin> pluginClass = provider.type();
|
||||
String clsName = pluginClass.getName();
|
||||
if (!map.containsKey(clsName)
|
||||
&& pluginClass.getClassLoader() == classLoader) {
|
||||
map.put(clsName, provider.get());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void loadInstalledPlugins(Map<Class<? extends JadxPlugin>, JadxPlugin> map) {
|
||||
private void loadInstalledPlugins(Map<String, JadxPlugin> map) {
|
||||
List<Path> jars = JadxPluginsTools.getInstance().getEnabledPluginJars();
|
||||
for (Path jar : jars) {
|
||||
loadFromJar(map, jar);
|
||||
}
|
||||
}
|
||||
|
||||
private void loadFromJar(Map<Class<? extends JadxPlugin>, JadxPlugin> map, Path jar) {
|
||||
private void loadFromJar(Map<String, JadxPlugin> map, Path jar) {
|
||||
try {
|
||||
File jarFile = jar.toFile();
|
||||
String clsLoaderName = JADX_PLUGIN_CLASSLOADER_PREFIX + jarFile.getName();
|
||||
|
||||
Reference in New Issue
Block a user