[FIR] Use builtinTypes instead of creating new ones

This commit is contained in:
Simon Ogorodnik
2019-12-11 23:06:09 +03:00
parent 5de69471b0
commit 0fb883ef62
8 changed files with 13 additions and 16 deletions
@@ -209,7 +209,7 @@ class FirCallResolver(
resultType = if (classId.isLocal) { resultType = if (classId.isLocal) {
typeForQualifierByDeclaration(referencedSymbol.fir, resultType) typeForQualifierByDeclaration(referencedSymbol.fir, resultType)
?: resultType.resolvedTypeFromPrototype( ?: resultType.resolvedTypeFromPrototype(
StandardClassIds.Unit(symbolProvider).constructType(emptyArray(), isNullable = false) session.builtinTypes.unitType.type//StandardClassIds.Unit(symbolProvider).constructType(emptyArray(), isNullable = false)
) )
} else { } else {
typeForQualifier(this) typeForQualifier(this)
@@ -319,7 +319,7 @@ fun BodyResolveComponents.typeForQualifier(resolvedQualifier: FirResolvedQualifi
} }
// TODO: Handle no value type here // TODO: Handle no value type here
return resultType.resolvedTypeFromPrototype( return resultType.resolvedTypeFromPrototype(
StandardClassIds.Unit(symbolProvider).constructType(emptyArray(), isNullable = false) session.builtinTypes.unitType.type//StandardClassIds.Unit(symbolProvider).constructType(emptyArray(), isNullable = false)
) )
} }
@@ -28,19 +28,19 @@ interface ConeInferenceContext : TypeSystemInferenceExtensionContext, ConeTypeCo
override val isErrorTypeAllowed: Boolean get() = false override val isErrorTypeAllowed: Boolean get() = false
override fun nullableNothingType(): SimpleTypeMarker { override fun nullableNothingType(): SimpleTypeMarker {
return StandardClassIds.Nothing(symbolProvider).constructType(emptyArray(), true) return session.builtinTypes.nullableNothingType.type//StandardClassIds.Nothing(symbolProvider).constructType(emptyArray(), true)
} }
override fun nullableAnyType(): SimpleTypeMarker { override fun nullableAnyType(): SimpleTypeMarker {
return StandardClassIds.Any(symbolProvider).constructType(emptyArray(), true) return session.builtinTypes.nullableAnyType.type//StandardClassIds.Any(symbolProvider).constructType(emptyArray(), true)
} }
override fun nothingType(): SimpleTypeMarker { override fun nothingType(): SimpleTypeMarker {
return StandardClassIds.Nothing(symbolProvider).constructType(emptyArray(), false) return session.builtinTypes.nothingType.type//StandardClassIds.Nothing(symbolProvider).constructType(emptyArray(), false)
} }
override fun anyType(): SimpleTypeMarker { override fun anyType(): SimpleTypeMarker {
return StandardClassIds.Any(symbolProvider).constructType(emptyArray(), false) return session.builtinTypes.anyType.type//StandardClassIds.Any(symbolProvider).constructType(emptyArray(), false)
} }
override fun createFlexibleType(lowerBound: SimpleTypeMarker, upperBound: SimpleTypeMarker): KotlinTypeMarker { override fun createFlexibleType(lowerBound: SimpleTypeMarker, upperBound: SimpleTypeMarker): KotlinTypeMarker {
@@ -72,7 +72,7 @@ internal object CreateFreshTypeVariableSubstitutorStage : ResolutionStage() {
is FirStarProjection -> csBuilder.addEqualityConstraint( is FirStarProjection -> csBuilder.addEqualityConstraint(
freshVariable.defaultType, freshVariable.defaultType,
typeParameter.bounds.firstOrNull()?.coneTypeUnsafe() typeParameter.bounds.firstOrNull()?.coneTypeUnsafe()
?: StandardClassIds.Any(sink.components.session.firSymbolProvider).constructType(emptyArray(), true), ?: sink.components.session.builtinTypes.nullableAnyType.type, //StandardClassIds.Any(sink.components.session.firSymbolProvider).constructType(emptyArray(), true),
SimpleConstraintSystemConstraintPosition SimpleConstraintSystemConstraintPosition
) )
else -> assert(typeArgument == FirTypePlaceholderProjection) { else -> assert(typeArgument == FirTypePlaceholderProjection) {
@@ -127,7 +127,7 @@ private fun extraLambdaInfo(
?: expectedType?.typeArguments?.singleOrNull()?.safeAs<ConeTypedProjection>()?.type?.takeIf { isFunctionSupertype } ?: expectedType?.typeArguments?.singleOrNull()?.safeAs<ConeTypedProjection>()?.type?.takeIf { isFunctionSupertype }
?: typeVariable.defaultType ?: typeVariable.defaultType
val nothingType = StandardClassIds.Nothing(argument.session.firSymbolProvider).constructType(emptyArray(), false) val nothingType = argument.session.builtinTypes.nothingType.type //StandardClassIds.Nothing(argument.session.firSymbolProvider).constructType(emptyArray(), false)
val parameters = argument.valueParameters?.map { val parameters = argument.valueParameters?.map {
it.returnTypeRef.coneTypeSafe<ConeKotlinType>() ?: nothingType it.returnTypeRef.coneTypeSafe<ConeKotlinType>() ?: nothingType
} ?: emptyList() } ?: emptyList()
@@ -166,7 +166,7 @@ private fun extractLambdaParameters(expectedType: ConeKotlinType, argument: FirA
val parameters = argument.valueParameters val parameters = argument.valueParameters
val expectedParameters = expectedType.extractParametersForFunctionalType(expectedTypeIsExtensionFunctionType) val expectedParameters = expectedType.extractParametersForFunctionalType(expectedTypeIsExtensionFunctionType)
val nullableAnyType = StandardClassIds.Any(argument.session.firSymbolProvider).constructType(emptyArray(), true) val nullableAnyType = argument.session.builtinTypes.nullableAnyType.type //StandardClassIds.Any(argument.session.firSymbolProvider).constructType(emptyArray(), true)
if (parameters.isEmpty()) { if (parameters.isEmpty()) {
return expectedParameters.map { it?.type ?: nullableAnyType } return expectedParameters.map { it?.type ?: nullableAnyType }
@@ -108,7 +108,7 @@ class PostponedArgumentsAnalyzer(
lambda: ResolvedLambdaAtom//, lambda: ResolvedLambdaAtom//,
//diagnosticHolder: KotlinDiagnosticsHolder //diagnosticHolder: KotlinDiagnosticsHolder
) { ) {
val unitType = Unit(components.session.firSymbolProvider).constructType(emptyArray(), false) val unitType = components.session.builtinTypes.unitType.type//Unit(components.session.firSymbolProvider).constructType(emptyArray(), false)
val stubsForPostponedVariables = c.bindingStubsForPostponedVariables() val stubsForPostponedVariables = c.bindingStubsForPostponedVariables()
val currentSubstitutor = c.buildCurrentSubstitutor(stubsForPostponedVariables.mapKeys { it.key.freshTypeConstructor(c) }) val currentSubstitutor = c.buildCurrentSubstitutor(stubsForPostponedVariables.mapKeys { it.key.freshTypeConstructor(c) })
@@ -264,10 +264,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
.transformArguments(integerLiteralTypeApproximator, null) .transformArguments(integerLiteralTypeApproximator, null)
when (resolved.operation) { when (resolved.operation) {
FirOperation.IS, FirOperation.NOT_IS -> { FirOperation.IS, FirOperation.NOT_IS -> {
resolved.resultType = FirResolvedTypeRefImpl( resolved.resultType = session.builtinTypes.booleanType
null,
StandardClassIds.Boolean(symbolProvider).constructType(emptyArray(), isNullable = false)
)
} }
FirOperation.AS -> { FirOperation.AS -> {
resolved.resultType = resolved.conversionTypeRef resolved.resultType = resolved.conversionTypeRef
@@ -164,7 +164,7 @@ interface ConeTypeContext : TypeSystemContext, TypeSystemOptimizationContext, Ty
require(this is ConeKotlinType) require(this is ConeKotlinType)
return this.typeArguments.getOrNull(index) return this.typeArguments.getOrNull(index)
?: StandardClassIds.Any(session.firSymbolProvider).constructType(emptyArray(), false) // TODO wtf ?: session.builtinTypes.anyType.type//StandardClassIds.Any(session.firSymbolProvider).constructType(emptyArray(), false) // TODO wtf
} }
override fun KotlinTypeMarker.asTypeArgument(): TypeArgumentMarker { override fun KotlinTypeMarker.asTypeArgument(): TypeArgumentMarker {
@@ -514,7 +514,7 @@ class ConeTypeCheckerContext(
val substitution = val substitution =
declaration.typeParameters.zip(type.typeArguments).associate { (parameter, argument) -> declaration.typeParameters.zip(type.typeArguments).associate { (parameter, argument) ->
parameter.symbol to ((argument as? ConeTypedProjection)?.type parameter.symbol to ((argument as? ConeTypedProjection)?.type
?: StandardClassIds.Any(session.firSymbolProvider).constructType(emptyArray(), isNullable = true)) ?: session.builtinTypes.nullableAnyType.type)//StandardClassIds.Any(session.firSymbolProvider).constructType(emptyArray(), isNullable = true))
} }
substitutorByMap(substitution) substitutorByMap(substitution)
} else { } else {