diff --git a/java/java-analysis-api/src/com/intellij/uast/UastMetaLanguage.kt b/java/java-analysis-api/src/com/intellij/uast/UastMetaLanguage.kt index 0c22e72d7e17..87c7b2060706 100644 --- a/java/java-analysis-api/src/com/intellij/uast/UastMetaLanguage.kt +++ b/java/java-analysis-api/src/com/intellij/uast/UastMetaLanguage.kt @@ -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 { + 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 = initLanguages() + override fun matchesLanguage(language: Language): Boolean = getUastMetaLanguages().contains(language) - init { - extensionPointName.addChangeListener( - { myLanguages = initLanguages() }, null) - } + override fun getMatchingLanguages(): Collection = getUastMetaLanguages() - private fun initLanguages(): @Unmodifiable MutableSet { - return java.util.Set.of(*ContainerUtil.map2Array(getInstances(), EMPTY_ARRAY) { plugin: UastLanguagePlugin -> plugin.language }) - } - - val languages: Set - get() = myLanguages - } - - override fun matchesLanguage(language: Language): Boolean { - return Holder.myLanguages.contains(language) - } - - override fun getMatchingLanguages(): Collection { - return Holder.myLanguages - } - - override fun getDisplayName(): String { - return JavaAnalysisBundle.message("uast.language.display.name") - } -} + override fun getDisplayName(): String = JavaAnalysisBundle.message("uast.language.display.name") +} \ No newline at end of file diff --git a/java/java-analysis-api/src/com/intellij/uast/UastModificationTracker.kt b/java/java-analysis-api/src/com/intellij/uast/UastModificationTracker.kt index 6bec47709e41..950cbcf9d478 100644 --- a/java/java-analysis-api/src/com/intellij/uast/UastModificationTracker.kt +++ b/java/java-analysis-api/src/com/intellij/uast/UastModificationTracker.kt @@ -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 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 { - val languages = UastMetaLanguage.Holder.getLanguages() val psiManager = PsiManager.getInstance(project) - return languages.map { psiManager.modificationTracker.forLanguage(it) } + return getUastMetaLanguages().map { psiManager.modificationTracker.forLanguage(it) } } } } \ No newline at end of file diff --git a/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/env/kotlin/AbstractFirUastTest.kt b/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/env/kotlin/AbstractFirUastTest.kt index 89867bd4d716..43e126116234 100644 --- a/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/env/kotlin/AbstractFirUastTest.kt +++ b/plugins/kotlin/uast/uast-kotlin-fir/tests/test/org/jetbrains/fir/uast/test/env/kotlin/AbstractFirUastTest.kt @@ -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() diff --git a/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/AbstractKotlinUastTest.kt b/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/AbstractKotlinUastTest.kt index 00b7675e0cca..1864ffa6ee2b 100644 --- a/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/AbstractKotlinUastTest.kt +++ b/plugins/kotlin/uast/uast-kotlin/tests/test/org/jetbrains/uast/test/kotlin/AbstractKotlinUastTest.kt @@ -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) diff --git a/uast/uast-common/src/org/jetbrains/uast/UastContext.kt b/uast/uast-common/src/org/jetbrains/uast/UastContext.kt index 0d9b4f6171ea..b2c1acaf6343 100644 --- a/uast/uast-common/src/org/jetbrains/uast/UastContext.kt +++ b/uast/uast-common/src/org/jetbrains/uast/UastContext.kt @@ -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): ClassSet = diff --git a/uast/uast-common/src/org/jetbrains/uast/UastLanguagePlugin.kt b/uast/uast-common/src/org/jetbrains/uast/UastLanguagePlugin.kt index 8d55a9055f0d..de25cd447534 100644 --- a/uast/uast-common/src/org/jetbrains/uast/UastLanguagePlugin.kt +++ b/uast/uast-common/src/org/jetbrains/uast/UastLanguagePlugin.kt @@ -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 = ExtensionPointName("org.jetbrains.uast.uastLanguagePlugin") + @JvmField + val EP: ExtensionPointName = ExtensionPointName("org.jetbrains.uast.uastLanguagePlugin") - fun getInstances(): Collection = extensionPointName.extensionList + fun getInstances(): Collection = EP.extensionList fun byLanguage(language: Language): UastLanguagePlugin? = UastFacade.findPlugin(language) }