[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
|
package org.jetbrains.kotlin.fir.java.enhancement
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.KtFakeSourceElementKind
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.descriptors.Modality
|
import org.jetbrains.kotlin.descriptors.Modality
|
||||||
|
import org.jetbrains.kotlin.fakeElement
|
||||||
import org.jetbrains.kotlin.fir.*
|
import org.jetbrains.kotlin.fir.*
|
||||||
import org.jetbrains.kotlin.fir.caches.FirCache
|
import org.jetbrains.kotlin.fir.caches.FirCache
|
||||||
import org.jetbrains.kotlin.fir.caches.FirCachesFactory
|
import org.jetbrains.kotlin.fir.caches.FirCachesFactory
|
||||||
@@ -307,8 +309,10 @@ class FirSignatureEnhancement(
|
|||||||
buildReceiverParameter {
|
buildReceiverParameter {
|
||||||
type = receiverType
|
type = receiverType
|
||||||
annotations += firMethod.valueParameters.first().annotations
|
annotations += firMethod.valueParameters.first().annotations
|
||||||
|
source = receiverType.source?.fakeElement(KtFakeSourceElementKind.ReceiverFromType)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this.name = name!!
|
this.name = name!!
|
||||||
status = firMethod.status
|
status = firMethod.status
|
||||||
symbol = FirNamedFunctionSymbol(methodId)
|
symbol = FirNamedFunctionSymbol(methodId)
|
||||||
@@ -569,6 +573,7 @@ class FirSignatureEnhancement(
|
|||||||
return buildResolvedTypeRef {
|
return buildResolvedTypeRef {
|
||||||
type = typeWithoutEnhancement.enhance(session, qualifiers) ?: typeWithoutEnhancement
|
type = typeWithoutEnhancement.enhance(session, qualifiers) ?: typeWithoutEnhancement
|
||||||
annotations += typeRef.annotations
|
annotations += typeRef.annotations
|
||||||
|
source = typeRef.source
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
+2
@@ -571,6 +571,7 @@ fun List<FirAnnotationCall>.filterUseSiteTarget(target: AnnotationUseSiteTarget)
|
|||||||
fun FirTypeRef.convertToReceiverParameter(): FirReceiverParameter {
|
fun FirTypeRef.convertToReceiverParameter(): FirReceiverParameter {
|
||||||
val typeRef = this
|
val typeRef = this
|
||||||
return buildReceiverParameter {
|
return buildReceiverParameter {
|
||||||
|
source = typeRef.source?.fakeElement(KtFakeSourceElementKind.ReceiverFromType)
|
||||||
@Suppress("UNCHECKED_CAST")
|
@Suppress("UNCHECKED_CAST")
|
||||||
annotations += (typeRef.annotations as List<FirAnnotationCall>).filterUseSiteTarget(AnnotationUseSiteTarget.RECEIVER)
|
annotations += (typeRef.annotations as List<FirAnnotationCall>).filterUseSiteTarget(AnnotationUseSiteTarget.RECEIVER)
|
||||||
(typeRef.annotations as MutableList<FirAnnotation>).removeIf { it.useSiteTarget == 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 {
|
fun FirImplicitTypeRef.asReceiverParameter(): FirReceiverParameter = buildReceiverParameter {
|
||||||
|
source = this@asReceiverParameter.source?.fakeElement(KtFakeSourceElementKind.ReceiverFromType)
|
||||||
type = this@asReceiverParameter
|
type = this@asReceiverParameter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -227,6 +227,10 @@ sealed class KtFakeSourceElementKind : KtSourceElementKind() {
|
|||||||
// for implicit conversion from int to long with `.toLong` function
|
// for implicit conversion from int to long with `.toLong` function
|
||||||
// e.g. val x: Long = 1 + 1 becomes val x: Long = (1 + 1).toLong()
|
// e.g. val x: Long = 1 + 1 becomes val x: Long = (1 + 1).toLong()
|
||||||
object IntToLongConversion : KtFakeSourceElementKind()
|
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 {
|
sealed class AbstractKtSourceElement {
|
||||||
|
|||||||
Reference in New Issue
Block a user