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 (typeParameter, returnType) = generateSyntheticSelectTypeParameter()
|
||||||
|
|
||||||
val argumentType = buildResolvedTypeRef { type = returnType.coneTypeUnsafe<ConeKotlinType>().createArrayOf(session) }
|
val argumentType = buildResolvedTypeRef { type = returnType.coneTypeUnsafe<ConeKotlinType>().createArrayOf() }
|
||||||
val typeArgument = buildTypeProjectionWithVariance {
|
val typeArgument = buildTypeProjectionWithVariance {
|
||||||
typeRef = returnType
|
typeRef = returnType
|
||||||
variance = Variance.INVARIANT
|
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.FirElement
|
||||||
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
import org.jetbrains.kotlin.fir.declarations.FirValueParameter
|
||||||
import org.jetbrains.kotlin.fir.expressions.*
|
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.references.*
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType
|
import org.jetbrains.kotlin.fir.scopes.impl.withReplacedConeType
|
||||||
import org.jetbrains.kotlin.fir.types.*
|
import org.jetbrains.kotlin.fir.types.*
|
||||||
@@ -94,7 +93,7 @@ internal fun FirValueParameter.transformVarargTypeToArrayType() {
|
|||||||
val returnType = returnTypeRef.coneTypeUnsafe<ConeKotlinType>()
|
val returnType = returnTypeRef.coneTypeUnsafe<ConeKotlinType>()
|
||||||
transformReturnTypeRef(
|
transformReturnTypeRef(
|
||||||
StoreType,
|
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.StandardClassIds
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
import org.jetbrains.kotlin.fir.symbols.impl.FirClassSymbol
|
||||||
import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol
|
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.*
|
||||||
import org.jetbrains.kotlin.fir.types.builder.*
|
import org.jetbrains.kotlin.fir.types.builder.*
|
||||||
import org.jetbrains.kotlin.fir.visitors.*
|
import org.jetbrains.kotlin.fir.visitors.*
|
||||||
@@ -484,7 +483,6 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
|
|||||||
|
|
||||||
override fun transformGetClassCall(getClassCall: FirGetClassCall, data: ResolutionMode): CompositeTransformResult<FirStatement> {
|
override fun transformGetClassCall(getClassCall: FirGetClassCall, data: ResolutionMode): CompositeTransformResult<FirStatement> {
|
||||||
val transformedGetClassCall = transformExpression(getClassCall, data).single as FirGetClassCall
|
val transformedGetClassCall = transformExpression(getClassCall, data).single as FirGetClassCall
|
||||||
val kClassSymbol = ClassId.fromString("kotlin/reflect/KClass")(session.firSymbolProvider)
|
|
||||||
|
|
||||||
val typeOfExpression = when (val lhs = transformedGetClassCall.argument) {
|
val typeOfExpression = when (val lhs = transformedGetClassCall.argument) {
|
||||||
is FirResolvedQualifier -> {
|
is FirResolvedQualifier -> {
|
||||||
@@ -514,7 +512,7 @@ class FirExpressionsResolveTransformer(transformer: FirBodyResolveTransformer) :
|
|||||||
|
|
||||||
transformedGetClassCall.resultType =
|
transformedGetClassCall.resultType =
|
||||||
buildResolvedTypeRef {
|
buildResolvedTypeRef {
|
||||||
type = kClassSymbol.constructType(arrayOf(typeOfExpression), false)
|
type = ClassId.fromString("kotlin/reflect/KClass").constructClassLikeType(arrayOf(typeOfExpression), false)
|
||||||
}
|
}
|
||||||
return transformedGetClassCall.compose()
|
return transformedGetClassCall.compose()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,16 +6,10 @@
|
|||||||
package org.jetbrains.kotlin.fir.types
|
package org.jetbrains.kotlin.fir.types
|
||||||
|
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
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.StandardClassIds
|
||||||
import org.jetbrains.kotlin.fir.symbols.invoke
|
|
||||||
|
|
||||||
|
|
||||||
fun ConeTypeProjection.createArrayOf(session: FirSession, nullable: Boolean = false): ConeKotlinType {
|
fun ConeTypeProjection.createArrayOf(nullable: Boolean = false): ConeKotlinType {
|
||||||
val symbolProvider: FirSymbolProvider = session.firSymbolProvider
|
|
||||||
|
|
||||||
if (this is ConeKotlinTypeProjection) {
|
if (this is ConeKotlinTypeProjection) {
|
||||||
val type = type.lowerBoundIfFlexible()
|
val type = type.lowerBoundIfFlexible()
|
||||||
if (type is ConeClassLikeType) {
|
if (type is ConeClassLikeType) {
|
||||||
@@ -23,12 +17,12 @@ fun ConeTypeProjection.createArrayOf(session: FirSession, nullable: Boolean = fa
|
|||||||
val primitiveArrayId =
|
val primitiveArrayId =
|
||||||
StandardClassIds.primitiveArrayTypeByElementType[classId] ?: StandardClassIds.unsignedArrayTypeByElementType[classId]
|
StandardClassIds.primitiveArrayTypeByElementType[classId] ?: StandardClassIds.unsignedArrayTypeByElementType[classId]
|
||||||
if (primitiveArrayId != null) {
|
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
|
return (type.typeArguments.first() as ConeKotlinTypeProjection).type
|
||||||
val elementType = StandardClassIds.elementTypeByPrimitiveArrayType[classId] ?: StandardClassIds.elementTypeByUnsignedArrayType[classId]
|
val elementType = StandardClassIds.elementTypeByPrimitiveArrayType[classId] ?: StandardClassIds.elementTypeByUnsignedArrayType[classId]
|
||||||
if (elementType != null) {
|
if (elementType != null) {
|
||||||
return elementType.invoke(session.firSymbolProvider).constructType(emptyArray(), isNullable = false)
|
return elementType.constructClassLikeType(emptyArray(), isNullable = false)
|
||||||
}
|
}
|
||||||
|
|
||||||
return null
|
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.ConeClassLikeLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
|
import org.jetbrains.kotlin.fir.symbols.ConeClassifierLookupTag
|
||||||
import org.jetbrains.kotlin.fir.symbols.ConeTypeParameterLookupTag
|
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.ConeClassLikeTypeImpl
|
||||||
import org.jetbrains.kotlin.fir.types.impl.ConeTypeParameterTypeImpl
|
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.resolve.calls.NewCommonSuperTypeCalculator
|
||||||
import org.jetbrains.kotlin.types.AbstractNullabilityChecker
|
import org.jetbrains.kotlin.types.AbstractNullabilityChecker
|
||||||
import org.jetbrains.kotlin.types.AbstractStrictEqualityTypeChecker
|
import org.jetbrains.kotlin.types.AbstractStrictEqualityTypeChecker
|
||||||
@@ -189,6 +191,13 @@ fun ConeClassLikeLookupTag.constructClassType(
|
|||||||
return ConeClassLikeTypeImpl(this, typeArguments, isNullable)
|
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 {
|
fun ConeClassifierLookupTag.constructType(typeArguments: Array<out ConeTypeProjection>, isNullable: Boolean): ConeLookupTagBasedType {
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is ConeTypeParameterLookupTag -> ConeTypeParameterTypeImpl(this, isNullable)
|
is ConeTypeParameterLookupTag -> ConeTypeParameterTypeImpl(this, isNullable)
|
||||||
|
|||||||
Reference in New Issue
Block a user