CMP-5078: Allow KotlinUastLanguagePlugin operate in common source sets.

GitOrigin-RevId: 6fbd754449337aa49f7d1b9ce9ef19d20fc1079d
This commit is contained in:
Ilia Bogdanovich
2025-01-14 13:42:40 +00:00
committed by intellij-monorepo-bot
parent c9be078fce
commit 6e26310073
5 changed files with 14 additions and 13 deletions
@@ -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()
}
}
}
@@ -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
@@ -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<out UElement>?): 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<out UElement>?): 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 <T : UElement> convertElement(element: PsiElement, parent: UElement?, expectedTypes: Array<out Class<out T>>): 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 <T : UElement> convertToAlternatives(element: PsiElement, requiredTypes: Array<out Class<out T>>): Sequence<T> =
if (!element.isJvmElement) emptySequence() else when {
if (!element.isJvmOrCommonElement) emptySequence() else when {
element is KtFile -> KotlinConverter.convertKtFile(element, null, requiredTypes) as Sequence<T>
(element is KtProperty && !element.isLocal) ->
KotlinConverter.convertNonLocalProperty(element, null, requiredTypes) as Sequence<T>
@@ -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
@@ -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