[FIR] introduce KtFakeSourceElementKind.ReceiverFromType
^KT-54417
This commit is contained in:
committed by
Space Team
parent
8cd404c84c
commit
22cfea5058
+5
@@ -5,8 +5,10 @@
|
||||
|
||||
package org.jetbrains.kotlin.fir.java.enhancement
|
||||
|
||||
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.descriptors.Modality
|
||||
import org.jetbrains.kotlin.fakeElement
|
||||
import org.jetbrains.kotlin.fir.*
|
||||
import org.jetbrains.kotlin.fir.caches.FirCache
|
||||
import org.jetbrains.kotlin.fir.caches.FirCachesFactory
|
||||
@@ -307,8 +309,10 @@ class FirSignatureEnhancement(
|
||||
buildReceiverParameter {
|
||||
type = receiverType
|
||||
annotations += firMethod.valueParameters.first().annotations
|
||||
source = receiverType.source?.fakeElement(KtFakeSourceElementKind.ReceiverFromType)
|
||||
}
|
||||
}
|
||||
|
||||
this.name = name!!
|
||||
status = firMethod.status
|
||||
symbol = FirNamedFunctionSymbol(methodId)
|
||||
@@ -569,6 +573,7 @@ class FirSignatureEnhancement(
|
||||
return buildResolvedTypeRef {
|
||||
type = typeWithoutEnhancement.enhance(session, qualifiers) ?: typeWithoutEnhancement
|
||||
annotations += typeRef.annotations
|
||||
source = typeRef.source
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+2
@@ -571,6 +571,7 @@ fun List<FirAnnotationCall>.filterUseSiteTarget(target: AnnotationUseSiteTarget)
|
||||
fun FirTypeRef.convertToReceiverParameter(): FirReceiverParameter {
|
||||
val typeRef = this
|
||||
return buildReceiverParameter {
|
||||
source = typeRef.source?.fakeElement(KtFakeSourceElementKind.ReceiverFromType)
|
||||
@Suppress("UNCHECKED_CAST")
|
||||
annotations += (typeRef.annotations as List<FirAnnotationCall>).filterUseSiteTarget(AnnotationUseSiteTarget.RECEIVER)
|
||||
(typeRef.annotations as MutableList<FirAnnotation>).removeIf { it.useSiteTarget == AnnotationUseSiteTarget.RECEIVER }
|
||||
@@ -579,6 +580,7 @@ fun FirTypeRef.convertToReceiverParameter(): FirReceiverParameter {
|
||||
}
|
||||
|
||||
fun FirImplicitTypeRef.asReceiverParameter(): FirReceiverParameter = buildReceiverParameter {
|
||||
source = this@asReceiverParameter.source?.fakeElement(KtFakeSourceElementKind.ReceiverFromType)
|
||||
type = this@asReceiverParameter
|
||||
}
|
||||
|
||||
|
||||
@@ -227,6 +227,10 @@ sealed class KtFakeSourceElementKind : KtSourceElementKind() {
|
||||
// for implicit conversion from int to long with `.toLong` function
|
||||
// e.g. val x: Long = 1 + 1 becomes val x: Long = (1 + 1).toLong()
|
||||
object IntToLongConversion : KtFakeSourceElementKind()
|
||||
|
||||
// for extension receiver type the corresponding receiver parameter is generated
|
||||
// with a fake sources which refers to this the type
|
||||
object ReceiverFromType : KtFakeSourceElementKind()
|
||||
}
|
||||
|
||||
sealed class AbstractKtSourceElement {
|
||||
|
||||
Reference in New Issue
Block a user