From 7b67929a96b29215fdacfc060c6276a730da2fae Mon Sep 17 00:00:00 2001 From: Sergey Ignatov Date: Thu, 21 Nov 2019 14:53:15 +0300 Subject: [PATCH] mark FileLookupInfoProvider as dynamic GitOrigin-RevId: 49958dc2128225ed49ae606218b531087658ffce --- .../impl/providers/FileInfoManager.java | 26 +++++++++++++++---- .../src/META-INF/LangExtensionPoints.xml | 2 +- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileInfoManager.java b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileInfoManager.java index 97405c5b48a6..691ba4db86c8 100644 --- a/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileInfoManager.java +++ b/platform/lang-impl/src/com/intellij/psi/impl/source/resolve/reference/impl/providers/FileInfoManager.java @@ -19,17 +19,19 @@ package com.intellij.psi.impl.source.resolve.reference.impl.providers; import com.intellij.codeInsight.lookup.LookupElementBuilder; import com.intellij.openapi.Disposable; import com.intellij.openapi.components.ServiceManager; +import com.intellij.openapi.extensions.ExtensionPointListener; +import com.intellij.openapi.extensions.PluginDescriptor; import com.intellij.openapi.fileTypes.FileType; import com.intellij.openapi.util.Pair; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import com.intellij.psi.file.FileLookupInfoProvider; -import java.util.HashMap; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; +import java.util.HashMap; import java.util.Map; /** @@ -39,13 +41,27 @@ public class FileInfoManager implements Disposable { private final Map myFileType2InfoProvider = new HashMap<>(); public FileInfoManager() { - final FileLookupInfoProvider[] providers = FileLookupInfoProvider.EP_NAME.getExtensions(); - for (final FileLookupInfoProvider provider : providers) { - final FileType[] types = provider.getFileTypes(); - for (FileType type : types) { + for (FileLookupInfoProvider provider : FileLookupInfoProvider.EP_NAME.getExtensions()) { + for (FileType type : provider.getFileTypes()) { myFileType2InfoProvider.put(type, provider); } } + + FileLookupInfoProvider.EP_NAME.addExtensionPointListener(new ExtensionPointListener() { + @Override + public void extensionAdded(@NotNull FileLookupInfoProvider extension, @NotNull PluginDescriptor pluginDescriptor) { + for (FileType type : extension.getFileTypes()) { + myFileType2InfoProvider.put(type, extension); + } + } + + @Override + public void extensionRemoved(@NotNull FileLookupInfoProvider extension, @NotNull PluginDescriptor pluginDescriptor) { + for (FileType type : extension.getFileTypes()) { + myFileType2InfoProvider.remove(type); + } + } + }, this); } public static FileInfoManager getFileInfoManager() { diff --git a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml index 72657bf0ed9a..601dab42b75f 100644 --- a/platform/platform-resources/src/META-INF/LangExtensionPoints.xml +++ b/platform/platform-resources/src/META-INF/LangExtensionPoints.xml @@ -522,7 +522,7 @@ - +