forget negative plugin class loading results (IDEA-148894 Plugin errors wrongly reported as caused by another plugin)

This commit is contained in:
peter
2015-12-04 12:29:36 +01:00
parent 3b8539b73c
commit 9bca6ed8b1
3 changed files with 12 additions and 39 deletions
@@ -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;