FIR2IR: handle deserialized class reference inside GetClassCall
This commit is contained in:
committed by
Denis Zharkov
parent
781bfa20e8
commit
955c7a1e5b
@@ -22,6 +22,7 @@ import org.jetbrains.kotlin.fir.references.FirResolvedNamedReference
|
|||||||
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
import org.jetbrains.kotlin.fir.resolve.firSymbolProvider
|
||||||
import org.jetbrains.kotlin.fir.resolve.isIteratorNext
|
import org.jetbrains.kotlin.fir.resolve.isIteratorNext
|
||||||
import org.jetbrains.kotlin.fir.resolve.scope
|
import org.jetbrains.kotlin.fir.resolve.scope
|
||||||
|
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||||
import org.jetbrains.kotlin.fir.resolve.transformers.IntegerLiteralTypeApproximationTransformer
|
import org.jetbrains.kotlin.fir.resolve.transformers.IntegerLiteralTypeApproximationTransformer
|
||||||
import org.jetbrains.kotlin.fir.scopes.impl.FirIntegerOperator
|
import org.jetbrains.kotlin.fir.scopes.impl.FirIntegerOperator
|
||||||
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol
|
||||||
@@ -780,7 +781,12 @@ class Fir2IrVisitor(
|
|||||||
override fun visitGetClassCall(getClassCall: FirGetClassCall, data: Any?): IrElement {
|
override fun visitGetClassCall(getClassCall: FirGetClassCall, data: Any?): IrElement {
|
||||||
val argument = getClassCall.argument
|
val argument = getClassCall.argument
|
||||||
val irType = getClassCall.typeRef.toIrType()
|
val irType = getClassCall.typeRef.toIrType()
|
||||||
val irClassType = argument.typeRef.toIrType()
|
val irClassType =
|
||||||
|
if (argument is FirClassReferenceExpression) {
|
||||||
|
argument.classTypeRef.toIrType()
|
||||||
|
} else {
|
||||||
|
argument.typeRef.toIrType()
|
||||||
|
}
|
||||||
val irClassReferenceSymbol = when (argument) {
|
val irClassReferenceSymbol = when (argument) {
|
||||||
is FirResolvedReifiedParameterReference -> {
|
is FirResolvedReifiedParameterReference -> {
|
||||||
classifierStorage.getIrTypeParameterSymbol(argument.symbol, ConversionTypeContext.DEFAULT)
|
classifierStorage.getIrTypeParameterSymbol(argument.symbol, ConversionTypeContext.DEFAULT)
|
||||||
@@ -794,6 +800,12 @@ class Fir2IrVisitor(
|
|||||||
}
|
}
|
||||||
classifierStorage.getIrClassSymbol(symbol)
|
classifierStorage.getIrClassSymbol(symbol)
|
||||||
}
|
}
|
||||||
|
is FirClassReferenceExpression -> {
|
||||||
|
val type = argument.classTypeRef.coneTypeSafe<ConeClassLikeType>()
|
||||||
|
(type?.lookupTag?.toSymbol(session) as? FirClassSymbol<*>)?.let {
|
||||||
|
classifierStorage.getIrClassSymbol(it)
|
||||||
|
}
|
||||||
|
}
|
||||||
else -> null
|
else -> null
|
||||||
}
|
}
|
||||||
return getClassCall.convertWithOffsets { startOffset, endOffset ->
|
return getClassCall.convertWithOffsets { startOffset, endOffset ->
|
||||||
|
|||||||
Reference in New Issue
Block a user