FIR: Do not retrieve symbol for type construction
This commit is contained in:
+1
-1
@@ -186,7 +186,7 @@ class FirSyntheticCallGenerator(
|
||||
|
||||
val (typeParameter, returnType) = generateSyntheticSelectTypeParameter()
|
||||
|
||||
val argumentType = buildResolvedTypeRef { type = returnType.coneTypeUnsafe<ConeKotlinType>().createArrayOf(session) }
|
||||
val argumentType = buildResolvedTypeRef { type = returnType.coneTypeUnsafe<ConeKotlinType>().createArrayOf() }
|
||||
val typeArgument = buildTypeProjectionWithVariance {
|
||||
typeRef = returnType
|
||||
variance = Variance.INVARIANT
|
||||
|
||||
+1
-2
@@ -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<ConeKotlinType>()
|
||||
transformReturnTypeRef(
|
||||
StoreType,
|
||||
returnTypeRef.withReplacedConeType(ConeKotlinTypeProjectionOut(returnType).createArrayOf(session))
|
||||
returnTypeRef.withReplacedConeType(ConeKotlinTypeProjectionOut(returnType).createArrayOf())
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
+1
-3
@@ -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<FirStatement> {
|
||||
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()
|
||||
}
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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<out ConeTypeProjection>,
|
||||
isNullable: Boolean,
|
||||
): ConeClassLikeType {
|
||||
return ConeClassLikeTypeImpl(ConeClassLikeLookupTagImpl(this), typeArguments, isNullable)
|
||||
}
|
||||
|
||||
fun ConeClassifierLookupTag.constructType(typeArguments: Array<out ConeTypeProjection>, isNullable: Boolean): ConeLookupTagBasedType {
|
||||
return when (this) {
|
||||
is ConeTypeParameterLookupTag -> ConeTypeParameterTypeImpl(this, isNullable)
|
||||
|
||||
Reference in New Issue
Block a user