mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-03-22 15:19:59 +07:00
UastMetaLanguage - do not use static init
GitOrigin-RevId: 6573f40b8c9091977178b5b9efcacc0b07dc0084
This commit is contained in:
committed by
intellij-monorepo-bot
parent
6334491a93
commit
cf88750587
@@ -1,43 +1,21 @@
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
@file:Suppress("ReplaceJavaStaticMethodWithKotlinAnalog")
|
||||
|
||||
package com.intellij.uast
|
||||
|
||||
import com.intellij.java.analysis.JavaAnalysisBundle
|
||||
import com.intellij.lang.Language
|
||||
import com.intellij.lang.MetaLanguage
|
||||
import com.intellij.util.containers.ContainerUtil
|
||||
import org.jetbrains.annotations.Unmodifiable
|
||||
import org.jetbrains.uast.UastLanguagePlugin
|
||||
import org.jetbrains.uast.UastLanguagePlugin.Companion.extensionPointName
|
||||
import org.jetbrains.uast.UastLanguagePlugin.Companion.getInstances
|
||||
import kotlin.concurrent.Volatile
|
||||
import org.jetbrains.uast.UastLanguagePlugin.Companion.EP
|
||||
|
||||
internal fun getUastMetaLanguages(): Set<Language> {
|
||||
return EP.computeIfAbsent(UastMetaLanguage::class.java) { EP.lazySequence().mapTo(HashSet()) { it.language } }
|
||||
}
|
||||
|
||||
class UastMetaLanguage private constructor() : MetaLanguage("UAST") {
|
||||
internal object Holder {
|
||||
@Volatile
|
||||
var myLanguages: @Unmodifiable MutableSet<Language> = initLanguages()
|
||||
override fun matchesLanguage(language: Language): Boolean = getUastMetaLanguages().contains(language)
|
||||
|
||||
init {
|
||||
extensionPointName.addChangeListener(
|
||||
{ myLanguages = initLanguages() }, null)
|
||||
}
|
||||
override fun getMatchingLanguages(): Collection<Language> = getUastMetaLanguages()
|
||||
|
||||
private fun initLanguages(): @Unmodifiable MutableSet<Language> {
|
||||
return java.util.Set.of(*ContainerUtil.map2Array(getInstances(), EMPTY_ARRAY) { plugin: UastLanguagePlugin -> plugin.language })
|
||||
}
|
||||
|
||||
val languages: Set<Language>
|
||||
get() = myLanguages
|
||||
}
|
||||
|
||||
override fun matchesLanguage(language: Language): Boolean {
|
||||
return Holder.myLanguages.contains(language)
|
||||
}
|
||||
|
||||
override fun getMatchingLanguages(): Collection<Language> {
|
||||
return Holder.myLanguages
|
||||
}
|
||||
|
||||
override fun getDisplayName(): String {
|
||||
return JavaAnalysisBundle.message("uast.language.display.name")
|
||||
}
|
||||
}
|
||||
override fun getDisplayName(): String = JavaAnalysisBundle.message("uast.language.display.name")
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
// 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.
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package com.intellij.uast
|
||||
|
||||
import com.intellij.openapi.Disposable
|
||||
@@ -9,13 +9,13 @@ import com.intellij.psi.PsiManager
|
||||
import org.jetbrains.uast.UastLanguagePlugin
|
||||
|
||||
@Service(Service.Level.PROJECT)
|
||||
class UastModificationTracker internal constructor(val project: Project) : ModificationTracker, Disposable {
|
||||
class UastModificationTracker internal constructor(private val project: Project) : ModificationTracker, Disposable {
|
||||
private var languageTrackers: List<ModificationTracker>
|
||||
|
||||
init {
|
||||
languageTrackers = getLanguageTrackers(project)
|
||||
|
||||
UastLanguagePlugin.extensionPointName.addChangeListener(Runnable {
|
||||
UastLanguagePlugin.EP.addChangeListener(Runnable {
|
||||
languageTrackers = getLanguageTrackers(project)
|
||||
}, this)
|
||||
}
|
||||
@@ -34,11 +34,9 @@ class UastModificationTracker internal constructor(val project: Project) : Modif
|
||||
return project.getService(UastModificationTracker::class.java)
|
||||
}
|
||||
|
||||
@JvmStatic
|
||||
private fun getLanguageTrackers(project: Project): List<ModificationTracker> {
|
||||
val languages = UastMetaLanguage.Holder.getLanguages()
|
||||
val psiManager = PsiManager.getInstance(project)
|
||||
return languages.map { psiManager.modificationTracker.forLanguage(it) }
|
||||
return getUastMetaLanguages().map { psiManager.modificationTracker.forLanguage(it) }
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
|
||||
package org.jetbrains.fir.uast.test.env.kotlin
|
||||
|
||||
@@ -46,9 +46,9 @@ abstract class AbstractFirUastTest : KotlinLightCodeInsightFixtureTestCase() {
|
||||
private fun registerExtensionPointAndServiceIfNeeded() {
|
||||
val area = Extensions.getRootArea()
|
||||
CoreApplicationEnvironment.registerExtensionPoint(
|
||||
area,
|
||||
UastLanguagePlugin.extensionPointName,
|
||||
UastLanguagePlugin::class.java
|
||||
area,
|
||||
UastLanguagePlugin.EP,
|
||||
UastLanguagePlugin::class.java
|
||||
)
|
||||
area.getExtensionPoint(UEvaluatorExtension.EXTENSION_POINT_NAME).registerExtension(KotlinEvaluatorExtension(), project)
|
||||
val service = FirCliKotlinUastResolveProviderService()
|
||||
|
||||
@@ -125,8 +125,8 @@ abstract class AbstractKotlinUastTest : TestCase(),
|
||||
|
||||
private fun initializeCoreEnvironment() {
|
||||
CoreApplicationEnvironment.registerApplicationExtensionPoint(
|
||||
UastLanguagePlugin.extensionPointName,
|
||||
UastLanguagePlugin::class.java,
|
||||
UastLanguagePlugin.EP,
|
||||
UastLanguagePlugin::class.java,
|
||||
)
|
||||
|
||||
CoreApplicationEnvironment.registerApplicationExtensionPoint(
|
||||
@@ -140,7 +140,7 @@ abstract class AbstractKotlinUastTest : TestCase(),
|
||||
)
|
||||
project.registerService(UastContext::class.java)
|
||||
|
||||
Extensions.getRootArea().getExtensionPoint(UastLanguagePlugin.extensionPointName)
|
||||
Extensions.getRootArea().getExtensionPoint(UastLanguagePlugin.EP)
|
||||
.registerExtension(JavaUastLanguagePlugin())
|
||||
|
||||
AnalysisHandlerExtension.registerExtension(
|
||||
@@ -151,7 +151,7 @@ abstract class AbstractKotlinUastTest : TestCase(),
|
||||
|
||||
private fun initializeKotlinEnvironment() {
|
||||
val area = Extensions.getRootArea()
|
||||
area.getExtensionPoint(UastLanguagePlugin.extensionPointName)
|
||||
area.getExtensionPoint(UastLanguagePlugin.EP)
|
||||
.registerExtension(KotlinUastLanguagePlugin(), project)
|
||||
area.getExtensionPoint(UEvaluatorExtension.EXTENSION_POINT_NAME)
|
||||
.registerExtension(KotlinEvaluatorExtension(), project)
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.uast
|
||||
|
||||
import com.intellij.ide.plugins.DynamicPluginListener
|
||||
@@ -111,7 +111,7 @@ object UastFacade : UastLanguagePlugin {
|
||||
clearCachedPlugin()
|
||||
}
|
||||
})
|
||||
UastLanguagePlugin.extensionPointName.addChangeListener({ exposedListeners.forEach(UastPluginListener::onPluginsChanged) }, null)
|
||||
UastLanguagePlugin.EP.addChangeListener({ exposedListeners.forEach(UastPluginListener::onPluginsChanged) }, null)
|
||||
}
|
||||
|
||||
override fun getPossiblePsiSourceTypes(vararg uastTypes: Class<out UElement>): ClassSet<PsiElement> =
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2022 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
// Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license.
|
||||
package org.jetbrains.uast
|
||||
|
||||
import com.intellij.lang.Language
|
||||
@@ -20,9 +20,10 @@ import org.jetbrains.uast.util.classSetOf
|
||||
@JvmDefaultWithCompatibility
|
||||
interface UastLanguagePlugin {
|
||||
companion object {
|
||||
val extensionPointName: ExtensionPointName<UastLanguagePlugin> = ExtensionPointName("org.jetbrains.uast.uastLanguagePlugin")
|
||||
@JvmField
|
||||
val EP: ExtensionPointName<UastLanguagePlugin> = ExtensionPointName("org.jetbrains.uast.uastLanguagePlugin")
|
||||
|
||||
fun getInstances(): Collection<UastLanguagePlugin> = extensionPointName.extensionList
|
||||
fun getInstances(): Collection<UastLanguagePlugin> = EP.extensionList
|
||||
|
||||
fun byLanguage(language: Language): UastLanguagePlugin? = UastFacade.findPlugin(language)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user