summaryrefslogtreecommitdiff
path: root/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java')
-rw-r--r--platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java18
1 files changed, 17 insertions, 1 deletions
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 78a4c1ece130..828907c13cfb 100644
--- a/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java
+++ b/platform/platform-api/src/com/intellij/openapi/options/ConfigurableEP.java
@@ -175,9 +175,25 @@ public class ConfigurableEP<T extends UnnamedConfigurable> extends AbstractExten
return getDisplayName();
}
+ public boolean canCreateConfigurable() {
+ if (providerClass == null) {
+ return implementationClass != null || instanceClass != null;
+ }
+ try {
+ ConfigurableProvider provider = instantiate(providerClass, myPicoContainer);
+ return provider.canCreateConfigurable(); // do not load heavy configurables
+ }
+ catch (Exception ignored) {
+ return true; // see InstanceFromProviderFactory#compute
+ }
+ }
+
private class InstanceFromProviderFactory extends AtomicNotNullLazyValue<ConfigurableProvider> implements NullableFactory<T> {
public T create() {
- return (T)getValue().createConfigurable();
+ ConfigurableProvider provider = getValue();
+ return provider.canCreateConfigurable()
+ ? (T)provider.createConfigurable()
+ : null;
}
@NotNull