FIR: handle labeled super reference properly
This commit is contained in:
committed by
Mikhail Glukhikh
parent
260683c20e
commit
7b01cf7b04
+1
-1
@@ -27,7 +27,7 @@ internal class FirDelegatedConstructorCallImpl(
|
||||
override var constructedTypeRef: FirTypeRef,
|
||||
override val isThis: Boolean,
|
||||
) : FirDelegatedConstructorCall() {
|
||||
override var calleeReference: FirReference = if (isThis) FirExplicitThisReference(source, null) else FirExplicitSuperReference(source, constructedTypeRef)
|
||||
override var calleeReference: FirReference = if (isThis) FirExplicitThisReference(source, null) else FirExplicitSuperReference(source, null, constructedTypeRef)
|
||||
override val isSuper: Boolean get() = !isThis
|
||||
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
|
||||
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
abstract class FirSuperReference : FirReference() {
|
||||
abstract override val source: FirSourceElement?
|
||||
abstract val labelName: String?
|
||||
abstract val superTypeRef: FirTypeRef
|
||||
|
||||
override fun <R, D> accept(visitor: FirVisitor<R, D>, data: D): R = visitor.visitSuperReference(this, data)
|
||||
|
||||
+2
@@ -21,11 +21,13 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
@FirBuilderDsl
|
||||
class FirExplicitSuperReferenceBuilder {
|
||||
var source: FirSourceElement? = null
|
||||
var labelName: String? = null
|
||||
lateinit var superTypeRef: FirTypeRef
|
||||
|
||||
fun build(): FirSuperReference {
|
||||
return FirExplicitSuperReference(
|
||||
source,
|
||||
labelName,
|
||||
superTypeRef,
|
||||
)
|
||||
}
|
||||
|
||||
+1
@@ -17,6 +17,7 @@ import org.jetbrains.kotlin.fir.visitors.*
|
||||
|
||||
internal class FirExplicitSuperReference(
|
||||
override val source: FirSourceElement?,
|
||||
override val labelName: String?,
|
||||
override var superTypeRef: FirTypeRef,
|
||||
) : FirSuperReference() {
|
||||
override fun <R, D> acceptChildren(visitor: FirVisitor<R, D>, data: D) {
|
||||
|
||||
@@ -962,6 +962,9 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
|
||||
print("super<")
|
||||
superReference.superTypeRef.accept(this)
|
||||
print(">")
|
||||
superReference.labelName?.let {
|
||||
print("@$it#")
|
||||
}
|
||||
}
|
||||
|
||||
override fun visitQualifiedAccess(qualifiedAccess: FirQualifiedAccess) {
|
||||
|
||||
+1
-1
@@ -105,7 +105,7 @@ object ImplementationConfigurator : AbstractFirTreeImplementationConfigurator()
|
||||
impl(delegatedConstructorCall) {
|
||||
default(
|
||||
"calleeReference",
|
||||
"if (isThis) FirExplicitThisReference(source, null) else FirExplicitSuperReference(source, constructedTypeRef)"
|
||||
"if (isThis) FirExplicitThisReference(source, null) else FirExplicitSuperReference(source, null, constructedTypeRef)"
|
||||
)
|
||||
default("isSuper") {
|
||||
value = "!isThis"
|
||||
|
||||
+1
@@ -521,6 +521,7 @@ object NodeConfigurator : AbstractFieldConfigurator<FirTreeBuilder>(FirTreeBuild
|
||||
}
|
||||
|
||||
superReference.configure {
|
||||
+stringField("labelName", nullable = true)
|
||||
+field("superTypeRef", typeRef, withReplace = true)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user