From dcf64779a923213c7faea76ffe5f4ffa8103dd72 Mon Sep 17 00:00:00 2001 From: Ilya Kirillov Date: Tue, 9 Mar 2021 19:43:12 +0100 Subject: [PATCH] FIR: add declaration attributes checking to rawFirBuilder/lightTree tests --- .../kotlin/fir/utils/ArrayMapOwner.kt | 4 + .../AbstractLightTree2FirConverterTestCase.kt | 3 +- .../testData/rawBuilder/declarations/F.txt | 4 +- .../declarations/NestedOfAliasedType.txt | 8 +- .../declarations/NestedSuperType.txt | 10 +-- .../rawBuilder/declarations/annotation.txt | 24 +++--- .../rawBuilder/declarations/complexTypes.txt | 6 +- .../declarations/constructorInObject.txt | 20 ++--- .../constructorOfAnonymousObject.txt | 2 +- .../propertyAccessorsContractDescription.txt | 18 ++--- .../rawBuilder/declarations/delegates.txt | 2 +- .../rawBuilder/declarations/derivedClass.txt | 6 +- .../declarations/emptyAnonymousObject.txt | 2 +- .../rawBuilder/declarations/enums.txt | 76 +++++++++---------- .../rawBuilder/declarations/enums2.txt | 20 ++--- .../rawBuilder/declarations/expectActual.txt | 4 +- .../rawBuilder/declarations/external.txt | 8 +- .../declarations/genericFunctions.txt | 2 +- .../initBlockWithDeclarations.txt | 8 +- .../rawBuilder/declarations/nestedClass.txt | 10 +-- .../declarations/noPrimaryConstructor.txt | 6 +- .../rawBuilder/declarations/simpleClass.txt | 16 ++-- .../declarations/simpleTypeAlias.txt | 2 +- .../declarations/typeAliasWithGeneric.txt | 4 +- .../declarations/typeParameterVsNested.txt | 12 +-- .../declarations/typeParameters.txt | 4 +- .../rawBuilder/declarations/where.txt | 2 +- .../rawBuilder/expressions/annotated.txt | 8 +- .../rawBuilder/expressions/arrayAccess.txt | 4 +- .../expressions/callableReferences.txt | 4 +- .../testData/rawBuilder/expressions/calls.txt | 4 +- .../rawBuilder/expressions/classReference.txt | 2 +- .../expressions/collectionLiterals.txt | 20 ++--- .../rawBuilder/expressions/destructuring.txt | 8 +- .../testData/rawBuilder/expressions/for.txt | 6 +- .../testData/rawBuilder/expressions/init.txt | 4 +- .../rawBuilder/expressions/lambda.txt | 6 +- .../rawBuilder/expressions/locals.txt | 6 +- .../testData/rawBuilder/expressions/super.txt | 2 +- .../testData/rawBuilder/expressions/these.txt | 4 +- .../testData/rawBuilder/expressions/unary.txt | 8 +- .../builder/AbstractRawFirBuilderTestCase.kt | 2 +- .../org/jetbrains/kotlin/fir/FirRenderer.kt | 43 ++++++++++- 43 files changed, 227 insertions(+), 187 deletions(-) diff --git a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/utils/ArrayMapOwner.kt b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/utils/ArrayMapOwner.kt index e79a740aa03..fc701c07f6a 100644 --- a/compiler/fir/cones/src/org/jetbrains/kotlin/fir/utils/ArrayMapOwner.kt +++ b/compiler/fir/cones/src/org/jetbrains/kotlin/fir/utils/ArrayMapOwner.kt @@ -70,6 +70,10 @@ abstract class TypeRegistry { return idPerType.computeIfAbsent(kClass) { idCounter.getAndIncrement() } } + fun allValuesThreadUnsafeForRendering(): Map, Int> { + return idPerType + } + protected val indices: Collection get() = idPerType.values } diff --git a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/AbstractLightTree2FirConverterTestCase.kt b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/AbstractLightTree2FirConverterTestCase.kt index bbd7208e544..19e68c18ff0 100644 --- a/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/AbstractLightTree2FirConverterTestCase.kt +++ b/compiler/fir/raw-fir/light-tree2fir/tests/org/jetbrains/kotlin/fir/lightTree/AbstractLightTree2FirConverterTestCase.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.lightTree +import org.jetbrains.kotlin.fir.FirRenderer import org.jetbrains.kotlin.fir.builder.AbstractRawFirBuilderTestCase import org.jetbrains.kotlin.fir.builder.StubFirScopeProvider import org.jetbrains.kotlin.fir.render @@ -22,7 +23,7 @@ abstract class AbstractLightTree2FirConverterTestCase : AbstractRawFirBuilderTes scopeProvider = StubFirScopeProvider, stubMode = false ).buildFirFile(Paths.get(filePath)) - val firDump = firFile.render() + val firDump = firFile.render(mode = FirRenderer.RenderMode.WithDeclarationAttributes) val expectedFile = File(filePath.replace(".kt", ".txt")) KotlinTestUtils.assertEqualsToFile(expectedFile, firDump) diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/F.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/F.txt index c6b3ab5716e..3ffb99b33b2 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/F.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/F.txt @@ -1,12 +1,12 @@ FILE: F.kt public? open class A : R|kotlin/Any| { - public? constructor(): R|A| { + public? [ContainingClassKey=A] constructor(): R|A| { super() } } public? final? class B : A { - public? constructor(): R|B| { + public? [ContainingClassKey=B] constructor(): R|B| { super<>() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/NestedOfAliasedType.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/NestedOfAliasedType.txt index e5f4290faa3..1395f16c2c2 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/NestedOfAliasedType.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/NestedOfAliasedType.txt @@ -1,11 +1,11 @@ FILE: NestedOfAliasedType.kt public? abstract class A : R|kotlin/Any| { - public? constructor(): R|A| { + public? [ContainingClassKey=A] constructor(): R|A| { super() } public? abstract class Nested : R|kotlin/Any| { - public? constructor(): R|A.Nested| { + public? [ContainingClassKey=Nested] constructor(): R|A.Nested| { super() } @@ -14,12 +14,12 @@ FILE: NestedOfAliasedType.kt } public? final typealias TA = A public? final? class B : TA { - public? constructor(): R|B| { + public? [ContainingClassKey=B] constructor(): R|B| { super() } public? final? class NestedInB : Nested { - public? constructor(): R|B.NestedInB| { + public? [ContainingClassKey=NestedInB] constructor(): R|B.NestedInB| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/NestedSuperType.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/NestedSuperType.txt index c317afc75d0..d28133d3887 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/NestedSuperType.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/NestedSuperType.txt @@ -1,16 +1,16 @@ FILE: NestedSuperType.kt public? abstract class My : R|kotlin/Any| { - public? constructor(): R|p/My| { + public? [ContainingClassKey=My] constructor(): R|p/My| { super() } public? abstract class NestedOne : My { - public? constructor(): R|p/My.NestedOne| { + public? [ContainingClassKey=NestedOne] constructor(): R|p/My.NestedOne| { super() } public? abstract class NestedTwo : NestedOne { - public? constructor(): R|p/My.NestedOne.NestedTwo| { + public? [ContainingClassKey=NestedTwo] constructor(): R|p/My.NestedOne.NestedTwo| { super() } @@ -20,12 +20,12 @@ FILE: NestedSuperType.kt } public? final? class Your : My { - public? constructor(): R|p/Your| { + public? [ContainingClassKey=Your] constructor(): R|p/Your| { super() } public? final? class NestedThree : NestedOne { - public? constructor(): R|p/Your.NestedThree| { + public? [ContainingClassKey=NestedThree] constructor(): R|p/Your.NestedThree| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/annotation.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/annotation.txt index 363c62df575..d845402884b 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/annotation.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/annotation.txt @@ -1,52 +1,52 @@ FILE: annotation.kt @Target(AnnotationTarget#.CLASS#, AnnotationTarget#.PROPERTY#, AnnotationTarget#.LOCAL_VARIABLE#, AnnotationTarget#.VALUE_PARAMETER#, AnnotationTarget#.CONSTRUCTOR#, AnnotationTarget#.FUNCTION#, AnnotationTarget#.TYPE#) public? final? annotation class base : R|kotlin/Annotation| { - public? constructor(): R|base| { + public? [ContainingClassKey=base] constructor(): R|base| { super() } } @base() public? final? annotation class derived : R|kotlin/Annotation| { - public? constructor(): R|derived| { + public? [ContainingClassKey=derived] constructor(): R|derived| { super() } } @base() public? final? class correct : R|kotlin/Any| { - public? constructor(@base() x: Int): R|correct| { + public? [ContainingClassKey=correct] constructor(@base() x: Int): R|correct| { super() } - @base() public? final? val x: Int = R|/x| + @base() public? final? [IsFromVarargKey=false] val x: Int = R|/x| public? get(): Int - @base() public? constructor(): R|correct| { + @base() public? [ContainingClassKey=correct] constructor(): R|correct| { this(IntegerLiteral(0)) } } @base() public? final? enum class My : R|kotlin/Enum| { - private constructor(): R|My| { + private [ContainingClassKey=My] constructor(): R|My| { super|>() } - @base() public final static enum entry FIRST: R|My| = @base() object : R|My| { - private constructor(): R|| { + @base() public final static [ContainingClassKey=My] enum entry FIRST: R|My| = @base() object : R|My| { + private [ContainingClassKey=] constructor(): R|| { super() } } - @base() public final static enum entry SECOND: R|My| = @base() object : R|My| { - private constructor(): R|| { + @base() public final static [ContainingClassKey=My] enum entry SECOND: R|My| = @base() object : R|My| { + private [ContainingClassKey=] constructor(): R|| { super() } } - public final static fun values(): R|kotlin/Array| { + public final static [ContainingClassKey=My] fun values(): R|kotlin/Array| { } - public final static fun valueOf(value: R|kotlin/String|): R|My| { + public final static [ContainingClassKey=My] fun valueOf(value: R|kotlin/String|): R|My| { } } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/complexTypes.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/complexTypes.txt index 421e8eb7b9c..5b58c434dd3 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/complexTypes.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/complexTypes.txt @@ -1,11 +1,11 @@ FILE: complexTypes.kt public? final? class C : R|kotlin/Any| { - public? constructor(): R|a/b/C| { + public? [ContainingClassKey=C] constructor(): R|a/b/C| { super() } public? final? inner class D : R|kotlin/Any| { - public? constructor(): R|a/b/C.D| { + public? [ContainingClassKey=D] constructor(): R|a/b/C.D| { super() } @@ -14,6 +14,6 @@ FILE: complexTypes.kt } public? final? interface Test : R|kotlin/Any| { public? final? val x: a.b.C.D, *> - public? get(): a.b.C.D, *> + [ContainingClassKey=Test] public? get(): a.b.C.D, *> } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorInObject.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorInObject.txt index cc7128cace8..fd28390e7b6 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorInObject.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorInObject.txt @@ -1,6 +1,6 @@ FILE: constructorInObject.kt public? final? object A : R|kotlin/Any| { - public? constructor(): R|A| { + public? [ContainingClassKey=A] constructor(): R|A| { super() } @@ -9,35 +9,35 @@ FILE: constructorInObject.kt } public? final? enum class B : R|kotlin/Enum| { - private constructor(): R|B| { + private [ContainingClassKey=B] constructor(): R|B| { super|>() } - public final static enum entry X: R|B| = object : R|B| { - private constructor(): R|| { + public final static [ContainingClassKey=B] enum entry X: R|B| = object : R|B| { + private [ContainingClassKey=] constructor(): R|| { super() } - public? constructor(): R|| { + public? [ContainingClassKey=] constructor(): R|| { super() } } - public final static fun values(): R|kotlin/Array| { + public final static [ContainingClassKey=B] fun values(): R|kotlin/Array| { } - public final static fun valueOf(value: R|kotlin/String|): R|B| { + public final static [ContainingClassKey=B] fun valueOf(value: R|kotlin/String|): R|B| { } } public? final? class C : R|kotlin/Any| { - public? constructor(): R|C| { + public? [ContainingClassKey=C] constructor(): R|C| { super() } public? final? companion object Companion : R|kotlin/Any| { - public? constructor(): R|C.Companion| { + public? [ContainingClassKey=Companion] constructor(): R|C.Companion| { super() } @@ -45,7 +45,7 @@ FILE: constructorInObject.kt } public? final? val anonObject: = object : R|kotlin/Any| { - public? constructor(): R|| { + public? [ContainingClassKey=] constructor(): R|| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.txt index 84e8265bdc2..6f6673c7ad1 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/constructorOfAnonymousObject.txt @@ -1,7 +1,7 @@ FILE: constructorOfAnonymousObject.kt private final? fun resolveAccessorCall(suspendPropertyDescriptor: PropertyDescriptor, context: TranslationContext): ResolvedCall { ^resolveAccessorCall object : ResolvedCall { - private constructor(): R|| { + private [ContainingClassKey=] constructor(): R|| { super<>() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/contracts/newSyntax/propertyAccessorsContractDescription.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/contracts/newSyntax/propertyAccessorsContractDescription.txt index 5d8285e7470..64b764e892d 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/contracts/newSyntax/propertyAccessorsContractDescription.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/contracts/newSyntax/propertyAccessorsContractDescription.txt @@ -1,36 +1,36 @@ FILE: propertyAccessorsContractDescription.kt public? final? class MyClass : R|kotlin/Any| { - public? constructor(): R|MyClass| { + public? [ContainingClassKey=MyClass] constructor(): R|MyClass| { super() } public? final? var myInt: Int = IntegerLiteral(0) - public? get(): Int + [ContainingClassKey=MyClass] public? get(): Int [Contract description] < returnsNotNull#() > { ^ IntegerLiteral(1) } - public? set(value: Int): R|kotlin/Unit| { + [ContainingClassKey=MyClass] public? set(value: Int): R|kotlin/Unit| { field# = value#.times#(IntegerLiteral(10)) } } public? final? class AnotherClass : R|kotlin/Any| { - public? constructor(multiplier: Int): R|AnotherClass| { + public? [ContainingClassKey=AnotherClass] constructor(multiplier: Int): R|AnotherClass| { super() } public? final? var anotherInt: Int = IntegerLiteral(0) - public? get(): Int + [ContainingClassKey=AnotherClass] public? get(): Int [Contract description] < returnsNotNull#() > { ^ IntegerLiteral(1) } - public? set(value: Int): R|kotlin/Unit| + [ContainingClassKey=AnotherClass] public? set(value: Int): R|kotlin/Unit| [Contract description] < returns#() > @@ -40,19 +40,19 @@ FILE: propertyAccessorsContractDescription.kt } public? final? class SomeClass : R|kotlin/Any| { - public? constructor(multiplier: Int?): R|SomeClass| { + public? [ContainingClassKey=SomeClass] constructor(multiplier: Int?): R|SomeClass| { super() } public? final? var someInt: Int = IntegerLiteral(0) - public? get(): Int + [ContainingClassKey=SomeClass] public? get(): Int [Contract description] < returnsNotNull#() > { ^ IntegerLiteral(1) } - public? set(value: Int): R|kotlin/Unit| + [ContainingClassKey=SomeClass] public? set(value: Int): R|kotlin/Unit| [Contract description] < returns#().implies#(!=(value#, Null(null))) > diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/delegates.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/delegates.txt index 9d0742ad319..0413d461605 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/delegates.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/delegates.txt @@ -7,7 +7,7 @@ FILE: delegates.kt ^ D|/x|.getValue#(Null(null), ::R|/x|) } public? final? val delegate: = object : ReadWriteProperty { - private constructor(): R|| { + private [ContainingClassKey=] constructor(): R|| { super<>() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/derivedClass.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/derivedClass.txt index a62783e521f..455c033df97 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/derivedClass.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/derivedClass.txt @@ -1,15 +1,15 @@ FILE: derivedClass.kt public? open class Base : R|kotlin/Any| { - public? constructor(x: T): R|Base| { + public? [ContainingClassKey=Base] constructor(x: T): R|Base| { super() } - public? final? val x: T = R|/x| + public? final? [IsFromVarargKey=false] val x: T = R|/x| public? get(): T } public? final? class Derived : Base { - public? constructor(x: T): R|Derived| { + public? [ContainingClassKey=Derived] constructor(x: T): R|Derived| { super>(x#) } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.txt index 3f8ff2f506e..0575bb86bf4 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/emptyAnonymousObject.txt @@ -1,7 +1,7 @@ FILE: emptyAnonymousObject.kt public? final? fun test(): R|kotlin/Unit| { lval x: = object : R|kotlin/Any| { - private constructor(): R|| { + private [ContainingClassKey=] constructor(): R|| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums.txt index c66710a551e..fb945f9aabe 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums.txt @@ -1,32 +1,32 @@ FILE: enums.kt public? final? enum class Order : R|kotlin/Enum| { - private constructor(): R|Order| { + private [ContainingClassKey=Order] constructor(): R|Order| { super|>() } - public final static enum entry FIRST: R|Order| - public final static enum entry SECOND: R|Order| - public final static enum entry THIRD: R|Order| - public final static fun values(): R|kotlin/Array| { + public final static [ContainingClassKey=Order] enum entry FIRST: R|Order| + public final static [ContainingClassKey=Order] enum entry SECOND: R|Order| + public final static [ContainingClassKey=Order] enum entry THIRD: R|Order| + public final static [ContainingClassKey=Order] fun values(): R|kotlin/Array| { } - public final static fun valueOf(value: R|kotlin/String|): R|Order| { + public final static [ContainingClassKey=Order] fun valueOf(value: R|kotlin/String|): R|Order| { } } public? final? enum class Planet : R|kotlin/Enum| { - private constructor(m: Double, r: Double): R|Planet| { + private [ContainingClassKey=Planet] constructor(m: Double, r: Double): R|Planet| { super|>() } - public? final? val m: Double = R|/m| + public? final? [IsFromVarargKey=false] val m: Double = R|/m| public? get(): Double - internal final? val r: Double = R|/r| + internal final? [IsFromVarargKey=false] val r: Double = R|/r| internal get(): Double - public final static enum entry MERCURY: R|Planet| = object : R|Planet| { - private constructor(): R|| { + public final static [ContainingClassKey=Planet] enum entry MERCURY: R|Planet| = object : R|Planet| { + private [ContainingClassKey=] constructor(): R|| { super(Double(1.0), Double(2.0)) } @@ -36,8 +36,8 @@ FILE: enums.kt } - public final static enum entry VENERA: R|Planet| = object : R|Planet| { - private constructor(): R|| { + public final static [ContainingClassKey=Planet] enum entry VENERA: R|Planet| = object : R|Planet| { + private [ContainingClassKey=] constructor(): R|| { super(Double(3.0), Double(4.0)) } @@ -47,8 +47,8 @@ FILE: enums.kt } - public final static enum entry EARTH: R|Planet| = object : R|Planet| { - private constructor(): R|| { + public final static [ContainingClassKey=Planet] enum entry EARTH: R|Planet| = object : R|Planet| { + private [ContainingClassKey=] constructor(): R|| { super(Double(5.0), Double(6.0)) } @@ -59,79 +59,79 @@ FILE: enums.kt } public? final? val g: Double = G#.times#(m#).div#(r#.times#(r#)) - public? get(): Double + [ContainingClassKey=Planet] public? get(): Double public? abstract fun sayHello(): R|kotlin/Unit| public? final? companion object Companion : R|kotlin/Any| { - private constructor(): R|Planet.Companion| { + private [ContainingClassKey=Companion] constructor(): R|Planet.Companion| { super() } public? final? const val G: = Double(6.67E-11) - public? get(): + [ContainingClassKey=Companion] public? get(): } - public final static fun values(): R|kotlin/Array| { + public final static [ContainingClassKey=Planet] fun values(): R|kotlin/Array| { } - public final static fun valueOf(value: R|kotlin/String|): R|Planet| { + public final static [ContainingClassKey=Planet] fun valueOf(value: R|kotlin/String|): R|Planet| { } } public? final? enum class PseudoInsn : R|kotlin/Enum| { - private constructor(signature: String = String(()V)): R|PseudoInsn| { + private [ContainingClassKey=PseudoInsn] constructor(signature: String = String(()V)): R|PseudoInsn| { super|>() } - public? final? val signature: String = R|/signature| + public? final? [IsFromVarargKey=false] val signature: String = R|/signature| public? get(): String - public final static enum entry FIX_STACK_BEFORE_JUMP: R|PseudoInsn| = object : R|PseudoInsn| { - private constructor(): R|| { + public final static [ContainingClassKey=PseudoInsn] enum entry FIX_STACK_BEFORE_JUMP: R|PseudoInsn| = object : R|PseudoInsn| { + private [ContainingClassKey=] constructor(): R|| { super() } } - public final static enum entry FAKE_ALWAYS_TRUE_IFEQ: R|PseudoInsn| = object : R|PseudoInsn| { - private constructor(): R|| { + public final static [ContainingClassKey=PseudoInsn] enum entry FAKE_ALWAYS_TRUE_IFEQ: R|PseudoInsn| = object : R|PseudoInsn| { + private [ContainingClassKey=] constructor(): R|| { super(String(()I)) } } - public final static enum entry FAKE_ALWAYS_FALSE_IFEQ: R|PseudoInsn| = object : R|PseudoInsn| { - private constructor(): R|| { + public final static [ContainingClassKey=PseudoInsn] enum entry FAKE_ALWAYS_FALSE_IFEQ: R|PseudoInsn| = object : R|PseudoInsn| { + private [ContainingClassKey=] constructor(): R|| { super(String(()I)) } } - public final static enum entry SAVE_STACK_BEFORE_TRY: R|PseudoInsn| = object : R|PseudoInsn| { - private constructor(): R|| { + public final static [ContainingClassKey=PseudoInsn] enum entry SAVE_STACK_BEFORE_TRY: R|PseudoInsn| = object : R|PseudoInsn| { + private [ContainingClassKey=] constructor(): R|| { super() } } - public final static enum entry RESTORE_STACK_IN_TRY_CATCH: R|PseudoInsn| = object : R|PseudoInsn| { - private constructor(): R|| { + public final static [ContainingClassKey=PseudoInsn] enum entry RESTORE_STACK_IN_TRY_CATCH: R|PseudoInsn| = object : R|PseudoInsn| { + private [ContainingClassKey=] constructor(): R|| { super() } } - public final static enum entry STORE_NOT_NULL: R|PseudoInsn| = object : R|PseudoInsn| { - private constructor(): R|| { + public final static [ContainingClassKey=PseudoInsn] enum entry STORE_NOT_NULL: R|PseudoInsn| = object : R|PseudoInsn| { + private [ContainingClassKey=] constructor(): R|| { super() } } - public final static enum entry AS_NOT_NULL: R|PseudoInsn| = object : R|PseudoInsn| { - private constructor(): R|| { + public final static [ContainingClassKey=PseudoInsn] enum entry AS_NOT_NULL: R|PseudoInsn| = object : R|PseudoInsn| { + private [ContainingClassKey=] constructor(): R|| { super(String((Ljava/lang/Object;)Ljava/lang/Object;)) } @@ -140,10 +140,10 @@ FILE: enums.kt public? final? fun emit(): R|kotlin/Unit| { } - public final static fun values(): R|kotlin/Array| { + public final static [ContainingClassKey=PseudoInsn] fun values(): R|kotlin/Array| { } - public final static fun valueOf(value: R|kotlin/String|): R|PseudoInsn| { + public final static [ContainingClassKey=PseudoInsn] fun valueOf(value: R|kotlin/String|): R|PseudoInsn| { } } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums2.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums2.txt index a56c4c8077b..0a4c7ac8a69 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums2.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/enums2.txt @@ -2,27 +2,27 @@ FILE: enums2.kt public? final? interface Some : R|kotlin/Any| { } public? final? object O1 : Some { - private constructor(): R|O1| { + private [ContainingClassKey=O1] constructor(): R|O1| { super<>() } } public? final? object O2 : Some { - private constructor(): R|O2| { + private [ContainingClassKey=O2] constructor(): R|O2| { super<>() } } public? final? enum class SomeEnum : R|kotlin/Enum| { - private constructor(x: Some): R|SomeEnum| { + private [ContainingClassKey=SomeEnum] constructor(x: Some): R|SomeEnum| { super|>() } - public? final? val x: Some = R|/x| + public? final? [IsFromVarargKey=false] val x: Some = R|/x| public? get(): Some - public final static enum entry FIRST: R|SomeEnum| = object : R|SomeEnum| { - private constructor(): R|| { + public final static [ContainingClassKey=SomeEnum] enum entry FIRST: R|SomeEnum| = object : R|SomeEnum| { + private [ContainingClassKey=] constructor(): R|| { super(O1#) } @@ -32,8 +32,8 @@ FILE: enums2.kt } - public final static enum entry SECOND: R|SomeEnum| = object : R|SomeEnum| { - private constructor(): R|| { + public final static [ContainingClassKey=SomeEnum] enum entry SECOND: R|SomeEnum| = object : R|SomeEnum| { + private [ContainingClassKey=] constructor(): R|| { super(O2#) } @@ -45,10 +45,10 @@ FILE: enums2.kt public? abstract fun check(y: Some): Boolean - public final static fun values(): R|kotlin/Array| { + public final static [ContainingClassKey=SomeEnum] fun values(): R|kotlin/Array| { } - public final static fun valueOf(value: R|kotlin/String|): R|SomeEnum| { + public final static [ContainingClassKey=SomeEnum] fun valueOf(value: R|kotlin/String|): R|SomeEnum| { } } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectActual.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectActual.txt index 1bf748afb05..e9e2201006b 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectActual.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/expectActual.txt @@ -1,6 +1,6 @@ FILE: expectActual.kt public? final? expect class MyClass : R|kotlin/Any| { - public? expect constructor(): R|MyClass| { + public? expect [ContainingClassKey=MyClass] constructor(): R|MyClass| { super() } @@ -9,7 +9,7 @@ FILE: expectActual.kt public? final? expect val x: Int public? get(): Int public? final? actual class MyClass : R|kotlin/Any| { - public? constructor(): R|MyClass| { + public? [ContainingClassKey=MyClass] constructor(): R|MyClass| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/external.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/external.txt index 8c13828c075..5f3cb7c7ee4 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/external.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/external.txt @@ -1,6 +1,6 @@ FILE: external.kt public? final? external class External : R|kotlin/Any| { - public? constructor(): R|External| { + public? [ContainingClassKey=External] constructor(): R|External| { super() } @@ -9,15 +9,15 @@ FILE: external.kt public? final? external val x: Int public? external get(): Int public? final? class NotExternal : R|kotlin/Any| { - public? constructor(): R|NotExternal| { + public? [ContainingClassKey=NotExternal] constructor(): R|NotExternal| { super() } public? final? external fun bar(): String public? final? var y: Int - public? external get(): Int - public? set(value: Int): R|kotlin/Unit| { + [ContainingClassKey=NotExternal] public? external get(): Int + [ContainingClassKey=NotExternal] public? set(value: Int): R|kotlin/Unit| { } } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/genericFunctions.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/genericFunctions.txt index dce2180005d..f99a3f391e6 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/genericFunctions.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/genericFunctions.txt @@ -5,7 +5,7 @@ FILE: genericFunctions.kt ^safeAs (this# as? T) } public? abstract class Summator : R|kotlin/Any| { - public? constructor(): R|Summator| { + public? [ContainingClassKey=Summator] constructor(): R|Summator| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/initBlockWithDeclarations.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/initBlockWithDeclarations.txt index 42e3e12fde8..97df679a768 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/initBlockWithDeclarations.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/initBlockWithDeclarations.txt @@ -1,12 +1,12 @@ FILE: initBlockWithDeclarations.kt public? final? class X : R|kotlin/Any| { - public? constructor(): R|X| { + public? [ContainingClassKey=X] constructor(): R|X| { super() } init { local final? class classInInit : R|kotlin/Any| { - public? constructor(): R|X.classInInit| { + public? [ContainingClassKey=classInInit] constructor(): R|X.classInInit| { super() } @@ -22,13 +22,13 @@ FILE: initBlockWithDeclarations.kt } public? final? object : R|kotlin/Any| { - private constructor(): R|| { + private [ContainingClassKey=] constructor(): R|| { super() } init { local final? class classInInit : R|kotlin/Any| { - public? constructor(): R|.classInInit| { + public? [ContainingClassKey=classInInit] constructor(): R|.classInInit| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/nestedClass.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/nestedClass.txt index 95071a2c119..76f6c3b7075 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/nestedClass.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/nestedClass.txt @@ -1,27 +1,27 @@ FILE: nestedClass.kt public? abstract class Base : R|kotlin/Any| { - public? constructor(s: String): R|Base| { + public? [ContainingClassKey=Base] constructor(s: String): R|Base| { super() } - public? final? val s: String = R|/s| + public? final? [IsFromVarargKey=false] val s: String = R|/s| public? get(): String } public? final? class Outer : R|kotlin/Any| { - public? constructor(): R|Outer| { + public? [ContainingClassKey=Outer] constructor(): R|Outer| { super() } public? final? class Derived : Base { - public? constructor(s: String): R|Outer.Derived| { + public? [ContainingClassKey=Derived] constructor(s: String): R|Outer.Derived| { super(s#) } } public? final? object Obj : Base { - private constructor(): R|Outer.Obj| { + private [ContainingClassKey=Obj] constructor(): R|Outer.Obj| { super(String()) } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/noPrimaryConstructor.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/noPrimaryConstructor.txt index ff9575ff5ef..291d79c7e44 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/noPrimaryConstructor.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/noPrimaryConstructor.txt @@ -1,14 +1,14 @@ FILE: noPrimaryConstructor.kt public? final? class NoPrimary : R|kotlin/Any| { public? final? val x: String - public? get(): String + [ContainingClassKey=NoPrimary] public? get(): String - public? constructor(x: String): R|NoPrimary| { + public? [ContainingClassKey=NoPrimary] constructor(x: String): R|NoPrimary| { super() this#.x# = x# } - public? constructor(): R|NoPrimary| { + public? [ContainingClassKey=NoPrimary] constructor(): R|NoPrimary| { this(String()) } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt index 632683ce5d5..92e2c238f3f 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleClass.txt @@ -3,35 +3,35 @@ FILE: simpleClass.kt public? final? fun foo(x: Int, y: String): String public? final? val bar: Boolean - public? get(): Boolean + [ContainingClassKey=SomeInterface] public? get(): Boolean } public? final? class SomeClass : SomeInterface { - public? constructor(): R|SomeClass| { + public? [ContainingClassKey=SomeClass] constructor(): R|SomeClass| { super<>() } private final? val baz: = IntegerLiteral(42) - private get(): + [ContainingClassKey=SomeClass] private get(): public? open? override fun foo(x: Int, y: String): String { ^foo y#.plus#(x#).plus#(baz#) } public? open? override var bar: Boolean - public? get(): Boolean { + [ContainingClassKey=SomeClass] public? get(): Boolean { ^ Boolean(true) } - public? set(value: Boolean): R|kotlin/Unit| { + [ContainingClassKey=SomeClass] public? set(value: Boolean): R|kotlin/Unit| { } public? final? lateinit var fau: Double - public? get(): Double - public? set(value: Double): R|kotlin/Unit| + [ContainingClassKey=SomeClass] public? get(): Double + [ContainingClassKey=SomeClass] public? set(value: Double): R|kotlin/Unit| } public? final? inline class InlineClass : R|kotlin/Any| { - public? constructor(): R|InlineClass| { + public? [ContainingClassKey=InlineClass] constructor(): R|InlineClass| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt index 70eb461eaa2..dceab676b7b 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/simpleTypeAlias.txt @@ -3,7 +3,7 @@ FILE: simpleTypeAlias.kt } public? final typealias C = B public? final? class D : C { - public? constructor(): R|D| { + public? [ContainingClassKey=D] constructor(): R|D| { super<>() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt index b6be39cce45..f93ad3f3727 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeAliasWithGeneric.txt @@ -1,6 +1,6 @@ FILE: typeAliasWithGeneric.kt public? open class A : R|kotlin/Any| { - public? constructor(): R|A| { + public? [ContainingClassKey=A] constructor(): R|A| { super() } @@ -9,7 +9,7 @@ FILE: typeAliasWithGeneric.kt } public? final typealias C = B public? final? class D : C { - public? constructor(): R|D| { + public? [ContainingClassKey=D] constructor(): R|D| { super<>() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameterVsNested.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameterVsNested.txt index a44528deb24..02883808ff4 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameterVsNested.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameterVsNested.txt @@ -2,30 +2,30 @@ FILE: typeParameterVsNested.kt public? final? interface Some : R|kotlin/Any| { } public? abstract class My : R|kotlin/Any| { - public? constructor(): R|test/My| { + public? [ContainingClassKey=My] constructor(): R|test/My| { super() } public? final? inner class T : R|kotlin/Any| { - public? constructor(): R|test/My.T| { + public? [ContainingClassKey=T] constructor(): R|test/My.T| { super() } } public? abstract val x: T - public? get(): T + [ContainingClassKey=My] public? get(): T public? abstract fun foo(arg: T): R|kotlin/Unit| public? abstract val y: My.T - public? get(): My.T + [ContainingClassKey=My] public? get(): My.T public? abstract val z: test.My.T - public? get(): test.My.T + [ContainingClassKey=My] public? get(): test.My.T public? final? class Some : T { - public? constructor(): R|test/My.Some| { + public? [ContainingClassKey=Some] constructor(): R|test/My.Some| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt index 0bf63625a89..a9d418bc71a 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/typeParameters.txt @@ -8,13 +8,13 @@ FILE: typeParameters.kt public? final typealias StringList = List public? final typealias AnyList = List<*> public? abstract class AbstractList : List { - public? constructor(): R|AbstractList| { + public? [ContainingClassKey=AbstractList] constructor(): R|AbstractList| { super<>() } } public? final? class SomeList : AbstractList { - public? constructor(): R|SomeList| { + public? [ContainingClassKey=SomeList] constructor(): R|SomeList| { super>() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/where.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/where.txt index 0ac732679f3..567a0e6ca0d 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/where.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/declarations/where.txt @@ -4,7 +4,7 @@ FILE: where.kt public? final? interface B : R|kotlin/Any| { } public? final? class C : R|kotlin/Any| { - public? constructor(): R|C| { + public? [ContainingClassKey=C] constructor(): R|C| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/annotated.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/annotated.txt index 581b07b0e50..42a5a7a75e7 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/annotated.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/annotated.txt @@ -1,6 +1,6 @@ FILE: annotated.kt @Target(AnnotationTarget#.EXPRESSION#, AnnotationTarget#.LOCAL_VARIABLE#) @Retention(AnnotationRetention#.SOURCE#) public? final? annotation class Ann : R|kotlin/Annotation| { - public? constructor(): R|Ann| { + public? [ContainingClassKey=Ann] constructor(): R|Ann| { super() } @@ -21,14 +21,14 @@ FILE: annotated.kt ^foo IntegerLiteral(42) } public? final? data class Two : R|kotlin/Any| { - public? constructor(x: Int, y: Int): R|Two| { + public? [ContainingClassKey=Two] constructor(x: Int, y: Int): R|Two| { super() } - public? final? val x: Int = R|/x| + public? final? [IsFromVarargKey=false] val x: Int = R|/x| public? get(): Int - public? final? val y: Int = R|/y| + public? final? [IsFromVarargKey=false] val y: Int = R|/y| public? get(): Int public final operator fun component1(): Int diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/arrayAccess.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/arrayAccess.txt index da15cc1a463..3e56af1a3f9 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/arrayAccess.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/arrayAccess.txt @@ -5,11 +5,11 @@ FILE: arrayAccess.kt ^foo IntegerLiteral(1) } public? final? class Wrapper : R|kotlin/Any| { - public? constructor(v: IntArray): R|Wrapper| { + public? [ContainingClassKey=Wrapper] constructor(v: IntArray): R|Wrapper| { super() } - public? final? val v: IntArray = R|/v| + public? final? [IsFromVarargKey=false] val v: IntArray = R|/v| public? get(): IntArray } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/callableReferences.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/callableReferences.txt index 9b6bd252840..b2cbe993b76 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/callableReferences.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/callableReferences.txt @@ -1,6 +1,6 @@ FILE: callableReferences.kt public? final? class A : R|kotlin/Any| { - public? constructor(): R|A| { + public? [ContainingClassKey=A] constructor(): R|A| { super() } @@ -8,7 +8,7 @@ FILE: callableReferences.kt } public? final? val bar: = IntegerLiteral(0) - public? get(): + [ContainingClassKey=A] public? get(): } public? final? fun A.qux(): R|kotlin/Unit| { diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/calls.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/calls.txt index 3f443cd11f1..a94e3eac89e 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/calls.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/calls.txt @@ -9,11 +9,11 @@ FILE: calls.kt ^testRegular IntegerLiteral(3).distance#(IntegerLiteral(4)) } public? final? class My : R|kotlin/Any| { - public? constructor(x: Int): R|My| { + public? [ContainingClassKey=My] constructor(x: Int): R|My| { super() } - public? final? var x: Int = R|/x| + public? final? [IsFromVarargKey=false] var x: Int = R|/x| public? get(): Int public? set(value: Int): R|kotlin/Unit| diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/classReference.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/classReference.txt index d1e1881c15e..76ae4ed69d8 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/classReference.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/classReference.txt @@ -1,6 +1,6 @@ FILE: classReference.kt public? final? class A : R|kotlin/Any| { - public? constructor(): R|test/A| { + public? [ContainingClassKey=A] constructor(): R|test/A| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/collectionLiterals.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/collectionLiterals.txt index 41bb97c524b..96df81cff65 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/collectionLiterals.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/collectionLiterals.txt @@ -1,51 +1,51 @@ FILE: collectionLiterals.kt public? final? annotation class Ann1 : R|kotlin/Annotation| { - public? constructor(arr: IntArray): R|Ann1| { + public? [ContainingClassKey=Ann1] constructor(arr: IntArray): R|Ann1| { super() } - public? final? val arr: IntArray = R|/arr| + public? final? [IsFromVarargKey=false] val arr: IntArray = R|/arr| public? get(): IntArray } public? final? annotation class Ann2 : R|kotlin/Annotation| { - public? constructor(arr: DoubleArray): R|Ann2| { + public? [ContainingClassKey=Ann2] constructor(arr: DoubleArray): R|Ann2| { super() } - public? final? val arr: DoubleArray = R|/arr| + public? final? [IsFromVarargKey=false] val arr: DoubleArray = R|/arr| public? get(): DoubleArray } public? final? annotation class Ann3 : R|kotlin/Annotation| { - public? constructor(arr: Array): R|Ann3| { + public? [ContainingClassKey=Ann3] constructor(arr: Array): R|Ann3| { super() } - public? final? val arr: Array = R|/arr| + public? final? [IsFromVarargKey=false] val arr: Array = R|/arr| public? get(): Array } @Ann1(()) @Ann2(()) @Ann3(()) public? final? class Zero : R|kotlin/Any| { - public? constructor(): R|Zero| { + public? [ContainingClassKey=Zero] constructor(): R|Zero| { super() } } @Ann1((IntegerLiteral(1), IntegerLiteral(2))) public? final? class First : R|kotlin/Any| { - public? constructor(): R|First| { + public? [ContainingClassKey=First] constructor(): R|First| { super() } } @Ann2((Double(3.14))) public? final? class Second : R|kotlin/Any| { - public? constructor(): R|Second| { + public? [ContainingClassKey=Second] constructor(): R|Second| { super() } } @Ann3((String(Alpha), String(Omega))) public? final? class Third : R|kotlin/Any| { - public? constructor(): R|Third| { + public? [ContainingClassKey=Third] constructor(): R|Third| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/destructuring.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/destructuring.txt index ee4f8490435..0b3b6e01049 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/destructuring.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/destructuring.txt @@ -1,16 +1,16 @@ FILE: destructuring.kt public? final? data class Some : R|kotlin/Any| { - public? constructor(first: Int, second: Double, third: String): R|Some| { + public? [ContainingClassKey=Some] constructor(first: Int, second: Double, third: String): R|Some| { super() } - public? final? val first: Int = R|/first| + public? final? [IsFromVarargKey=false] val first: Int = R|/first| public? get(): Int - public? final? val second: Double = R|/second| + public? final? [IsFromVarargKey=false] val second: Double = R|/second| public? get(): Double - public? final? val third: String = R|/third| + public? final? [IsFromVarargKey=false] val third: String = R|/third| public? get(): String public final operator fun component1(): Int diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/for.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/for.txt index d5b38a79842..52b7d65f6c0 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/for.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/for.txt @@ -38,14 +38,14 @@ FILE: for.kt } public? final? data class Some : R|kotlin/Any| { - public? constructor(x: Int, y: Int): R|Some| { + public? [ContainingClassKey=Some] constructor(x: Int, y: Int): R|Some| { super() } - public? final? val x: Int = R|/x| + public? final? [IsFromVarargKey=false] val x: Int = R|/x| public? get(): Int - public? final? val y: Int = R|/y| + public? final? [IsFromVarargKey=false] val y: Int = R|/y| public? get(): Int public final operator fun component1(): Int diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/init.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/init.txt index 3c557658477..f681c3f2988 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/init.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/init.txt @@ -1,11 +1,11 @@ FILE: init.kt public? final? class WithInit : R|kotlin/Any| { - public? constructor(x: Int): R|WithInit| { + public? [ContainingClassKey=WithInit] constructor(x: Int): R|WithInit| { super() } public? final? val x: Int - public? get(): Int + [ContainingClassKey=WithInit] public? get(): Int init { this#.x# = x# diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/lambda.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/lambda.txt index 9780696c942..99650853a68 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/lambda.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/lambda.txt @@ -1,13 +1,13 @@ FILE: lambda.kt public? final? data class Tuple : R|kotlin/Any| { - public? constructor(x: Int, y: Int): R|Tuple| { + public? [ContainingClassKey=Tuple] constructor(x: Int, y: Int): R|Tuple| { super() } - public? final? val x: Int = R|/x| + public? final? [IsFromVarargKey=false] val x: Int = R|/x| public? get(): Int - public? final? val y: Int = R|/y| + public? final? [IsFromVarargKey=false] val y: Int = R|/y| public? get(): Int public final operator fun component1(): Int diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/locals.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/locals.txt index c3aa9d8e15e..7aba4988767 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/locals.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/locals.txt @@ -1,11 +1,11 @@ FILE: locals.kt public? final? fun withLocals(p: Int): Int { local final? class Local : R|kotlin/Any| { - public? constructor(pp: Int): R|Local| { + public? [ContainingClassKey=Local] constructor(pp: Int): R|Local| { super() } - public? final? val pp: Int = R|/pp| + public? final? [IsFromVarargKey=false] val pp: Int = R|/pp| public? get(): Int public? final? fun diff(): { @@ -20,7 +20,7 @@ FILE: locals.kt } lval code: = object : Any { - private constructor(): R|| { + private [ContainingClassKey=] constructor(): R|| { super() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/super.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/super.txt index ca4f4a48838..788bb689714 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/super.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/super.txt @@ -13,7 +13,7 @@ FILE: super.kt } public? final? class C : A, B { - public? constructor(): R|C| { + public? [ContainingClassKey=C] constructor(): R|C| { super<>() } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/these.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/these.txt index f2d854922b2..97c982ba650 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/these.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/these.txt @@ -1,6 +1,6 @@ FILE: these.kt public? final? class Some : R|kotlin/Any| { - public? constructor(): R|Some| { + public? [ContainingClassKey=Some] constructor(): R|Some| { super() } @@ -13,7 +13,7 @@ FILE: these.kt } public? final? val instance: Some - public? get(): Some { + [ContainingClassKey=Some] public? get(): Some { ^ this@Some# } diff --git a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/unary.txt b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/unary.txt index 47e292ce35b..da4be2d232f 100644 --- a/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/unary.txt +++ b/compiler/fir/raw-fir/psi2fir/testData/rawBuilder/expressions/unary.txt @@ -31,11 +31,11 @@ FILE: unary.kt } public? final? class X : R|kotlin/Any| { - public? constructor(i: Int): R|X| { + public? [ContainingClassKey=X] constructor(i: Int): R|X| { super() } - public? final? val i: Int = R|/i| + public? final? [IsFromVarargKey=false] val i: Int = R|/i| public? get(): Int } @@ -74,11 +74,11 @@ FILE: unary.kt } public? final? class Y : R|kotlin/Any| { - public? constructor(arr: Array): R|Y| { + public? [ContainingClassKey=Y] constructor(arr: Array): R|Y| { super() } - public? final? val arr: Array = R|/arr| + public? final? [IsFromVarargKey=false] val arr: Array = R|/arr| public? get(): Array } diff --git a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt index fc35efe7221..59d87d54ab7 100644 --- a/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt +++ b/compiler/fir/raw-fir/psi2fir/tests/org/jetbrains/kotlin/fir/builder/AbstractRawFirBuilderTestCase.kt @@ -63,7 +63,7 @@ abstract class AbstractRawFirBuilderTestCase : KtParsingTestCase( protected open fun doRawFirTest(filePath: String) { val file = createKtFile(filePath) val firFile = file.toFirFile(RawFirBuilderMode.NORMAL) - val firFileDump = StringBuilder().also { FirRenderer(it).visitFile(firFile) }.toString() + val firFileDump = StringBuilder().also { FirRenderer(it, mode = FirRenderer.RenderMode.WithDeclarationAttributes).visitFile(firFile) }.toString() val expectedPath = filePath.replace(".kt", ".txt") KotlinTestUtils.assertEqualsToFile(File(expectedPath), firFileDump) } 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 c1f73abe8bb..8ba30e0a084 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/FirRenderer.kt @@ -19,17 +19,16 @@ import org.jetbrains.kotlin.fir.references.* import org.jetbrains.kotlin.fir.symbols.AbstractFirBasedSymbol import org.jetbrains.kotlin.fir.symbols.ConeClassLikeLookupTag import org.jetbrains.kotlin.fir.symbols.StandardClassIds -import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirClassLikeSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol -import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol +import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* +import org.jetbrains.kotlin.fir.utils.isNotEmpty import org.jetbrains.kotlin.fir.visitors.FirVisitorVoid import org.jetbrains.kotlin.name.SpecialNames import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.util.capitalizeDecapitalize.toLowerCaseAsciiOnly import org.jetbrains.kotlin.utils.Printer import org.jetbrains.kotlin.utils.addToStdlib.safeAs +import kotlin.reflect.KClass fun FirElement.renderWithType(mode: FirRenderer.RenderMode = FirRenderer.RenderMode.Normal): String = buildString { append(this@renderWithType) @@ -56,6 +55,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM val renderAnnotation: Boolean, val renderBodies: Boolean = true, val renderPropertyAccessors: Boolean = true, + val renderDeclarationAttributes: Boolean = false, ) { object Normal : RenderMode( renderLambdaBodies = true, @@ -98,6 +98,15 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM renderBodies = false, renderPropertyAccessors = false, ) + + object WithDeclarationAttributes : RenderMode( + renderLambdaBodies = true, + renderCallArguments = true, + renderCallableFqNames = false, + renderDeclarationResolvePhase = false, + renderAnnotation = true, + renderDeclarationAttributes = true, + ) } private val printer = Printer(builder) @@ -366,6 +375,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM } override fun visitDeclaration(declaration: FirDeclaration) { + declaration.renderDeclarationAttributesIfNeeded() declaration.renderPhaseIfNeeded() print( when (declaration) { @@ -389,6 +399,27 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM } } + private fun FirDeclaration.renderDeclarationAttributesIfNeeded() { + if (mode.renderDeclarationAttributes && attributes.arrayMap.isNotEmpty()) { + val attributes = getAttributesWithValues().mapNotNull { (klass, value) -> + value?.let { klass.simpleName to value.renderAsDeclarationAttributeValue() } + }.joinToString { (name, value) -> "$name=$value" } + print("[$attributes] ") + } + } + + private fun FirDeclaration.getAttributesWithValues(): List, Any?>> { + val attributesMap = FirDeclarationDataRegistry.allValuesThreadUnsafeForRendering() + return attributesMap.entries.sortedBy { it.key.simpleName }.map { (klass, index) -> klass to attributes.arrayMap[index] } + } + + private fun Any.renderAsDeclarationAttributeValue() = when (this) { + is FirCallableSymbol<*> -> callableId.toString() + is FirClassLikeSymbol<*> -> classId.asString() + else -> toString() + } + + private fun List.renderDeclarations() { renderInBraces { for (declaration in this) { @@ -490,6 +521,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM print("actual ") } constructor.renderPhaseIfNeeded() + constructor.renderDeclarationAttributesIfNeeded() print("constructor") constructor.typeParameters.renderTypeParameters() constructor.valueParameters.renderParameters() @@ -512,6 +544,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM override fun visitPropertyAccessor(propertyAccessor: FirPropertyAccessor) { propertyAccessor.renderPhaseIfNeeded() + propertyAccessor.renderDeclarationAttributesIfNeeded() propertyAccessor.annotations.renderAnnotations() print(propertyAccessor.visibility.asString() + " ") print(if (propertyAccessor.isInline) "inline " else "") @@ -526,6 +559,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM override fun visitAnonymousFunction(anonymousFunction: FirAnonymousFunction) { anonymousFunction.renderPhaseIfNeeded() + anonymousFunction.renderDeclarationAttributesIfNeeded() anonymousFunction.annotations.renderAnnotations() val label = anonymousFunction.label if (label != null) { @@ -625,6 +659,7 @@ class FirRenderer(builder: StringBuilder, private val mode: RenderMode = RenderM override fun visitValueParameter(valueParameter: FirValueParameter) { valueParameter.renderPhaseIfNeeded() + valueParameter.renderDeclarationAttributesIfNeeded() valueParameter.annotations.renderAnnotations() if (valueParameter.isCrossinline) { print("crossinline ")