mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-02-04 23:39:07 +07:00
EA-252604 NPE: UastMetaLanguage.getMatchingLanguages
GitOrigin-RevId: f9ee6d56298643ae206cfc789a94508b729149c1
This commit is contained in:
committed by
intellij-monorepo-bot
parent
437208db55
commit
ec9c6c34aa
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) }
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user