diff --git a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ErrorFixExtensionPoint.java b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ErrorFixExtensionPoint.java index f1f3aa129676..f221f42a8798 100644 --- a/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ErrorFixExtensionPoint.java +++ b/java/java-analysis-impl/src/com/intellij/codeInsight/daemon/impl/analysis/ErrorFixExtensionPoint.java @@ -18,6 +18,7 @@ package com.intellij.codeInsight.daemon.impl.analysis; import com.intellij.codeInsight.daemon.impl.HighlightInfo; import com.intellij.codeInsight.daemon.impl.quickfix.QuickFixAction; import com.intellij.codeInsight.intention.IntentionAction; +import com.intellij.diagnostic.PluginException; import com.intellij.openapi.extensions.AbstractExtensionPointBean; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.progress.ProcessCanceledException; @@ -47,16 +48,16 @@ public class ErrorFixExtensionPoint extends AbstractExtensionPointBean { IntentionAction instantiate(PsiElement context) { try { - return findClass(implementationClass).asSubclass(IntentionAction.class).getConstructor(PsiElement.class).newInstance(context); + return findExtensionClass(implementationClass).asSubclass(IntentionAction.class).getConstructor(PsiElement.class).newInstance(context); } catch (InvocationTargetException e) { if(e.getCause() instanceof ProcessCanceledException) { throw ((ProcessCanceledException)e.getCause()); } - throw new RuntimeException("Error instantiating quick-fix " + implementationClass + " (error code: " + errorCode + ")", e.getCause()); + throw new PluginException("Error instantiating quick-fix " + implementationClass + " (error code: " + errorCode + ")", e.getCause(), getPluginId()); } - catch (InstantiationException | IllegalAccessException | NoSuchMethodException | ClassNotFoundException e) { - throw new RuntimeException("Error instantiating quick-fix " + implementationClass + " (error code: " + errorCode + ")", e); + catch (InstantiationException | IllegalAccessException | NoSuchMethodException e) { + throw new PluginException("Error instantiating quick-fix " + implementationClass + " (error code: " + errorCode + ")", e, getPluginId()); } } diff --git a/platform/analysis-api/src/com/intellij/codeInspection/InspectionEP.java b/platform/analysis-api/src/com/intellij/codeInspection/InspectionEP.java index 618df9a51d22..bdd549f49811 100644 --- a/platform/analysis-api/src/com/intellij/codeInspection/InspectionEP.java +++ b/platform/analysis-api/src/com/intellij/codeInspection/InspectionEP.java @@ -191,14 +191,9 @@ public class InspectionEP extends LanguageExtensionPoint implements InspectionPr @NotNull public InspectionProfileEntry instantiateTool() { - try { - final InspectionProfileEntry entry = instantiate(implementationClass, ApplicationManager.getApplication().getPicoContainer()); - entry.myNameProvider = this; - return entry; - } - catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } + final InspectionProfileEntry entry = instantiateExtension(implementationClass, ApplicationManager.getApplication().getPicoContainer()); + entry.myNameProvider = this; + return entry; } @Override diff --git a/platform/built-in-server/src/org/jetbrains/io/jsonRpc/JsonRpcDomainBean.java b/platform/built-in-server/src/org/jetbrains/io/jsonRpc/JsonRpcDomainBean.java index 8f3f2076ec98..af9fc5ff2efb 100644 --- a/platform/built-in-server/src/org/jetbrains/io/jsonRpc/JsonRpcDomainBean.java +++ b/platform/built-in-server/src/org/jetbrains/io/jsonRpc/JsonRpcDomainBean.java @@ -37,17 +37,12 @@ public class JsonRpcDomainBean extends AbstractExtensionPointBean { @NotNull @Override protected Object compute() { - try { - if (service == null) { - Class aClass = findClass(implementation); - return asInstance ? instantiate(aClass, ApplicationManager.getApplication().getPicoContainer()) : aClass; - } - else { - return ServiceManager.getService(findClass(service)); - } + if (service == null) { + Class aClass = findExtensionClass(implementation); + return asInstance ? instantiate(aClass, ApplicationManager.getApplication().getPicoContainer()) : aClass; } - catch (ClassNotFoundException e) { - throw new RuntimeException(e); + else { + return ServiceManager.getService(findExtensionClass(service)); } } }; diff --git a/platform/core-api/src/com/intellij/openapi/extensions/CustomLoadingExtensionPointBean.java b/platform/core-api/src/com/intellij/openapi/extensions/CustomLoadingExtensionPointBean.java index bf677a73d625..88da67de84f0 100644 --- a/platform/core-api/src/com/intellij/openapi/extensions/CustomLoadingExtensionPointBean.java +++ b/platform/core-api/src/com/intellij/openapi/extensions/CustomLoadingExtensionPointBean.java @@ -22,13 +22,7 @@ public class CustomLoadingExtensionPointBean extends AbstractExtensionPointBean instance = ExtensionInstantiator.instantiateWithPicoContainerOnlyIfNeeded(className, picoContainer, myPluginDescriptor); } else { - ExtensionFactory factory; - try { - factory = instantiate(factoryClass, picoContainer); - } - catch (ClassNotFoundException e) { - throw new PluginException(e, myPluginDescriptor == null ? null : myPluginDescriptor.getPluginId()); - } + ExtensionFactory factory = instantiateExtension(factoryClass, picoContainer); //noinspection unchecked instance = (T)factory.createInstance(factoryArgument, className); } diff --git a/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeExtensionPoint.java b/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeExtensionPoint.java index 00682ebdd4ac..32dc3e8d7b29 100644 --- a/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeExtensionPoint.java +++ b/platform/core-api/src/com/intellij/openapi/fileTypes/FileTypeExtensionPoint.java @@ -36,7 +36,7 @@ public class FileTypeExtensionPoint extends AbstractExtensionPointBean implem private final LazyInstance myHandler = new LazyInstance() { @Override protected Class getInstanceClass() throws ClassNotFoundException { - return findClass(implementationClass); + return findExtensionClass(implementationClass); } }; diff --git a/platform/core-api/src/com/intellij/openapi/util/ClassExtensionPoint.java b/platform/core-api/src/com/intellij/openapi/util/ClassExtensionPoint.java index 267741402f9d..59328f44369d 100644 --- a/platform/core-api/src/com/intellij/openapi/util/ClassExtensionPoint.java +++ b/platform/core-api/src/com/intellij/openapi/util/ClassExtensionPoint.java @@ -34,7 +34,7 @@ public class ClassExtensionPoint extends AbstractExtensionPointBean implement private final LazyInstance myHandler = new LazyInstance() { @Override protected Class getInstanceClass() throws ClassNotFoundException { - return findClass(implementationClass); + return findExtensionClass(implementationClass); } }; diff --git a/platform/core-api/src/com/intellij/psi/PsiReferenceProviderBean.java b/platform/core-api/src/com/intellij/psi/PsiReferenceProviderBean.java index 3a60292c6138..7b8e2a1d84b7 100644 --- a/platform/core-api/src/com/intellij/psi/PsiReferenceProviderBean.java +++ b/platform/core-api/src/com/intellij/psi/PsiReferenceProviderBean.java @@ -53,9 +53,9 @@ public class PsiReferenceProviderBean extends AbstractExtensionPointBean impleme public PsiReferenceProvider instantiate() { try { - return (PsiReferenceProvider)instantiate(className, ApplicationManager.getApplication().getPicoContainer()); + return (PsiReferenceProvider)instantiateClass(className, ApplicationManager.getApplication().getPicoContainer()); } - catch (ClassNotFoundException e) { + catch (Exception e) { LOG.error(e); } return null; diff --git a/platform/core-api/src/com/intellij/psi/stubs/StubElementTypeHolderEP.java b/platform/core-api/src/com/intellij/psi/stubs/StubElementTypeHolderEP.java index 8a133cce8238..ddafeacdba4a 100644 --- a/platform/core-api/src/com/intellij/psi/stubs/StubElementTypeHolderEP.java +++ b/platform/core-api/src/com/intellij/psi/stubs/StubElementTypeHolderEP.java @@ -16,6 +16,7 @@ package com.intellij.psi.stubs; +import com.intellij.diagnostic.PluginException; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.AbstractExtensionPointBean; import com.intellij.openapi.extensions.ExtensionPointName; @@ -76,11 +77,11 @@ public class StubElementTypeHolderEP extends AbstractExtensionPointBean { } return result; } else { - findClass(holderClass); + findExtensionClass(holderClass); } } catch (ClassNotFoundException e) { - LOG.error(e); + LOG.error(new PluginException(e, getPluginId())); } return Collections.emptyList(); } @@ -91,12 +92,7 @@ public class StubElementTypeHolderEP extends AbstractExtensionPointBean { */ @Deprecated public void initialize() { - try { - findClass(holderClass); - } - catch (ClassNotFoundException e) { - LOG.error(e); - } + findClassNoExceptions(holderClass); } @Override diff --git a/platform/core-api/src/com/intellij/util/KeyedLazyInstanceEP.java b/platform/core-api/src/com/intellij/util/KeyedLazyInstanceEP.java index e83d3f164cd9..c5c835d86cc8 100644 --- a/platform/core-api/src/com/intellij/util/KeyedLazyInstanceEP.java +++ b/platform/core-api/src/com/intellij/util/KeyedLazyInstanceEP.java @@ -34,8 +34,8 @@ public class KeyedLazyInstanceEP extends AbstractExtensionPointBean implement private final LazyInstance myHandler = new LazyInstance() { @Override - protected Class getInstanceClass() throws ClassNotFoundException { - return findClass(implementationClass); + protected Class getInstanceClass() { + return findExtensionClass(implementationClass); } }; diff --git a/platform/extensions/src/com/intellij/openapi/extensions/AbstractExtensionPointBean.java b/platform/extensions/src/com/intellij/openapi/extensions/AbstractExtensionPointBean.java index af802dac8d30..ef9f6ff8e3ba 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/AbstractExtensionPointBean.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/AbstractExtensionPointBean.java @@ -29,11 +29,29 @@ public abstract class AbstractExtensionPointBean implements PluginAware { return myPluginDescriptor == null ? null : myPluginDescriptor.getPluginId(); } + /** + * @deprecated use {@link #findExtensionClass(String)} instead. It'll throw {@link ExtensionInstantiationException} instead of + * {@link ClassNotFoundException}, which contains information about the plugin which registers the problematic extension so error reporters + * will be able to report such exception as a plugin problem, not core problem. Also it isn't a checked exception so you won't need to wrap + * it to unchecked exception in your code. + */ + @SuppressWarnings("DeprecatedIsStillUsed") + @Deprecated @NotNull public final Class findClass(@NotNull String className) throws ClassNotFoundException { return findClass(className, myPluginDescriptor); } + @NotNull + public final Class findExtensionClass(@NotNull String className) { + try { + return findClass(className, myPluginDescriptor); + } + catch (ClassNotFoundException e) { + throw new ExtensionInstantiationException(e, myPluginDescriptor); + } + } + @NotNull public static Class findClass(@NotNull String className, @Nullable PluginDescriptor pluginDescriptor) throws ClassNotFoundException { ClassLoader classLoader = pluginDescriptor == null ? AbstractExtensionPointBean.class.getClassLoader() : pluginDescriptor.getPluginClassLoader(); @@ -47,7 +65,7 @@ public abstract class AbstractExtensionPointBean implements PluginAware { return findClass(className); } catch (ClassNotFoundException e) { - LOG.error("Problem loading class " + className + " from plugin " + myPluginDescriptor, e); + LOG.error(new ExtensionInstantiationException(e, myPluginDescriptor)); return null; } } @@ -57,11 +75,23 @@ public abstract class AbstractExtensionPointBean implements PluginAware { return myPluginDescriptor == null ? getClass().getClassLoader() : myPluginDescriptor.getPluginClassLoader(); } + /** + * @deprecated use {@link #instantiateClass(String, PicoContainer)} instead. It'll throw {@link ExtensionInstantiationException} instead of + * {@link ClassNotFoundException}, which contains information about the plugin which registers the problematic extension so error reporters + * will be able to report such exception as a plugin problem, not core problem. Also it isn't a checked exception so you won't need to wrap + * it to unchecked exception in your code. + */ + @Deprecated @NotNull public final T instantiate(@NotNull String className, @NotNull PicoContainer container) throws ClassNotFoundException { return instantiate(findClass(className), container); } + @NotNull + public final T instantiateClass(@NotNull String className, @NotNull PicoContainer container) { + return instantiate(findExtensionClass(className), container); + } + @NotNull public static T instantiate(@NotNull Class aClass, @NotNull PicoContainer container) { return instantiate(aClass, container, true); diff --git a/platform/extensions/src/com/intellij/openapi/util/KeyedExtensionFactory.java b/platform/extensions/src/com/intellij/openapi/util/KeyedExtensionFactory.java index 08313c7d5fdb..170a591cf806 100644 --- a/platform/extensions/src/com/intellij/openapi/util/KeyedExtensionFactory.java +++ b/platform/extensions/src/com/intellij/openapi/util/KeyedExtensionFactory.java @@ -66,9 +66,9 @@ public abstract class KeyedExtensionFactory { } try { - return (T)epBean.instantiate(epBean.implementationClass, picoContainer); + return (T)epBean.instantiateClass(epBean.implementationClass, picoContainer); } - catch (ProcessCanceledException e) { + catch (ProcessCanceledException | ExtensionInstantiationException e) { throw e; } catch (Exception e) { @@ -94,10 +94,10 @@ public abstract class KeyedExtensionFactory { if (Comparing.strEqual(epBean.key, key, true)) { try { if (epBean.implementationClass != null) { - result = epBean.instantiate(epBean.implementationClass, myPicoContainer); + result = epBean.instantiateClass(epBean.implementationClass, myPicoContainer); } else { - Object factory = epBean.instantiate(epBean.factoryClass, myPicoContainer); + Object factory = epBean.instantiateClass(epBean.factoryClass, myPicoContainer); result = method.invoke(factory, args); } if (result != null) { @@ -109,6 +109,9 @@ public abstract class KeyedExtensionFactory { if (t instanceof ControlFlowException && t instanceof RuntimeException) throw (RuntimeException)t; throw new ExtensionInstantiationException(e, epBean.getPluginDescriptor()); } + catch (ExtensionInstantiationException e) { + throw e; + } catch (RuntimeException e) { if (e instanceof ControlFlowException) { throw e; diff --git a/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilderFactory.java b/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilderFactory.java index 813d134ebd4e..a55fe876ad40 100644 --- a/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilderFactory.java +++ b/platform/lang-api/src/com/intellij/ide/util/projectWizard/ModuleBuilderFactory.java @@ -28,13 +28,6 @@ public class ModuleBuilderFactory extends AbstractExtensionPointBean { public String builderClass; public ModuleBuilder createBuilder() { - try { - return instantiate(builderClass, ApplicationManager.getApplication().getPicoContainer()); - } - catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } + return instantiateClass(builderClass, ApplicationManager.getApplication().getPicoContainer()); } - - } diff --git a/platform/lang-api/src/com/intellij/lang/cacheBuilder/CacheBuilderEP.java b/platform/lang-api/src/com/intellij/lang/cacheBuilder/CacheBuilderEP.java index 71d1503f6924..420b5a053c38 100644 --- a/platform/lang-api/src/com/intellij/lang/cacheBuilder/CacheBuilderEP.java +++ b/platform/lang-api/src/com/intellij/lang/cacheBuilder/CacheBuilderEP.java @@ -16,6 +16,7 @@ package com.intellij.lang.cacheBuilder; +import com.intellij.diagnostic.PluginException; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.AbstractExtensionPointBean; import com.intellij.openapi.extensions.ExtensionPointName; @@ -44,12 +45,12 @@ public class CacheBuilderEP extends AbstractExtensionPointBean { try { Class aClass = myCachedClass; if (aClass == null) { - myCachedClass = aClass = findClass(wordsScannerClass); + myCachedClass = aClass = findExtensionClass(wordsScannerClass); } return aClass.newInstance(); } catch (Exception e) { - LOG.error(e); + LOG.error(new PluginException(e, getPluginId())); return null; } } diff --git a/platform/lang-api/src/com/intellij/openapi/module/ModuleTypeEP.java b/platform/lang-api/src/com/intellij/openapi/module/ModuleTypeEP.java index 79b97fc50658..c7b2b69ea12e 100644 --- a/platform/lang-api/src/com/intellij/openapi/module/ModuleTypeEP.java +++ b/platform/lang-api/src/com/intellij/openapi/module/ModuleTypeEP.java @@ -44,7 +44,7 @@ public class ModuleTypeEP extends AbstractExtensionPointBean { public ModuleType getModuleType() { if (myModuleType == null) { try { - myModuleType = instantiate(implementationClass, ApplicationManager.getApplication().getPicoContainer()); + myModuleType = instantiateClass(implementationClass, ApplicationManager.getApplication().getPicoContainer()); } catch(Exception e) { LOG.error(e); diff --git a/platform/lang-api/src/com/intellij/psi/WeigherExtensionPoint.java b/platform/lang-api/src/com/intellij/psi/WeigherExtensionPoint.java index ae784a5339e5..ce4c48bdb0b4 100644 --- a/platform/lang-api/src/com/intellij/psi/WeigherExtensionPoint.java +++ b/platform/lang-api/src/com/intellij/psi/WeigherExtensionPoint.java @@ -44,15 +44,10 @@ public class WeigherExtensionPoint extends AbstractExtensionPointBean implements @Override @NotNull protected final Weigher compute() { - try { - Class tClass = findClass(implementationClass); - final Weigher weigher = ReflectionUtil.newInstance(tClass); - weigher.setDebugName(id); - return weigher; - } - catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } + Class tClass = findExtensionClass(implementationClass); + final Weigher weigher = ReflectionUtil.newInstance(tClass); + weigher.setDebugName(id); + return weigher; } }; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionDataEP.java b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionDataEP.java index 2bbcbfd42c34..a1383a8eea7f 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionDataEP.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/completion/CompletionDataEP.java @@ -38,8 +38,8 @@ public class CompletionDataEP extends AbstractExtensionPointBean { private final LazyInstance myHandler = new LazyInstance() { @Override - protected Class getInstanceClass() throws ClassNotFoundException { - return findClass(className); + protected Class getInstanceClass() { + return findExtensionClass(className); } }; diff --git a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/QuoteHandlerEP.java b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/QuoteHandlerEP.java index 32043d4ef0b9..05ba9adafa82 100644 --- a/platform/lang-impl/src/com/intellij/codeInsight/editorActions/QuoteHandlerEP.java +++ b/platform/lang-impl/src/com/intellij/codeInsight/editorActions/QuoteHandlerEP.java @@ -20,8 +20,8 @@ public class QuoteHandlerEP extends AbstractExtensionPointBean { private final LazyInstance myHandler = new LazyInstance() { @Override - protected Class getInstanceClass() throws ClassNotFoundException { - return findClass(className); + protected Class getInstanceClass() { + return findExtensionClass(className); } }; diff --git a/platform/lang-impl/src/com/intellij/ide/actions/CreateDirectoryCompletionContributorEP.java b/platform/lang-impl/src/com/intellij/ide/actions/CreateDirectoryCompletionContributorEP.java index 3c749df28e89..678a4713f68f 100644 --- a/platform/lang-impl/src/com/intellij/ide/actions/CreateDirectoryCompletionContributorEP.java +++ b/platform/lang-impl/src/com/intellij/ide/actions/CreateDirectoryCompletionContributorEP.java @@ -14,8 +14,8 @@ public class CreateDirectoryCompletionContributorEP extends AbstractExtensionPoi private final LazyInstance myHandler = new LazyInstance() { @Override - protected Class getInstanceClass() throws ClassNotFoundException { - return findClass(implementationClass); + protected Class getInstanceClass() { + return findExtensionClass(implementationClass); } }; diff --git a/platform/lang-impl/src/com/intellij/patterns/compiler/PatternClassBean.java b/platform/lang-impl/src/com/intellij/patterns/compiler/PatternClassBean.java index afeab90ddfa1..c8239fe12c00 100644 --- a/platform/lang-impl/src/com/intellij/patterns/compiler/PatternClassBean.java +++ b/platform/lang-impl/src/com/intellij/patterns/compiler/PatternClassBean.java @@ -39,13 +39,7 @@ public class PatternClassBean extends AbstractExtensionPointBean { } public Class getPatternClass() { - try { - return findClass(className); - } - catch (ClassNotFoundException e) { - LOG.error(e); - } - return null; + return findClassNoExceptions(className); } } diff --git a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorActionHandlerBean.java b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorActionHandlerBean.java index 6c29702f126c..7c64fcab7819 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorActionHandlerBean.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorActionHandlerBean.java @@ -29,7 +29,7 @@ public final class EditorActionHandlerBean extends AbstractExtensionPointBean { try { DefaultPicoContainer container = new DefaultPicoContainer(ApplicationManager.getApplication().getPicoContainer()); container.registerComponentInstance(originalHandler); - myHandler = instantiate(implementationClass, container); + myHandler = instantiateClass(implementationClass, container); } catch(Exception e) { LOG.error(e); diff --git a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorTypedHandlerBean.java b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorTypedHandlerBean.java index 3ef8d043d96d..82785f7c2093 100644 --- a/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorTypedHandlerBean.java +++ b/platform/platform-api/src/com/intellij/openapi/editor/actionSystem/EditorTypedHandlerBean.java @@ -28,7 +28,7 @@ public class EditorTypedHandlerBean extends AbstractExtensionPointBean { try { DefaultPicoContainer container = new DefaultPicoContainer(ApplicationManager.getApplication().getPicoContainer()); container.registerComponentInstance(originalHandler); - myHandler = instantiate(implementationClass, container); + myHandler = instantiateClass(implementationClass, container); } catch(Exception e) { LOG.error(e); diff --git a/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java b/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java index 623fd9d62bf8..b234370a4aba 100644 --- a/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java +++ b/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java @@ -3,6 +3,7 @@ package com.intellij.openapi.options; import com.intellij.AbstractBundle; import com.intellij.CommonBundle; +import com.intellij.diagnostic.PluginException; import com.intellij.ide.plugins.IdeaPluginDescriptor; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; @@ -254,18 +255,18 @@ public class ConfigurableEP extends AbstractExten protected ObjectProducer createProducer() { try { if (providerClass != null) { - return new ProviderProducer(instantiate(providerClass, myPicoContainer)); + return new ProviderProducer(instantiateClass(providerClass, myPicoContainer)); } if (instanceClass != null) { - return new ClassProducer(myPicoContainer, findClass(instanceClass)); + return new ClassProducer(myPicoContainer, findExtensionClass(instanceClass)); } if (implementationClass != null) { - return new ClassProducer(myPicoContainer, findClass(implementationClass)); + return new ClassProducer(myPicoContainer, findExtensionClass(implementationClass)); } - throw new RuntimeException("configurable class name is not set"); + throw new PluginException("configurable class name is not set", getPluginId()); } catch (AssertionError | Exception | LinkageError error) { - LOG.error(error); + LOG.error(new PluginException(error, getPluginId())); } return new ObjectProducer(); } @@ -287,13 +288,13 @@ public class ConfigurableEP extends AbstractExten return null; } try { - return instantiate(findClass(treeRendererClass), myPicoContainer); + return instantiate(findExtensionClass(treeRendererClass), myPicoContainer); } catch (ProcessCanceledException exception) { throw exception; } catch (AssertionError | LinkageError | Exception e) { - LOG.error(e); + LOG.error(new PluginException(e, getPluginId())); } return null; } diff --git a/platform/platform-api/src/com/intellij/openapi/wm/ToolWindowEP.java b/platform/platform-api/src/com/intellij/openapi/wm/ToolWindowEP.java index f4ed037cc8e8..e4043cae2935 100644 --- a/platform/platform-api/src/com/intellij/openapi/wm/ToolWindowEP.java +++ b/platform/platform-api/src/com/intellij/openapi/wm/ToolWindowEP.java @@ -87,13 +87,7 @@ public class ToolWindowEP extends AbstractExtensionPointBean { return null; } - try { - myFactoryClass = findClass(factoryClass); - } - catch(Exception e) { - LOG.error(e); - return null; - } + myFactoryClass = findClassNoExceptions(factoryClass); } return myFactoryClass; } @@ -102,7 +96,7 @@ public class ToolWindowEP extends AbstractExtensionPointBean { public Condition getCondition() { if (conditionClass != null) { try { - return instantiate(conditionClass, ApplicationManager.getApplication().getPicoContainer()); + return instantiateClass(conditionClass, ApplicationManager.getApplication().getPicoContainer()); } catch (Exception e) { LOG.error(e); diff --git a/platform/platform-api/src/com/intellij/openapi/wm/ext/LibraryDependentToolWindow.java b/platform/platform-api/src/com/intellij/openapi/wm/ext/LibraryDependentToolWindow.java index fd9da58de207..cd1c53ed3bc8 100644 --- a/platform/platform-api/src/com/intellij/openapi/wm/ext/LibraryDependentToolWindow.java +++ b/platform/platform-api/src/com/intellij/openapi/wm/ext/LibraryDependentToolWindow.java @@ -20,7 +20,7 @@ public class LibraryDependentToolWindow extends ToolWindowEP { public LibrarySearchHelper getLibrarySearchHelper() { if (myLibrarySearchHelper == null) { try { - myLibrarySearchHelper = instantiate(getLibrarySearchClass(), ApplicationManager.getApplication().getPicoContainer()); + myLibrarySearchHelper = instantiateClass(getLibrarySearchClass(), ApplicationManager.getApplication().getPicoContainer()); } catch(Exception e) { LOG.error(e); diff --git a/platform/platform-api/src/com/intellij/util/MixinEP.java b/platform/platform-api/src/com/intellij/util/MixinEP.java index 9c474f2a0341..75edc8ced3fb 100644 --- a/platform/platform-api/src/com/intellij/util/MixinEP.java +++ b/platform/platform-api/src/com/intellij/util/MixinEP.java @@ -45,19 +45,14 @@ public class MixinEP extends AbstractExtensionPointBean { } throw new IllegalArgumentException(error); } - try { - return findClass(key); - } - catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } + return findExtensionClass(key); } }; private final LazyInstance myHandler = new LazyInstance() { @Override - protected Class getInstanceClass() throws ClassNotFoundException { - return findClass(implementationClass); + protected Class getInstanceClass() { + return findExtensionClass(implementationClass); } }; diff --git a/platform/platform-impl/src/com/intellij/codeInsight/hint/TooltipLinkHandlerEP.java b/platform/platform-impl/src/com/intellij/codeInsight/hint/TooltipLinkHandlerEP.java index c1521474ec06..b9eb9f7c6564 100644 --- a/platform/platform-impl/src/com/intellij/codeInsight/hint/TooltipLinkHandlerEP.java +++ b/platform/platform-impl/src/com/intellij/codeInsight/hint/TooltipLinkHandlerEP.java @@ -24,8 +24,8 @@ public class TooltipLinkHandlerEP extends AbstractExtensionPointBean { private final LazyInstance myHandler = new LazyInstance() { @Override - protected Class getInstanceClass() throws ClassNotFoundException { - return findClass(handlerClassName); + protected Class getInstanceClass() { + return findExtensionClass(handlerClassName); } }; diff --git a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeUsageCounterCollector.java b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeUsageCounterCollector.java index 3651501aef60..7f0276533048 100644 --- a/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeUsageCounterCollector.java +++ b/platform/platform-impl/src/com/intellij/internal/statistic/collectors/fus/fileTypes/FileTypeUsageCounterCollector.java @@ -62,8 +62,8 @@ public class FileTypeUsageCounterCollector { private final LazyInstance myHandler = new LazyInstance() { @Override - protected Class getInstanceClass() throws ClassNotFoundException { - return findClass(implementationClass); + protected Class getInstanceClass() { + return findExtensionClass(implementationClass); } }; diff --git a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java index c0b659a2026c..0498a5dd3542 100644 --- a/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java +++ b/platform/platform-impl/src/com/intellij/openapi/fileTypes/impl/FileTypeManagerImpl.java @@ -442,16 +442,16 @@ public class FileTypeManagerImpl extends FileTypeManagerEx implements Persistent FileType fileType; try { if (fileTypeBean.fieldName != null) { - final Class fileTypeBeanClass = fileTypeBean.findClass(fileTypeBean.implementationClass); + final Class fileTypeBeanClass = fileTypeBean.findExtensionClass(fileTypeBean.implementationClass); final Field field = fileTypeBeanClass.getDeclaredField(fileTypeBean.fieldName); fileType = (FileType) field.get(null); } else { - fileType = fileTypeBean.instantiate(fileTypeBean.implementationClass, ApplicationManager.getApplication().getPicoContainer()); + fileType = fileTypeBean.instantiateClass(fileTypeBean.implementationClass, ApplicationManager.getApplication().getPicoContainer()); } } - catch (ClassNotFoundException | NoSuchFieldException | IllegalAccessException e) { - LOG.error(e); + catch (NoSuchFieldException | IllegalAccessException e) { + LOG.error(new PluginException(e, fileTypeBean.getPluginId())); return null; } diff --git a/platform/platform-impl/src/com/intellij/openapi/options/SchemeExporterEP.java b/platform/platform-impl/src/com/intellij/openapi/options/SchemeExporterEP.java index 20e4c60bb269..f0540ac45b1b 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/SchemeExporterEP.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/SchemeExporterEP.java @@ -47,8 +47,8 @@ public class SchemeExporterEP extends AbstractExtensionPointB private final LazyInstance> myExporterInstance = new LazyInstance>() { @Override - protected Class> getInstanceClass() throws ClassNotFoundException { - return findClass(implementationClass); + protected Class> getInstanceClass() { + return findExtensionClass(implementationClass); } }; diff --git a/platform/platform-impl/src/com/intellij/openapi/options/SchemeImporterEP.java b/platform/platform-impl/src/com/intellij/openapi/options/SchemeImporterEP.java index 2f38e5d39787..d1560c4cdcb9 100644 --- a/platform/platform-impl/src/com/intellij/openapi/options/SchemeImporterEP.java +++ b/platform/platform-impl/src/com/intellij/openapi/options/SchemeImporterEP.java @@ -45,8 +45,8 @@ public class SchemeImporterEP extends AbstractExtensionPointB private final LazyInstance> myImporterInstance = new LazyInstance>() { @Override - protected Class> getInstanceClass() throws ClassNotFoundException { - return findClass(implementationClass); + protected Class> getInstanceClass() { + return findExtensionClass(implementationClass); } }; diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsEP.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsEP.java index 9ea376f67618..9ccdc9d29b07 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsEP.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/VcsEP.java @@ -16,6 +16,7 @@ package com.intellij.openapi.vcs.impl; +import com.intellij.diagnostic.PluginException; import com.intellij.openapi.components.BaseComponent; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.extensions.AbstractExtensionPointBean; @@ -72,20 +73,20 @@ public class VcsEP extends AbstractExtensionPointBean { @Nullable private AbstractVcs getInstance(@NotNull Project project, @NotNull String vcsClass) { try { - final Class foundClass = findClass(vcsClass); + final Class foundClass = findExtensionClass(vcsClass); final Class[] interfaces = foundClass.getInterfaces(); for (Class anInterface : interfaces) { if (BaseComponent.class.isAssignableFrom(anInterface)) { return project.getComponent(foundClass); } } - return instantiate(vcsClass, project.getPicoContainer()); + return instantiateClass(vcsClass, project.getPicoContainer()); } catch (ProcessCanceledException pce) { throw pce; } catch(Exception e) { - LOG.error(e); + LOG.error(new PluginException(e, getPluginId())); return null; } } diff --git a/xml/dom-impl/src/com/intellij/util/xml/impl/DomFileMetaData.java b/xml/dom-impl/src/com/intellij/util/xml/impl/DomFileMetaData.java index 08daf8c265f0..ca73c996707f 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/impl/DomFileMetaData.java +++ b/xml/dom-impl/src/com/intellij/util/xml/impl/DomFileMetaData.java @@ -62,23 +62,26 @@ public class DomFileMetaData extends AbstractExtensionPointBean { DomFileDescription instance = lazyInstance; if (instance == null) { try { - instance = instantiate(findClass(implementation), ApplicationManager.getApplication().getPicoContainer()); + instance = instantiate(findExtensionClass(implementation), ApplicationManager.getApplication().getPicoContainer()); if (StringUtil.isEmpty(rootTagName)) { if (!instance.acceptsOtherRootTagNames()) { - throw new PluginException(implementation + " should either specify a root tag name in XML, or return true from 'acceptsOtherRootTagNames'", getPluginId()); + throw new PluginException( + implementation + " should either specify a root tag name in XML, or return true from 'acceptsOtherRootTagNames'", + getPluginId()); } } else if (!rootTagName.equals(instance.getRootTagName())) { - throw new PluginException(implementation + " XML declaration should have " + instance.getRootTagName() + " root tag name", getPluginId()); + throw new PluginException(implementation + " XML declaration should have " + instance.getRootTagName() + " root tag name", + getPluginId()); } DomApplicationComponent.getInstance().initDescription(instance); lazyInstance = instance; } - catch (ProcessCanceledException e) { + catch (ProcessCanceledException | PluginException e) { throw e; } catch (Exception e) { - throw new RuntimeException(e); + throw new PluginException(e, getPluginId()); } } return instance; diff --git a/xml/dom-impl/src/com/intellij/util/xml/reflect/DomExtenderEP.java b/xml/dom-impl/src/com/intellij/util/xml/reflect/DomExtenderEP.java index 95b9e37f7fbe..264e16a00ab6 100644 --- a/xml/dom-impl/src/com/intellij/util/xml/reflect/DomExtenderEP.java +++ b/xml/dom-impl/src/com/intellij/util/xml/reflect/DomExtenderEP.java @@ -48,11 +48,8 @@ public class DomExtenderEP extends AbstractExtensionPointBean { @NotNull final DomInvocationHandler handler, @Nullable DomExtensionsRegistrarImpl registrar) { if (myDomClass == null) { - try { - myDomClass = findClass(domClassName); - } - catch (Throwable e) { - LOG.error(new PluginException(e, getPluginId())); + myDomClass = findClassNoExceptions(domClassName); + if (myDomClass == null) { return registrar; } } @@ -64,7 +61,7 @@ public class DomExtenderEP extends AbstractExtensionPointBean { if (myExtender == null) { try { - myExtender = instantiate(extenderClassName, project.getPicoContainer()); + myExtender = instantiateClass(extenderClassName, project.getPicoContainer()); } catch (Throwable e) { LOG.error(new PluginException(e, getPluginId()));