IDEA-254308 Plugin org.jetbrains.plugins.remote-run is not unload-safe because of extension to non-dynamic EP com.intellij.themeMetadataProvider

GitOrigin-RevId: fba396fc989726306f4e9c84b76f3ac90697b29a
This commit is contained in:
Yann Cébron
2020-11-02 17:07:49 +00:00
committed by intellij-monorepo-bot
parent 4c0f282244
commit 1639e3cedd
2 changed files with 13 additions and 1 deletions
@@ -340,7 +340,7 @@
<extensionPoint name="themeProvider" beanClass="com.intellij.ide.ui.UIThemeProvider" dynamic="true"/>
<extensionPoint name="lafProvider" interface="com.intellij.ide.ui.LafProvider"/>
<extensionPoint name="dateTimeFormatter" beanClass="com.intellij.util.text.DateTimeFormatterBean" dynamic="true"/>
<extensionPoint name="themeMetadataProvider" beanClass="com.intellij.ide.ui.UIThemeMetadataProvider"/>
<extensionPoint name="themeMetadataProvider" beanClass="com.intellij.ide.ui.UIThemeMetadataProvider" dynamic="true"/>
<extensionPoint name="tree.CustomLanguageASTComparator" beanClass="com.intellij.lang.LanguageExtensionPoint" dynamic="true">
<with attribute="implementationClass" implements="com.intellij.psi.tree.CustomLanguageASTComparator"/>
@@ -4,6 +4,7 @@ package org.jetbrains.idea.devkit.themes.metadata;
import com.intellij.ide.ui.UIThemeMetadata;
import com.intellij.ide.ui.UIThemeMetadataProvider;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.extensions.ExtensionPointAdapter;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.util.Pair;
import com.intellij.util.PairProcessor;
@@ -26,6 +27,17 @@ public class UIThemeMetadataService {
}
public UIThemeMetadataService() {
loadMetadata();
EP_NAME.addExtensionPointListener(new ExtensionPointAdapter<>() {
@Override
public void extensionListChanged() {
myCache.clear();
loadMetadata();
}
}, null);
}
private void loadMetadata() {
final List<UIThemeMetadata> themeMetadata = ContainerUtil.mapNotNull(EP_NAME.getExtensionList(), UIThemeMetadataProvider::loadMetadata);
for (UIThemeMetadata metadata : themeMetadata) {
myCache.put(metadata, ContainerUtil.newMapFromValues(metadata.getUiKeyMetadata().iterator(), o -> o.getKey()));