diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt index 6427bf2ddc2..e2cc0fb6a25 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/FirSyntheticCallGenerator.kt @@ -186,7 +186,7 @@ class FirSyntheticCallGenerator( val (typeParameter, returnType) = generateSyntheticSelectTypeParameter() - val argumentType = buildResolvedTypeRef { type = returnType.coneTypeUnsafe().createArrayOf(session) } + val argumentType = buildResolvedTypeRef { type = returnType.coneTypeUnsafe().createArrayOf() } val typeArgument = buildTypeProjectionWithVariance { typeRef = returnType variance = Variance.INVARIANT diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt index 6f7b9230e8d..97fe940deee 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/TransformUtils.kt @@ -8,7 +8,6 @@ package org.jetbrains.kotlin.fir.resolve.transformers import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.expressions.* -import org.jetbrains.kotlin.fir.expressions.impl.FirSingleExpressionBlock import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType import org.jetbrains.kotlin.fir.types.* @@ -94,7 +93,7 @@ internal fun FirValueParameter.transformVarargTypeToArrayType() { val returnType = returnTypeRef.coneTypeUnsafe() transformReturnTypeRef( StoreType, - returnTypeRef.withReplacedConeType(ConeKotlinTypeProjectionOut(returnType).createArrayOf(session)) + returnTypeRef.withReplacedConeType(ConeKotlinTypeProjectionOut(returnType).createArrayOf()) ) } } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt index 6aff6c15c17..0a322e0b375 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/resolve/transformers/body/resolve/FirExpressionsResolveTransformer.kt @@ -32,7 +32,6 @@ import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType import org.jetbrains.kotlin.fir.symbols.StandardClassIds import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol -import org.jetbrains.kotlin.fir.symbols.invoke import org.jetbrains.kotlin.fir.types.* import org.jetbrains.kotlin.fir.types.builder.* import org.jetbrains.kotlin.fir.visitors.* @@ -484,7 +483,6 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) : override fun transformGetClassCall(getClassCall: FirGetClassCall, data: ResolutionMode): CompositeTransformResult { val transformedGetClassCall = transformExpression(getClassCall, data).single as FirGetClassCall - val kClassSymbol = ClassId.fromString("kotlin/reflect/KClass")(session.firSymbolProvider) val typeOfExpression = when (val lhs = transformedGetClassCall.argument) { is FirResolvedQualifier -> { @@ -514,7 +512,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) : transformedGetClassCall.resultType = buildResolvedTypeRef { - type = kClassSymbol.constructType(arrayOf(typeOfExpression), false) + type = ClassId.fromString("kotlin/reflect/KClass").constructClassLikeType(arrayOf(typeOfExpression), false) } return transformedGetClassCall.compose() } diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ArrayUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ArrayUtils.kt index 5ad611a22a9..c42a344315b 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ArrayUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/ArrayUtils.kt @@ -6,16 +6,10 @@ package org.jetbrains.kotlin.fir.types import org.jetbrains.kotlin.fir.FirSession -import org.jetbrains.kotlin.fir.resolve.FirSymbolProvider -import org.jetbrains.kotlin.fir.resolve.constructType -import org.jetbrains.kotlin.fir.resolve.firSymbolProvider import org.jetbrains.kotlin.fir.symbols.StandardClassIds -import org.jetbrains.kotlin.fir.symbols.invoke -fun ConeTypeProjection.createArrayOf(session: FirSession, nullable: Boolean = false): ConeKotlinType { - val symbolProvider: FirSymbolProvider = session.firSymbolProvider - +fun ConeTypeProjection.createArrayOf(nullable: Boolean = false): ConeKotlinType { if (this is ConeKotlinTypeProjection) { val type = type.lowerBoundIfFlexible() if (type is ConeClassLikeType) { @@ -23,12 +17,12 @@ fun ConeTypeProjection.createArrayOf(session: FirSession, nullable: Boolean = fa val primitiveArrayId = StandardClassIds.primitiveArrayTypeByElementType[classId] ?: StandardClassIds.unsignedArrayTypeByElementType[classId] if (primitiveArrayId != null) { - return primitiveArrayId.invoke(symbolProvider).constructType(emptyArray(), nullable) + return primitiveArrayId.constructClassLikeType(emptyArray(), nullable) } } } - return StandardClassIds.Array.invoke(symbolProvider).constructType(arrayOf(this), nullable) + return StandardClassIds.Array.constructClassLikeType(arrayOf(this), nullable) } @@ -40,7 +34,7 @@ fun ConeKotlinType.arrayElementType(session: FirSession): ConeKotlinType? { return (type.typeArguments.first() as ConeKotlinTypeProjection).type val elementType = StandardClassIds.elementTypeByPrimitiveArrayType[classId] ?: StandardClassIds.elementTypeByUnsignedArrayType[classId] if (elementType != null) { - return elementType.invoke(session.firSymbolProvider).constructType(emptyArray(), isNullable = false) + return elementType.constructClassLikeType(emptyArray(), isNullable = false) } return null diff --git a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt index 14f9402f728..65481462520 100644 --- a/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt +++ b/compiler/fir/resolve/src/org/jetbrains/kotlin/fir/types/TypeUtils.kt @@ -9,8 +9,10 @@ import org.jetbrains.kotlin.fir.resolve.toSymbol import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag +import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl import org.jetbrains.kotlin.fir.types.impl.ConeClassLikeTypeImpl import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl +import org.jetbrains.kotlin.name.ClassId import org.jetbrains.kotlin.resolve.calls.NewCommonSuperTypeCalculator import org.jetbrains.kotlin.types.AbstractNullabilityChecker import org.jetbrains.kotlin.types.AbstractStrictEqualityTypeChecker @@ -189,6 +191,13 @@ fun ConeClassLikeLookupTag.constructClassType( return ConeClassLikeTypeImpl(this, typeArguments, isNullable) } +fun ClassId.constructClassLikeType( + typeArguments: Array, + isNullable: Boolean, +): ConeClassLikeType { + return ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(this), typeArguments, isNullable) +} + fun ConeClassifierLookupTag.constructType(typeArguments: Array, isNullable: Boolean): ConeLookupTagBasedType { return when (this) { is ConeTypeParameterLookupTag -> ConeTypeParameterTypeImpl(this, isNullable)