FIR IDE/LC: introduce/use KtTypeMappingMode

This commit is contained in:
Jinseong Jeon
2021-11-04 15:06:42 -07:00
committed by Ilya Kirillov
parent 0da9ef873a
commit 4eec381d1b
12 changed files with 114 additions and 55 deletions
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.analysis.api.fir.types.KtFirType
import org.jetbrains.kotlin.analysis.api.fir.types.PublicTypeApproximator
import org.jetbrains.kotlin.analysis.api.tokens.ValidityToken
import org.jetbrains.kotlin.analysis.api.types.KtType
import org.jetbrains.kotlin.analysis.api.types.KtTypeMappingMode
import org.jetbrains.kotlin.analysis.api.withValidityAssertion
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.FirModuleResolveState
import org.jetbrains.kotlin.analysis.low.level.api.fir.api.withFirDeclaration
@@ -55,19 +56,30 @@ internal class KtFirPsiTypeProvider(
override fun asPsiType(
type: KtType,
useSitePosition: PsiElement,
mode: TypeMappingMode,
mode: KtTypeMappingMode,
isAnnotationMethod: Boolean,
): PsiType? = withValidityAssertion {
type.coneType.asPsiType(rootModuleSession, analysisSession.firResolveState, mode, useSitePosition)
type.coneType.asPsiType(
rootModuleSession,
analysisSession.firResolveState,
mode.toTypeMappingMode(type, isAnnotationMethod),
useSitePosition
)
}
override fun getOptimalModeForReturnType(type: KtType, isAnnotationMethod: Boolean): TypeMappingMode = withValidityAssertion {
private fun KtTypeMappingMode.toTypeMappingMode(type: KtType, isAnnotationMethod: Boolean): TypeMappingMode {
require(type is KtFirType)
rootModuleSession.jvmTypeMapper.typeContext.getOptimalModeForReturnType(type.coneType, isAnnotationMethod)
}
override fun getOptimalModeForValueParameter(type: KtType): TypeMappingMode = withValidityAssertion {
require(type is KtFirType)
rootModuleSession.jvmTypeMapper.typeContext.getOptimalModeForValueParameter(type.coneType)
return when (this) {
KtTypeMappingMode.DEFAULT -> TypeMappingMode.DEFAULT
KtTypeMappingMode.DEFAULT_UAST -> TypeMappingMode.DEFAULT_UAST
KtTypeMappingMode.GENERIC_ARGUMENT -> TypeMappingMode.GENERIC_ARGUMENT
KtTypeMappingMode.SUPER_TYPE -> TypeMappingMode.SUPER_TYPE
KtTypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS -> TypeMappingMode.SUPER_TYPE_KOTLIN_COLLECTIONS_AS_IS
KtTypeMappingMode.RETURN_TYPE ->
rootModuleSession.jvmTypeMapper.typeContext.getOptimalModeForReturnType(type.coneType, isAnnotationMethod)
KtTypeMappingMode.VALUE_PARAMETER ->
rootModuleSession.jvmTypeMapper.typeContext.getOptimalModeForValueParameter(type.coneType)
}
}
}