Introduce a util to copy TypeMappingMode for UAST

This commit is contained in:
Jinseong Jeon
2022-12-23 17:27:48 -08:00
committed by Ilya Kirillov
parent e89a387cd4
commit b088e742ae
2 changed files with 24 additions and 13 deletions
@@ -9,26 +9,23 @@ import org.jetbrains.kotlin.types.TypeSystemCommonBackendContext
import org.jetbrains.kotlin.types.model.KotlinTypeMarker import org.jetbrains.kotlin.types.model.KotlinTypeMarker
fun TypeSystemCommonBackendContext.getOptimalModeForValueParameter( fun TypeSystemCommonBackendContext.getOptimalModeForValueParameter(
type: KotlinTypeMarker, type: KotlinTypeMarker
isForUast: Boolean = false, ): TypeMappingMode = getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = true)
): TypeMappingMode = getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = true, isForUast)
fun TypeSystemCommonBackendContext.getOptimalModeForReturnType( fun TypeSystemCommonBackendContext.getOptimalModeForReturnType(
type: KotlinTypeMarker, type: KotlinTypeMarker,
isAnnotationMethod: Boolean, isAnnotationMethod: Boolean
isForUast: Boolean = false,
): TypeMappingMode { ): TypeMappingMode {
return if (isAnnotationMethod) return if (isAnnotationMethod)
TypeMappingMode.VALUE_FOR_ANNOTATION TypeMappingMode.VALUE_FOR_ANNOTATION
else else
getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = false, isForUast) getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = false)
} }
@OptIn(TypeMappingModeInternals::class) @OptIn(TypeMappingModeInternals::class)
private fun TypeSystemCommonBackendContext.getOptimalModeForSignaturePart( private fun TypeSystemCommonBackendContext.getOptimalModeForSignaturePart(
type: KotlinTypeMarker, type: KotlinTypeMarker,
canBeUsedInSupertypePosition: Boolean, canBeUsedInSupertypePosition: Boolean
isForUast: Boolean = false,
): TypeMappingMode { ): TypeMappingMode {
if (type.argumentsCount() == 0) return TypeMappingMode.DEFAULT if (type.argumentsCount() == 0) return TypeMappingMode.DEFAULT
@@ -36,7 +33,7 @@ private fun TypeSystemCommonBackendContext.getOptimalModeForSignaturePart(
if (isInlineClassType && shouldUseUnderlyingType(type)) { if (isInlineClassType && shouldUseUnderlyingType(type)) {
val underlyingType = computeUnderlyingType(type) val underlyingType = computeUnderlyingType(type)
if (underlyingType != null) { if (underlyingType != null) {
return getOptimalModeForSignaturePart(underlyingType, canBeUsedInSupertypePosition, isForUast).dontWrapInlineClassesMode() return getOptimalModeForSignaturePart(underlyingType, canBeUsedInSupertypePosition).dontWrapInlineClassesMode()
} }
} }
@@ -48,17 +45,15 @@ private fun TypeSystemCommonBackendContext.getOptimalModeForSignaturePart(
val invariantArgumentMode = val invariantArgumentMode =
if (canBeUsedInSupertypePosition) if (canBeUsedInSupertypePosition)
getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = false, isForUast) getOptimalModeForSignaturePart(type, canBeUsedInSupertypePosition = false)
else else
null null
return TypeMappingMode( return TypeMappingMode(
skipDeclarationSiteWildcards = !canBeUsedInSupertypePosition, skipDeclarationSiteWildcards = !canBeUsedInSupertypePosition,
skipDeclarationSiteWildcardsIfPossible = true, skipDeclarationSiteWildcardsIfPossible = true,
genericArgumentMode = if (isForUast) TypeMappingMode.GENERIC_ARGUMENT_UAST else null,
genericContravariantArgumentMode = contravariantArgumentMode, genericContravariantArgumentMode = contravariantArgumentMode,
genericInvariantArgumentMode = invariantArgumentMode, genericInvariantArgumentMode = invariantArgumentMode,
needInlineClassWrapping = !isInlineClassType, needInlineClassWrapping = !isInlineClassType
mapTypeAliases = isForUast
) )
} }
@@ -142,4 +142,20 @@ class TypeMappingMode @TypeMappingModeInternals constructor(
needPrimitiveBoxing, false, isForAnnotationParameter, skipDeclarationSiteWildcards, skipDeclarationSiteWildcardsIfPossible, needPrimitiveBoxing, false, isForAnnotationParameter, skipDeclarationSiteWildcards, skipDeclarationSiteWildcardsIfPossible,
genericArgumentMode, kotlinCollectionsToJavaCollections, genericContravariantArgumentMode, genericInvariantArgumentMode genericArgumentMode, kotlinCollectionsToJavaCollections, genericContravariantArgumentMode, genericInvariantArgumentMode
) )
fun mapTypeAliases(
genericArgumentMode: TypeMappingMode? = null
): TypeMappingMode =
TypeMappingMode(
needPrimitiveBoxing,
needInlineClassWrapping,
isForAnnotationParameter,
skipDeclarationSiteWildcards,
skipDeclarationSiteWildcardsIfPossible,
genericArgumentMode ?: this.genericArgumentMode,
kotlinCollectionsToJavaCollections,
genericContravariantArgumentMode,
genericInvariantArgumentMode,
mapTypeAliases = true
)
} }