From 6e263100730b513d769ce65be48e1ee93e1c1cb9 Mon Sep 17 00:00:00 2001 From: Ilia Bogdanovich Date: Mon, 13 Jan 2025 16:32:17 +0100 Subject: [PATCH] CMP-5078: Allow KotlinUastLanguagePlugin operate in common source sets. GitOrigin-RevId: 6fbd754449337aa49f7d1b9ce9ef19d20fc1079d --- .../uast/kotlin/internal/kotlinUastServiceUtils.kt | 9 +++++---- .../internal/IdeaKotlinUastResolveProviderService.kt | 2 +- .../uast/kotlin/KotlinUastLanguagePlugin.kt | 12 ++++++------ .../uast/kotlin/KotlinUastResolveProviderService.kt | 2 +- .../internal/CliKotlinUastResolveProviderService.kt | 2 +- 5 files changed, 14 insertions(+), 13 deletions(-) diff --git a/plugins/kotlin/uast/uast-kotlin-idea-base/src/org/jetbrains/uast/kotlin/internal/kotlinUastServiceUtils.kt b/plugins/kotlin/uast/uast-kotlin-idea-base/src/org/jetbrains/uast/kotlin/internal/kotlinUastServiceUtils.kt index 8225203d7320..da215915478c 100644 --- a/plugins/kotlin/uast/uast-kotlin-idea-base/src/org/jetbrains/uast/kotlin/internal/kotlinUastServiceUtils.kt +++ b/plugins/kotlin/uast/uast-kotlin-idea-base/src/org/jetbrains/uast/kotlin/internal/kotlinUastServiceUtils.kt @@ -6,17 +6,18 @@ import com.intellij.psi.PsiElement import org.jetbrains.kotlin.idea.base.facet.JvmOnlyProjectChecker import org.jetbrains.kotlin.idea.base.facet.platform.platform import org.jetbrains.kotlin.idea.base.util.module +import org.jetbrains.kotlin.platform.isCommon import org.jetbrains.kotlin.platform.jvm.isJvm import org.jetbrains.kotlin.psi.KtElement -val PsiElement.isJvmElement: Boolean +val PsiElement.isJvmOrCommonElement: Boolean get() { if (JvmOnlyProjectChecker.getInstance(project).value()) { return true } else if (this is KtElement) { - return platform.isJvm() + return platform.isJvm() || platform.isCommon() } else { val module = module ?: return true - return module.platform.isJvm() + return module.platform.isJvm() || module.platform.isCommon() } - } \ No newline at end of file + } diff --git a/plugins/kotlin/uast/uast-kotlin-idea/src/org/jetbrains/uast/kotlin/internal/IdeaKotlinUastResolveProviderService.kt b/plugins/kotlin/uast/uast-kotlin-idea/src/org/jetbrains/uast/kotlin/internal/IdeaKotlinUastResolveProviderService.kt index 2805ce0bc95a..cf5a6f6ee070 100644 --- a/plugins/kotlin/uast/uast-kotlin-idea/src/org/jetbrains/uast/kotlin/internal/IdeaKotlinUastResolveProviderService.kt +++ b/plugins/kotlin/uast/uast-kotlin-idea/src/org/jetbrains/uast/kotlin/internal/IdeaKotlinUastResolveProviderService.kt @@ -37,7 +37,7 @@ private class IdeaKotlinUastResolveProviderService : KotlinUastResolveProviderSe override fun getBindingContextIfAny(element: KtElement): BindingContext? = element.actionUnderSafeAnalyzeBlock({ getBindingContext(element) }, { null }) - override fun isJvmElement(psiElement: PsiElement): Boolean = psiElement.isJvmElement + override fun isJvmOrCommonElement(psiElement: PsiElement): Boolean = psiElement.isJvmOrCommonElement override fun getLanguageVersionSettings(element: KtElement): LanguageVersionSettings = element.languageVersionSettings diff --git a/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt b/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt index 6684675dfa1f..794b6f3cfcb1 100644 --- a/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt +++ b/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastLanguagePlugin.kt @@ -33,22 +33,22 @@ class KotlinUastLanguagePlugin : UastLanguagePlugin { return fileName.endsWith(".kt", false) || fileName.endsWith(".kts", false) } - private val PsiElement.isJvmElement: Boolean + private val PsiElement.isJvmOrCommonElement: Boolean get() { val resolveProvider: KotlinUastResolveProviderService = project.getService(KotlinUastResolveProviderService::class.java)!! - return resolveProvider.isJvmElement(this) + return resolveProvider.isJvmOrCommonElement(this) } override fun convertElement(element: PsiElement, parent: UElement?, requiredType: Class?): UElement? { val requiredTypes = elementTypes(requiredType) - return if (!canConvert(element, requiredTypes) || !element.isJvmElement) null + return if (!canConvert(element, requiredTypes) || !element.isJvmOrCommonElement) null else convertDeclarationOrElement(element, parent, requiredTypes) } override fun convertElementWithParent(element: PsiElement, requiredType: Class?): UElement? { val requiredTypes = elementTypes(requiredType) return when { - !canConvert(element, requiredTypes) || !element.isJvmElement -> null + !canConvert(element, requiredTypes) || !element.isJvmOrCommonElement -> null element is PsiFile || element is KtLightClassForFacade -> convertDeclaration(element, null, requiredTypes) else -> convertDeclarationOrElement(element, null, requiredTypes) } @@ -109,7 +109,7 @@ class KotlinUastLanguagePlugin : UastLanguagePlugin { @Suppress("UNCHECKED_CAST") private fun convertElement(element: PsiElement, parent: UElement?, expectedTypes: Array>): T? { val nonEmptyExpectedTypes = expectedTypes.nonEmptyOr(DEFAULT_TYPES_LIST) - return if (!canConvert(element, nonEmptyExpectedTypes) || !element.isJvmElement) null + return if (!canConvert(element, nonEmptyExpectedTypes) || !element.isJvmOrCommonElement) null else convertDeclarationOrElement(element, parent, nonEmptyExpectedTypes) as? T } @@ -119,7 +119,7 @@ class KotlinUastLanguagePlugin : UastLanguagePlugin { @Suppress("UNCHECKED_CAST") override fun convertToAlternatives(element: PsiElement, requiredTypes: Array>): Sequence = - if (!element.isJvmElement) emptySequence() else when { + if (!element.isJvmOrCommonElement) emptySequence() else when { element is KtFile -> KotlinConverter.convertKtFile(element, null, requiredTypes) as Sequence (element is KtProperty && !element.isLocal) -> KotlinConverter.convertNonLocalProperty(element, null, requiredTypes) as Sequence diff --git a/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastResolveProviderService.kt b/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastResolveProviderService.kt index 6e4fce6bd521..982fd00de852 100644 --- a/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastResolveProviderService.kt +++ b/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/KotlinUastResolveProviderService.kt @@ -55,7 +55,7 @@ interface KotlinUastResolveProviderService : BaseKotlinUastResolveProviderServic fun getLanguageVersionSettings(element: KtElement): LanguageVersionSettings - fun isJvmElement(psiElement: PsiElement): Boolean + fun isJvmOrCommonElement(psiElement: PsiElement): Boolean override val languagePlugin: UastLanguagePlugin get() = kotlinUastPlugin diff --git a/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/CliKotlinUastResolveProviderService.kt b/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/CliKotlinUastResolveProviderService.kt index 4382f8afc47d..bdfbc765ce32 100644 --- a/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/CliKotlinUastResolveProviderService.kt +++ b/plugins/kotlin/uast/uast-kotlin/src/org/jetbrains/uast/kotlin/internal/CliKotlinUastResolveProviderService.kt @@ -35,7 +35,7 @@ class CliKotlinUastResolveProviderService : KotlinUastResolveProviderService { return element.project.analysisCompletedHandler?.getBindingContext() ?: BindingContext.EMPTY } - override fun isJvmElement(psiElement: PsiElement): Boolean = true + override fun isJvmOrCommonElement(psiElement: PsiElement): Boolean = true override fun getLanguageVersionSettings(element: KtElement): LanguageVersionSettings { return element.project.analysisCompletedHandler?.getLanguageVersionSettings() ?: LanguageVersionSettingsImpl.DEFAULT