From 8be8400161c49edb77006664eb314a1e938ea02a Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Wed, 2 Nov 2011 11:08:28 +0300 Subject: [PATCH] Revert: Improve class loading in GroovyMethodInfo. (cf9bf0e) --- .../groovy/util/ClassInstanceCache.java | 33 +++++++++++++++---- 1 file changed, 27 insertions(+), 6 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/util/ClassInstanceCache.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/util/ClassInstanceCache.java index 7a9f0554e661..8cad6bc6e045 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/util/ClassInstanceCache.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/util/ClassInstanceCache.java @@ -1,5 +1,7 @@ package org.jetbrains.plugins.groovy.util; +import com.intellij.ide.plugins.IdeaPluginDescriptor; +import com.intellij.ide.plugins.PluginManager; import com.intellij.util.containers.ConcurrentHashMap; import org.jetbrains.annotations.NotNull; @@ -13,16 +15,34 @@ public class ClassInstanceCache { private ClassInstanceCache() { } + private static Object createInstance(@NotNull String className) { + try { + try { + return Class.forName(className).newInstance(); + } + catch (ClassNotFoundException e) { + for (IdeaPluginDescriptor descriptor : PluginManager.getPlugins()) { + try { + return descriptor.getPluginClassLoader().loadClass(className).newInstance(); + } + catch (ClassNotFoundException ignored) { + + } + } + + throw new RuntimeException("Class not found: " + className); + } + } + catch (Exception e) { + throw new RuntimeException(e); + } + } + @SuppressWarnings("unchecked") public static T getInstance(@NotNull String className, ClassLoader classLoader) { Object res = CACHE.get(className); if (res == null) { - try { - res = classLoader.loadClass(className).newInstance(); - } - catch (Exception e) { - throw new RuntimeException(e); - } + res = createInstance(className); Object oldValue = CACHE.putIfAbsent(className, res); if (oldValue != null) { @@ -32,4 +52,5 @@ public class ClassInstanceCache { return (T)res; } + }