[FIR] Render backing fields by FirRenderer

This commit is contained in:
Roman Golyshev
2021-09-14 18:06:09 +03:00
committed by Space
parent 36b02082a6
commit bb2b0107c6
15 changed files with 63 additions and 0 deletions
@@ -5,24 +5,31 @@ FILE: backingFieldModifiers.kt
}
public final val a: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(1)
public get(): R|kotlin/Number|
public final val b: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(1)
public get(): R|kotlin/Number|
public final val c: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(1)
public get(): R|kotlin/Number|
public final val d: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(1)
public get(): R|kotlin/Number|
public final val e: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(1)
public get(): R|kotlin/Number|
public final val f: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(1)
public get(): R|kotlin/Number|
public final val g: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(1)
public get(): R|kotlin/Number|
}
@@ -6,15 +6,19 @@ FILE: A.kt
}
public final val a: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(1)
public get(): R|kotlin/Number|
public final val b: R|kotlin/Number|
internal <explicit backing field>: R|kotlin/Int| = Int(2)
public get(): R|kotlin/Number|
public final val c: R|kotlin/Number|
protected <explicit backing field>: R|kotlin/Int| = Int(3)
public get(): R|kotlin/Number|
public final val d: R|kotlin/Number|
public <explicit backing field>: R|kotlin/Int| = Int(5)
public get(): R|kotlin/Number|
public final fun rest(): R|kotlin/Unit| {
@@ -1,5 +1,6 @@
FILE: backingFieldWithSmartTypeParameters.kt
public final val items: R|kotlin/collections/List<kotlin/String>|
private <explicit backing field>: R|kotlin/collections/MutableList<kotlin/String>| = R|kotlin/collections/mutableListOf|<R|kotlin/String|>()
public get(): R|kotlin/collections/List<kotlin/String>|
public final fun test(): R|kotlin/Unit| {
R|/items|.R|SubstitutionOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(String(one more item))
@@ -1,6 +1,7 @@
FILE: explicitBackingFieldInInterface.kt
public abstract interface I : R|kotlin/Any| {
public abstract val it: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(10)
public get(): R|kotlin/Number|
}
@@ -8,31 +8,39 @@ FILE: explicitBackingFieldType.kt
public get(): R|kotlin/Int|
public final val it: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(4)
public get(): R|kotlin/Number|
public final val joke: R|kotlin/Number|
private <explicit backing field>: R|kotlin/String| = String(Haha)
public get(): R|kotlin/Number|
public final val incompatible: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Any?| = Int(42)
public get(): R|kotlin/Number|
public final val customGetterNeeded: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Number| = Int(42)
public get(): R|kotlin/Int|
public final val invertedTypes: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Number| = Int(42)
public get(): R|kotlin/Int| {
^ Int(30)
}
public final val uninitialized: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int|
public get(): R|kotlin/Number|
public final val uninitializedWithGetter: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int|
public get(): R|kotlin/Number| {
^ Int(2)
}
public final val initiaizedWithExplicitBackingField: R|kotlin/collections/List<kotlin/Int>| = R|kotlin/collections/listOf|<R|kotlin/Int|>(vararg(Int(1), Int(2)))
private <explicit backing field>: R|kotlin/collections/MutableList<kotlin/Int>|
public get(): R|kotlin/collections/List<kotlin/Int>|
public final val p: R|kotlin/Int| = Int(5)
@@ -41,6 +49,7 @@ FILE: explicitBackingFieldType.kt
}
public final var setterNeeded: R|kotlin/Int|
private <explicit backing field>: R|kotlin/String| = String(test)
public get(): R|kotlin/Int| {
^ this@R|/A|.F|/A.setterNeeded|.R|kotlin/String.length|
}
@@ -3,6 +3,7 @@ FILE: explicitBackingFieldsWithDelegates.kt
^ (Int(2) as R|kotlin/Number|)
}
)
private <explicit backing field>: R|kotlin/Int| = Int(10)
public get(): R|kotlin/Number| {
^ D|/thingWithDelefate|.R|kotlin/getValue|<R|kotlin/Number|>(Null(null), ::R|/thingWithDelefate|)
}
@@ -1,5 +1,6 @@
FILE: filePrivateBackingFieldAccess.kt
public final val list: R|kotlin/collections/List<kotlin/String>|
private <explicit backing field>: R|kotlin/collections/MutableList<kotlin/String>| = R|kotlin/collections/mutableListOf|<R|kotlin/String|>()
public get(): R|kotlin/collections/List<kotlin/String>|
public final fun add(s: R|kotlin/String|): R|kotlin/Unit| {
R|/list|.R|SubstitutionOverride<kotlin/collections/MutableList.add: R|kotlin/Boolean|>|(R|<local>/s|)
@@ -1,5 +1,6 @@
FILE: lateinitBackingFields.kt
public final var that: R|kotlin/Int|
private <explicit backing field>: R|kotlin/String|
public get(): R|kotlin/Int| {
^ F|/that|.R|kotlin/String.length|
}
@@ -11,18 +12,22 @@ FILE: lateinitBackingFields.kt
R|kotlin/io/println|(R|/that|)
}
public final lateinit var number: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(4)
public get(): R|kotlin/Number|
public set(value: R|kotlin/Number|): R|kotlin/Unit| {
F|/number| = Int(10)
}
public final val something: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(4)
public get(): R|kotlin/Number|
public final lateinit var oneMore: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(4)
public get(): R|kotlin/Number|
public set(value: R|kotlin/Number|): R|kotlin/Unit| {
F|/oneMore| = Int(10)
}
public final var thingWithNullableField: R|kotlin/Number|
private <explicit backing field>: R|kotlin/String?|
public get(): R|kotlin/Number| {
^ Int(20)
}
@@ -1,5 +1,6 @@
FILE: localVariablesWithBackingFields.kt
public final val that: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(239)
public get(): R|kotlin/Number|
public final fun test(): R|kotlin/Unit| {
lval a: R|kotlin/Number|
@@ -19,12 +20,14 @@ FILE: localVariablesWithBackingFields.kt
^ Int(2)
}
)
private <explicit backing field>: R|kotlin/Int| = Int(10)
public get(): R|kotlin/Number| {
^ this@R|/A|.D|/A.c|.R|kotlin/getValue|<R|kotlin/Int|>(this@R|/A|, ::R|/A.c|)
}
}
public final val R|A|.cc: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(10)
public get(): R|kotlin/Number|
public final fun R|A|.cc(): R|kotlin/Unit| {
lval it: <ERROR TYPE REF: Ambiguity: plus, [kotlin/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/sequences/plus]> = <Unresolved name: a>#.<Ambiguity: plus, [kotlin/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/collections/plus, kotlin/sequences/plus]>#(Int(2))
@@ -5,6 +5,7 @@ FILE: overriddenPropertiesWithExplicitBackingFields.kt
}
public open var it: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(3)
public get(): R|kotlin/Number|
public set(value: R|kotlin/Number|): R|kotlin/Unit| {
this@R|/A|.F|/A.it| = R|<local>/value|.R|kotlin/Number.toInt|()
@@ -5,6 +5,7 @@ FILE: propertyTypeNarrowing.kt
}
public final val it: R|kotlin/Number|
private <explicit backing field>: R|kotlin/Int| = Int(4)
public get(): R|kotlin/Number|
public final fun test(): R|kotlin/Int| {
@@ -5,6 +5,7 @@ FILE: randomWeirdBackingFields.kt
}
public abstract val foo: R|kotlin/collections/List<kotlin/Int>|
internal <explicit backing field>: R|kotlin/collections/MutableList<kotlin/Int>| = R|kotlin/collections/mutableListOf|<R|kotlin/Int|>()
public get(): R|kotlin/collections/List<kotlin/Int>|
}
@@ -1,3 +1,4 @@
FILE: redundantExplicitBackingField.kt
public final val it: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Int| = Int(42)
public get(): R|kotlin/Int|
@@ -16,38 +16,48 @@ FILE: untypedPropertyWithBackingFieldUsage.kt
^ F|/simpleTypeExpression|
}
public final val withFieldNoTypeBlock: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Double| = Double(3.14)
public get(): R|kotlin/Int| {
^ <Unresolved name: field>#.R|kotlin/text/toInt|()
}
public final val withFieldNoTypeExpression: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Double| = Double(3.14)
public get(): R|kotlin/Int| {
^ <Unresolved name: field>#.R|kotlin/text/toInt|()
}
public final val withFieldTypeBlock: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Double| = Double(3.14)
public get(): R|kotlin/Int| {
^ F|/withFieldTypeBlock|.R|kotlin/Double.toInt|()
}
public final val withFieldTypeExpression: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Double| = Double(3.14)
public get(): R|kotlin/Int| {
^ F|/withFieldTypeExpression|.R|kotlin/Double.toInt|()
}
public final val minimalFieldWithInitializer: <ERROR TYPE REF: Cannot infer variable type without initializer / getter / delegate>
private <explicit backing field>: R|kotlin/Int| = Int(1)
public get(): <ERROR TYPE REF: Cannot infer variable type without initializer / getter / delegate>
public final val minimalFieldWithNoInitializer: <ERROR TYPE REF: Cannot infer variable type without initializer / getter / delegate>
private <explicit backing field>: R|kotlin/Int|
public get(): <ERROR TYPE REF: Cannot infer variable type without initializer / getter / delegate>
public final val constWithFieldNoTypeBlock: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Double| = Double(3.14)
public get(): R|kotlin/Int| {
^ Int(10)
}
public final val constWithFieldNoTypeExpression: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Double| = Double(3.14)
public get(): R|kotlin/Int| {
^ Int(10)
}
public final val constWithFieldTypeBlock: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Double| = Double(3.14)
public get(): R|kotlin/Int| {
^ Int(10)
}
public final val constWithFieldTypeExpression: R|kotlin/Int|
private <explicit backing field>: R|kotlin/Double| = Double(3.14)
public get(): R|kotlin/Int| {
^ Int(10)
}
@@ -518,6 +518,12 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
if (!mode.renderPropertyAccessors) return
println()
pushIndent()
if (property.hasExplicitBackingField) {
property.backingField?.accept(this)
println()
}
property.getter?.accept(this)
if (property.getter?.body == null) {
println()
@@ -531,6 +537,17 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM
popIndent()
}
override fun visitBackingField(backingField: FirBackingField) {
print(backingField.visibility.asString() + " ")
print("<explicit backing field>: ")
backingField.returnTypeRef.accept(this)
backingField.initializer?.let {
print(" = ")
it.accept(this)
}
}
override fun visitSimpleFunction(simpleFunction: FirSimpleFunction) {
visitCallableDeclaration(simpleFunction)
simpleFunction.body?.renderBody()