From bb2b0107c61240c8271683520a7eb5d7c86e0a8c Mon Sep 17 00:00:00 2001 From: Roman Golyshev Date: Tue, 14 Sep 2021 18:06:09 +0300 Subject: [PATCH] [FIR] Render backing fields by `FirRenderer` --- .../backingField/backingFieldModifiers.fir.txt | 7 +++++++ .../backingField/backingFieldVisibility.fir.txt | 4 ++++ .../backingFieldWithSmartTypeParameters.fir.txt | 1 + .../explicitBackingFieldInInterface.fir.txt | 1 + .../explicitBackingFieldType.fir.txt | 9 +++++++++ .../explicitBackingFieldsWithDelegates.fir.txt | 1 + .../filePrivateBackingFieldAccess.fir.txt | 1 + .../backingField/lateinitBackingFields.fir.txt | 5 +++++ .../localVariablesWithBackingFields.fir.txt | 3 +++ ...nPropertiesWithExplicitBackingFields.fir.txt | 1 + .../backingField/propertyTypeNarrowing.fir.txt | 1 + .../randomWeirdBackingFields.fir.txt | 1 + .../redundantExplicitBackingField.fir.txt | 1 + ...untypedPropertyWithBackingFieldUsage.fir.txt | 10 ++++++++++ .../src/org/jetbrains/kotlin/fir/FirRenderer.kt | 17 +++++++++++++++++ 15 files changed, 63 insertions(+) diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldModifiers.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldModifiers.fir.txt index c625b85a47e..d9704e79dad 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldModifiers.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldModifiers.fir.txt @@ -5,24 +5,31 @@ FILE: backingFieldModifiers.kt } public final val a: R|kotlin/Number| + private : R|kotlin/Int| = Int(1) public get(): R|kotlin/Number| public final val b: R|kotlin/Number| + private : R|kotlin/Int| = Int(1) public get(): R|kotlin/Number| public final val c: R|kotlin/Number| + private : R|kotlin/Int| = Int(1) public get(): R|kotlin/Number| public final val d: R|kotlin/Number| + private : R|kotlin/Int| = Int(1) public get(): R|kotlin/Number| public final val e: R|kotlin/Number| + private : R|kotlin/Int| = Int(1) public get(): R|kotlin/Number| public final val f: R|kotlin/Number| + private : R|kotlin/Int| = Int(1) public get(): R|kotlin/Number| public final val g: R|kotlin/Number| + private : R|kotlin/Int| = Int(1) public get(): R|kotlin/Number| } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldVisibility.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldVisibility.fir.txt index be2d478e6d5..2942fb461c5 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldVisibility.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldVisibility.fir.txt @@ -6,15 +6,19 @@ FILE: A.kt } public final val a: R|kotlin/Number| + private : R|kotlin/Int| = Int(1) public get(): R|kotlin/Number| public final val b: R|kotlin/Number| + internal : R|kotlin/Int| = Int(2) public get(): R|kotlin/Number| public final val c: R|kotlin/Number| + protected : R|kotlin/Int| = Int(3) public get(): R|kotlin/Number| public final val d: R|kotlin/Number| + public : R|kotlin/Int| = Int(5) public get(): R|kotlin/Number| public final fun rest(): R|kotlin/Unit| { diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldWithSmartTypeParameters.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldWithSmartTypeParameters.fir.txt index 698030afacf..c41ad3dee9e 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldWithSmartTypeParameters.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/backingFieldWithSmartTypeParameters.fir.txt @@ -1,5 +1,6 @@ FILE: backingFieldWithSmartTypeParameters.kt public final val items: R|kotlin/collections/List| + private : R|kotlin/collections/MutableList| = R|kotlin/collections/mutableListOf|() public get(): R|kotlin/collections/List| public final fun test(): R|kotlin/Unit| { R|/items|.R|SubstitutionOverride|(String(one more item)) diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldInInterface.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldInInterface.fir.txt index 4b958d93460..cf51500ce25 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldInInterface.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldInInterface.fir.txt @@ -1,6 +1,7 @@ FILE: explicitBackingFieldInInterface.kt public abstract interface I : R|kotlin/Any| { public abstract val it: R|kotlin/Number| + private : R|kotlin/Int| = Int(10) public get(): R|kotlin/Number| } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldType.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldType.fir.txt index d31823ad2f8..cb3882f832d 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldType.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldType.fir.txt @@ -8,31 +8,39 @@ FILE: explicitBackingFieldType.kt public get(): R|kotlin/Int| public final val it: R|kotlin/Number| + private : R|kotlin/Int| = Int(4) public get(): R|kotlin/Number| public final val joke: R|kotlin/Number| + private : R|kotlin/String| = String(Haha) public get(): R|kotlin/Number| public final val incompatible: R|kotlin/Number| + private : R|kotlin/Any?| = Int(42) public get(): R|kotlin/Number| public final val customGetterNeeded: R|kotlin/Int| + private : R|kotlin/Number| = Int(42) public get(): R|kotlin/Int| public final val invertedTypes: R|kotlin/Int| + private : R|kotlin/Number| = Int(42) public get(): R|kotlin/Int| { ^ Int(30) } public final val uninitialized: R|kotlin/Number| + private : R|kotlin/Int| public get(): R|kotlin/Number| public final val uninitializedWithGetter: R|kotlin/Number| + private : R|kotlin/Int| public get(): R|kotlin/Number| { ^ Int(2) } public final val initiaizedWithExplicitBackingField: R|kotlin/collections/List| = R|kotlin/collections/listOf|(vararg(Int(1), Int(2))) + private : R|kotlin/collections/MutableList| public get(): R|kotlin/collections/List| public final val p: R|kotlin/Int| = Int(5) @@ -41,6 +49,7 @@ FILE: explicitBackingFieldType.kt } public final var setterNeeded: R|kotlin/Int| + private : R|kotlin/String| = String(test) public get(): R|kotlin/Int| { ^ this@R|/A|.F|/A.setterNeeded|.R|kotlin/String.length| } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldsWithDelegates.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldsWithDelegates.fir.txt index d81a414de45..9c1f33a90e3 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldsWithDelegates.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/explicitBackingFieldsWithDelegates.fir.txt @@ -3,6 +3,7 @@ FILE: explicitBackingFieldsWithDelegates.kt ^ (Int(2) as R|kotlin/Number|) } ) + private : R|kotlin/Int| = Int(10) public get(): R|kotlin/Number| { ^ D|/thingWithDelefate|.R|kotlin/getValue|(Null(null), ::R|/thingWithDelefate|) } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/filePrivateBackingFieldAccess.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/filePrivateBackingFieldAccess.fir.txt index 49a2c8c6146..f8daf7214ed 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/filePrivateBackingFieldAccess.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/filePrivateBackingFieldAccess.fir.txt @@ -1,5 +1,6 @@ FILE: filePrivateBackingFieldAccess.kt public final val list: R|kotlin/collections/List| + private : R|kotlin/collections/MutableList| = R|kotlin/collections/mutableListOf|() public get(): R|kotlin/collections/List| public final fun add(s: R|kotlin/String|): R|kotlin/Unit| { R|/list|.R|SubstitutionOverride|(R|/s|) diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/lateinitBackingFields.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/lateinitBackingFields.fir.txt index dbb883cc3e8..112fccd3064 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/lateinitBackingFields.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/lateinitBackingFields.fir.txt @@ -1,5 +1,6 @@ FILE: lateinitBackingFields.kt public final var that: R|kotlin/Int| + private : 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 : 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 : R|kotlin/Int| = Int(4) public get(): R|kotlin/Number| public final lateinit var oneMore: R|kotlin/Number| + private : 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 : R|kotlin/String?| public get(): R|kotlin/Number| { ^ Int(20) } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/localVariablesWithBackingFields.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/localVariablesWithBackingFields.fir.txt index a225361cd37..eec13d1e17f 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/localVariablesWithBackingFields.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/localVariablesWithBackingFields.fir.txt @@ -1,5 +1,6 @@ FILE: localVariablesWithBackingFields.kt public final val that: R|kotlin/Number| + private : 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 : R|kotlin/Int| = Int(10) public get(): R|kotlin/Number| { ^ this@R|/A|.D|/A.c|.R|kotlin/getValue|(this@R|/A|, ::R|/A.c|) } } public final val R|A|.cc: R|kotlin/Number| + private : R|kotlin/Int| = Int(10) public get(): R|kotlin/Number| public final fun R|A|.cc(): R|kotlin/Unit| { lval it: = #.#(Int(2)) diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/overriddenPropertiesWithExplicitBackingFields.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/overriddenPropertiesWithExplicitBackingFields.fir.txt index 81fadcabbbf..40adf460767 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/overriddenPropertiesWithExplicitBackingFields.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/overriddenPropertiesWithExplicitBackingFields.fir.txt @@ -5,6 +5,7 @@ FILE: overriddenPropertiesWithExplicitBackingFields.kt } public open var it: R|kotlin/Number| + private : 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|/value|.R|kotlin/Number.toInt|() diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/propertyTypeNarrowing.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/propertyTypeNarrowing.fir.txt index f1f6c6808a8..e7d9ed0cae0 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/propertyTypeNarrowing.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/propertyTypeNarrowing.fir.txt @@ -5,6 +5,7 @@ FILE: propertyTypeNarrowing.kt } public final val it: R|kotlin/Number| + private : R|kotlin/Int| = Int(4) public get(): R|kotlin/Number| public final fun test(): R|kotlin/Int| { diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/randomWeirdBackingFields.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/randomWeirdBackingFields.fir.txt index beaec6f87c5..19cc72dea95 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/randomWeirdBackingFields.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/randomWeirdBackingFields.fir.txt @@ -5,6 +5,7 @@ FILE: randomWeirdBackingFields.kt } public abstract val foo: R|kotlin/collections/List| + internal : R|kotlin/collections/MutableList| = R|kotlin/collections/mutableListOf|() public get(): R|kotlin/collections/List| } diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/redundantExplicitBackingField.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/redundantExplicitBackingField.fir.txt index 88536b92d68..242036b4db6 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/redundantExplicitBackingField.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/redundantExplicitBackingField.fir.txt @@ -1,3 +1,4 @@ FILE: redundantExplicitBackingField.kt public final val it: R|kotlin/Int| + private : R|kotlin/Int| = Int(42) public get(): R|kotlin/Int| diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/untypedPropertyWithBackingFieldUsage.fir.txt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/untypedPropertyWithBackingFieldUsage.fir.txt index eca620ce422..4b5b2a72f9e 100644 --- a/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/untypedPropertyWithBackingFieldUsage.fir.txt +++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/properties/backingField/untypedPropertyWithBackingFieldUsage.fir.txt @@ -16,38 +16,48 @@ FILE: untypedPropertyWithBackingFieldUsage.kt ^ F|/simpleTypeExpression| } public final val withFieldNoTypeBlock: R|kotlin/Int| + private : R|kotlin/Double| = Double(3.14) public get(): R|kotlin/Int| { ^ #.R|kotlin/text/toInt|() } public final val withFieldNoTypeExpression: R|kotlin/Int| + private : R|kotlin/Double| = Double(3.14) public get(): R|kotlin/Int| { ^ #.R|kotlin/text/toInt|() } public final val withFieldTypeBlock: R|kotlin/Int| + private : 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 : R|kotlin/Double| = Double(3.14) public get(): R|kotlin/Int| { ^ F|/withFieldTypeExpression|.R|kotlin/Double.toInt|() } public final val minimalFieldWithInitializer: + private : R|kotlin/Int| = Int(1) public get(): public final val minimalFieldWithNoInitializer: + private : R|kotlin/Int| public get(): public final val constWithFieldNoTypeBlock: R|kotlin/Int| + private : R|kotlin/Double| = Double(3.14) public get(): R|kotlin/Int| { ^ Int(10) } public final val constWithFieldNoTypeExpression: R|kotlin/Int| + private : R|kotlin/Double| = Double(3.14) public get(): R|kotlin/Int| { ^ Int(10) } public final val constWithFieldTypeBlock: R|kotlin/Int| + private : R|kotlin/Double| = Double(3.14) public get(): R|kotlin/Int| { ^ Int(10) } public final val constWithFieldTypeExpression: R|kotlin/Int| + private : R|kotlin/Double| = Double(3.14) public get(): R|kotlin/Int| { ^ Int(10) } diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt index 5a3f50ef0e2..c3f9267cc49 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -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(": ") + backingField.returnTypeRef.accept(this) + + backingField.initializer?.let { + print(" = ") + it.accept(this) + } + } + override fun visitSimpleFunction(simpleFunction: FirSimpleFunction) { visitCallableDeclaration(simpleFunction) simpleFunction.body?.renderBody()