diff --git a/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java b/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java index a7be1fd2c1ad..129ae4a69abc 100644 --- a/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java +++ b/platform/extensions/src/com/intellij/openapi/extensions/impl/ExtensionPointImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2014 JetBrains s.r.o. + * Copyright 2000-2015 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -261,6 +261,19 @@ public class ExtensionPointImpl implements ExtensionPoint { } } + @SuppressWarnings("unused") // upsource + public synchronized void removeUnloadableExtensions() { + ExtensionComponentAdapter[] adapters = myExtensionAdapters.toArray(new ExtensionComponentAdapter[myExtensionAdapters.size()]); + for (ExtensionComponentAdapter adapter : adapters) { + try { + adapter.getComponentImplementation(); + } + catch (Throwable e) { + unregisterExtensionAdapter(adapter); + } + } + } + @Override @Nullable public T getExtension() { @@ -423,7 +436,7 @@ public class ExtensionPointImpl implements ExtensionPoint { myExtensionsCache = null; } - synchronized boolean unregisterExtensionAdapter(@NotNull ExtensionComponentAdapter adapter) { + public synchronized boolean unregisterExtensionAdapter(@NotNull ExtensionComponentAdapter adapter) { try { if (myExtensionAdapters.remove(adapter)) { return true;