mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
forget negative plugin class loading results (IDEA-148894 Plugin errors wrongly reported as caused by another plugin)
This commit is contained in:
@@ -15,11 +15,8 @@
|
||||
*/
|
||||
package com.intellij.ide.plugins;
|
||||
|
||||
import com.intellij.ide.plugins.cl.PluginClassLoader;
|
||||
import com.intellij.openapi.extensions.PluginId;
|
||||
import gnu.trove.THashMap;
|
||||
import gnu.trove.TObjectIntHashMap;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
|
||||
@@ -28,31 +25,14 @@ import java.util.*;
|
||||
*/
|
||||
class PluginClassCache {
|
||||
private static final Object ourLock = new Object();
|
||||
private final Map<String, PluginId> myMissingClasses = new THashMap<String, PluginId>();
|
||||
private final TObjectIntHashMap<PluginId> myClassCounts = new TObjectIntHashMap<PluginId>();
|
||||
|
||||
public void addPluginClass(String className, PluginId pluginId, boolean loaded) {
|
||||
public void addPluginClass(PluginId pluginId) {
|
||||
synchronized(ourLock) {
|
||||
if (loaded) {
|
||||
myMissingClasses.remove(className);
|
||||
myClassCounts.put(pluginId, myClassCounts.get(pluginId) + 1);
|
||||
} else {
|
||||
myMissingClasses.put(className, pluginId);
|
||||
}
|
||||
myClassCounts.put(pluginId, myClassCounts.get(pluginId) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PluginId findLoadingPlugin(String className) {
|
||||
for (IdeaPluginDescriptor descriptor : PluginManagerCore.getPlugins()) {
|
||||
ClassLoader loader = descriptor.getPluginClassLoader();
|
||||
if (loader instanceof PluginClassLoader && ((PluginClassLoader)loader).hasLoadedClass(className)) {
|
||||
return descriptor.getPluginId();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public void dumpPluginClassStatistics() {
|
||||
if (!Boolean.valueOf(System.getProperty("idea.is.internal")).booleanValue()) return;
|
||||
|
||||
@@ -71,16 +51,4 @@ class PluginClassCache {
|
||||
PluginManagerCore.getLogger().info(id + " loaded " + myClassCounts.get(id) + " classes");
|
||||
}
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public PluginId getPluginByClassName(String className) {
|
||||
synchronized (ourLock) {
|
||||
PluginId id = myMissingClasses.get(className);
|
||||
if (id != null) {
|
||||
return id;
|
||||
}
|
||||
}
|
||||
return findLoadingPlugin(className);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -299,13 +299,19 @@ public class PluginManagerCore {
|
||||
return true;
|
||||
}
|
||||
|
||||
public static void addPluginClass(@NotNull String className, PluginId pluginId, boolean loaded) {
|
||||
ourPluginClasses.addPluginClass(className, pluginId, loaded);
|
||||
public static void addPluginClass(PluginId pluginId) {
|
||||
ourPluginClasses.addPluginClass(pluginId);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static PluginId getPluginByClassName(@NotNull String className) {
|
||||
return ourPluginClasses.getPluginByClassName(className);
|
||||
for (IdeaPluginDescriptor descriptor : getPlugins()) {
|
||||
ClassLoader loader = descriptor.getPluginClassLoader();
|
||||
if (loader instanceof PluginClassLoader && ((PluginClassLoader)loader).hasLoadedClass(className)) {
|
||||
return descriptor.getPluginId();
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static void dumpPluginClassStatistics() {
|
||||
|
||||
@@ -83,7 +83,6 @@ public class PluginClassLoader extends UrlClassLoader {
|
||||
return c;
|
||||
}
|
||||
|
||||
PluginManagerCore.addPluginClass(name, myPluginId, false);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -126,7 +125,7 @@ public class PluginClassLoader extends UrlClassLoader {
|
||||
throw new PluginException(e, myPluginId);
|
||||
}
|
||||
if (c != null) {
|
||||
PluginManagerCore.addPluginClass(c.getName(), myPluginId, true);
|
||||
PluginManagerCore.addPluginClass(myPluginId);
|
||||
}
|
||||
|
||||
return c;
|
||||
|
||||
Reference in New Issue
Block a user