From 421cd9929b2ca3212251890859fa270a3680ff12 Mon Sep 17 00:00:00 2001 From: Jinseong Jeon Date: Fri, 25 Aug 2023 12:11:29 -0700 Subject: [PATCH] SLC: use optimal type mapping mode for receiver parameter ...and other kinds of parameters as well --- .../symbol/parameters/SymbolLightParameterBase.kt | 13 +++++++++++++ .../symbol/parameters/SymbolLightParameterCommon.kt | 9 +-------- .../SymbolLightParameterForDefaultImplsReceiver.kt | 7 ++++++- .../parameters/SymbolLightParameterForReceiver.kt | 6 +++++- .../SymbolLightSuspendContinuationParameter.kt | 9 ++++++--- 5 files changed, 31 insertions(+), 13 deletions(-) diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterBase.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterBase.kt index 8c0bf40feb9..a13213e8984 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterBase.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterBase.kt @@ -10,6 +10,9 @@ import com.intellij.psi.* import com.intellij.psi.search.LocalSearchScope import com.intellij.psi.search.SearchScope import com.intellij.util.IncorrectOperationException +import org.jetbrains.kotlin.analysis.api.KtAnalysisSession +import org.jetbrains.kotlin.analysis.api.types.KtType +import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode import org.jetbrains.kotlin.analysis.project.structure.KtModule import org.jetbrains.kotlin.asJava.elements.* import org.jetbrains.kotlin.light.classes.symbol.basicIsEquivalentTo @@ -73,4 +76,14 @@ internal abstract class SymbolLightParameterBase(containingDeclaration: SymbolLi abstract override fun hashCode(): Int abstract override fun isVarArgs(): Boolean + + context(KtAnalysisSession) + protected fun KtType.typeMappingMode(): KtTypeMappingMode { + return when { + this@typeMappingMode.isSuspendFunctionType -> KtTypeMappingMode.DEFAULT + // TODO: extract type mapping mode from annotation? + // TODO: methods with declaration site wildcards? + else -> KtTypeMappingMode.VALUE_PARAMETER + } + } } \ No newline at end of file diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt index e0623fc7298..9c9b3678c27 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterCommon.kt @@ -11,7 +11,6 @@ import org.jetbrains.kotlin.analysis.api.symbols.KtValueParameterSymbol import org.jetbrains.kotlin.analysis.api.symbols.pointers.KtSymbolPointer import org.jetbrains.kotlin.analysis.api.symbols.psiSafe import org.jetbrains.kotlin.analysis.api.symbols.sourcePsiSafe -import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode import org.jetbrains.kotlin.asJava.classes.lazyPub import org.jetbrains.kotlin.asJava.elements.KtLightIdentifier import org.jetbrains.kotlin.builtins.StandardNames @@ -80,17 +79,11 @@ internal abstract class SymbolLightParameterCommon( parameterSymbolPointer.withSymbol(ktModule) { parameterSymbol -> val convertedType = run { val ktType = parameterSymbol.returnType - val typeMappingMode = when { - ktType.isSuspendFunctionType -> KtTypeMappingMode.DEFAULT - // TODO: extract type mapping mode from annotation? - // TODO: methods with declaration site wildcards? - else -> KtTypeMappingMode.VALUE_PARAMETER - } ktType.asPsiTypeElement( this@SymbolLightParameterCommon, allowErrorTypes = true, - typeMappingMode + ktType.typeMappingMode() )?.let { annotateByKtType(it.type, ktType, it, modifierList) } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForDefaultImplsReceiver.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForDefaultImplsReceiver.kt index 1405c0e71bd..56094d86d7a 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForDefaultImplsReceiver.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForDefaultImplsReceiver.kt @@ -22,7 +22,12 @@ internal class SymbolLightParameterForDefaultImplsReceiver(containingDeclaration SymbolLightParameterBase(containingDeclaration) { private val _type by lazyPub { (method.containingClass.containingClass as SymbolLightClassForInterface).withClassOrObjectSymbol { - it.buildSelfClassType().asPsiType(containingDeclaration, allowErrorTypes = true) ?: nonExistentType() + val ktType = it.buildSelfClassType() + ktType.asPsiType( + containingDeclaration, + allowErrorTypes = true, + ktType.typeMappingMode() + ) ?: nonExistentType() } } diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt index d7f861efb34..4ec92de830d 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightParameterForReceiver.kt @@ -87,7 +87,11 @@ internal class SymbolLightParameterForReceiver private constructor( private val _type: PsiType by lazyPub { withReceiverSymbol { receiver -> val ktType = receiver.type - val psiType = ktType.asPsiTypeElement(this, allowErrorTypes = true)?.let { + val psiType = ktType.asPsiTypeElement( + this, + allowErrorTypes = true, + ktType.typeMappingMode() + )?.let { annotateByKtType(it.type, ktType, it, modifierList) } if (method is SymbolLightAnnotationsMethod) { diff --git a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt index 594a78726e3..3ebad4a342a 100644 --- a/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt +++ b/analysis/symbol-light-classes/src/org/jetbrains/kotlin/light/classes/symbol/parameters/SymbolLightSuspendContinuationParameter.kt @@ -43,9 +43,12 @@ internal class SymbolLightSuspendContinuationParameter( private val _type by lazyPub { withFunctionSymbol { functionSymbol -> - buildClassType(StandardClassIds.Continuation) { argument(functionSymbol.returnType) } - .asPsiType(this, allowErrorTypes = true) - ?: nonExistentType() + val ktType = buildClassType(StandardClassIds.Continuation) { argument(functionSymbol.returnType) } + ktType.asPsiType( + this, + allowErrorTypes = true, + ktType.typeMappingMode() + ) ?: nonExistentType() } }