EA-252604 NPE: UastMetaLanguage.getMatchingLanguages

GitOrigin-RevId: f9ee6d56298643ae206cfc789a94508b729149c1
This commit is contained in:
Yuriy Artamonov
2021-02-03 13:31:44 +03:00
committed by intellij-monorepo-bot
parent 437208db55
commit ec9c6c34aa
2 changed files with 28 additions and 21 deletions

View File

@@ -12,35 +12,43 @@ import java.util.HashSet;
import java.util.Set;
public final class UastMetaLanguage extends MetaLanguage {
private final Set<Language> myLanguages;
protected static final class Holder {
private static final Set<Language> myLanguages;
static {
Collection<UastLanguagePlugin> languagePlugins = UastLanguagePlugin.Companion.getInstances();
myLanguages = new HashSet<>(languagePlugins.size());
initLanguages(languagePlugins);
UastLanguagePlugin.Companion.getExtensionPointName().addChangeListener(() -> {
myLanguages.clear();
initLanguages(UastLanguagePlugin.Companion.getInstances());
}, null);
}
private static void initLanguages(Collection<UastLanguagePlugin> languagePlugins) {
for (UastLanguagePlugin plugin : languagePlugins) {
myLanguages.add(plugin.getLanguage());
}
}
public static Set<Language> getLanguages() {
return myLanguages;
}
}
private UastMetaLanguage() {
super("UAST");
Collection<UastLanguagePlugin> languagePlugins = UastLanguagePlugin.Companion.getInstances();
myLanguages = new HashSet<>(languagePlugins.size());
initLanguages(languagePlugins);
UastLanguagePlugin.Companion.getExtensionPointName().addChangeListener(() -> {
myLanguages.clear();
initLanguages(UastLanguagePlugin.Companion.getInstances());
}, null);
}
private void initLanguages(Collection<UastLanguagePlugin> languagePlugins) {
for (UastLanguagePlugin plugin : languagePlugins) {
myLanguages.add(plugin.getLanguage());
}
}
@Override
public boolean matchesLanguage(@NotNull Language language) {
return myLanguages.contains(language);
return Holder.myLanguages.contains(language);
}
@NotNull
@Override
public Collection<Language> getMatchingLanguages() {
return Collections.unmodifiableSet(myLanguages);
return Collections.unmodifiableSet(Holder.myLanguages);
}
}

View File

@@ -1,7 +1,6 @@
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
package com.intellij.uast
import com.intellij.lang.Language
import com.intellij.openapi.Disposable
import com.intellij.openapi.components.Service
import com.intellij.openapi.project.Project
@@ -39,8 +38,8 @@ class UastModificationTracker internal constructor(val project: Project) : Modif
}
@JvmStatic
private fun getLanguageTrackers(project: Project) : List<ModificationTracker> {
val languages = Language.findInstance(UastMetaLanguage::class.java).matchingLanguages
private fun getLanguageTrackers(project: Project): List<ModificationTracker> {
val languages = UastMetaLanguage.Holder.getLanguages()
val psiManager = PsiManager.getInstance(project)
return languages.map { psiManager.modificationTracker.forLanguage(it) }
}