dynamic plugins: some java psi stuff

GitOrigin-RevId: 8cbda00cf3790de6da27c1e90deb5ee3990bea8b
This commit is contained in:
Anna Kozlova
2020-04-20 12:55:25 +02:00
committed by intellij-monorepo-bot
parent b635de50e2
commit 0917e56f43
4 changed files with 58 additions and 33 deletions

View File

@@ -7,8 +7,9 @@ import com.intellij.lang.MetaLanguage;
import com.intellij.lang.jvm.source.JvmDeclarationSearcher;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.extensions.ExtensionPoint;
import com.intellij.openapi.extensions.ExtensionPointChangeListener;
import com.intellij.openapi.extensions.Extensions;
import com.intellij.openapi.extensions.ExtensionsArea;
import com.intellij.util.KeyedLazyInstance;
import org.jetbrains.annotations.NotNull;
import java.util.Arrays;
@@ -20,19 +21,19 @@ public class JvmMetaLanguage extends MetaLanguage {
private static final Logger LOG = Logger.getInstance(JvmMetaLanguage.class);
private final Set<String> supportedLanguages;
private Set<String> supportedLanguages;
protected JvmMetaLanguage() {
super("JVM");
ExtensionsArea rootArea = Extensions.getRootArea();
if (rootArea.hasExtensionPoint(JvmDeclarationSearcher.EP.getName())) {
ExtensionPoint<LanguageExtensionPoint<JvmDeclarationSearcher>> jvmDeclarationSearcherEP =
rootArea.getExtensionPoint(JvmDeclarationSearcher.EP.getName());
LanguageExtensionPoint<JvmDeclarationSearcher>[] jvmDeclarationSearcherImplementations = jvmDeclarationSearcherEP.getExtensions();
supportedLanguages = Collections.unmodifiableSet(
Arrays.stream(jvmDeclarationSearcherImplementations).map(ep -> ep.getKey()).collect(Collectors.toSet())
);
ExtensionPoint<KeyedLazyInstance<JvmDeclarationSearcher>> point = JvmDeclarationSearcher.EP.getPoint();
if (point != null) {
point.addExtensionPointListener(new ExtensionPointChangeListener() {
@Override
public void extensionListChanged() {
supportedLanguages = getSupportedLanguages();
}
}, false, null);
supportedLanguages = getSupportedLanguages();
}
else {
supportedLanguages = Collections.emptySet();
@@ -40,6 +41,16 @@ public class JvmMetaLanguage extends MetaLanguage {
}
}
private static Set<String> getSupportedLanguages() {
ExtensionPoint<LanguageExtensionPoint<JvmDeclarationSearcher>> jvmDeclarationSearcherEP =
Extensions.getRootArea().getExtensionPoint(JvmDeclarationSearcher.EP.getName());
LanguageExtensionPoint<JvmDeclarationSearcher>[] jvmDeclarationSearcherImplementations = jvmDeclarationSearcherEP.getExtensions();
return Collections.unmodifiableSet(
Arrays.stream(jvmDeclarationSearcherImplementations).map(ep -> ep.getKey()).collect(Collectors.toSet())
);
}
@Override
public boolean matchesLanguage(@NotNull Language language) {
return language instanceof JvmLanguage || supportedLanguages.contains(language.getID());