From 3dfad4f0c3ed3fb7a526edf456a8da5312b28a75 Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 23 Jan 2020 18:22:23 +0300 Subject: [PATCH] [FIR] Fix generating properties for varargs in primary constructors --- .../fir/lightTree/fir/ValueParameter.kt | 4 ++++ .../kotlin/fir/builder/ConversionUtils.kt | 13 ++++++++-- .../kotlin/fir/builder/RawFirBuilder.kt | 7 ++++-- ...ararg.kt => varargInPrimaryConstructor.kt} | 6 ++--- ...arg.txt => varargInPrimaryConstructor.txt} | 16 ++++++------- .../fir/FirDiagnosticsTestGenerated.java | 10 ++++---- ...DiagnosticsWithLightTreeTestGenerated.java | 10 ++++---- .../org/jetbrains/kotlin/fir/DefaultNames.kt | 4 +++- .../irText/classes/annotationClasses.fir.txt | 8 +++---- .../annotationsWithVarargParameters.fir.txt | 8 +++---- ...preadOperatorInAnnotationArguments.fir.txt | 8 +++---- .../varargsInAnnotationArguments.fir.txt | 24 +++++++++---------- 12 files changed, 68 insertions(+), 50 deletions(-) rename compiler/fir/resolve/testData/resolve/{problems/iteratorOfVararg.kt => varargInPrimaryConstructor.kt} (50%) rename compiler/fir/resolve/testData/resolve/{problems/iteratorOfVararg.txt => varargInPrimaryConstructor.txt} (55%) diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt index b5c6bdc89a6..271b343a2fe 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/fir/ValueParameter.kt @@ -6,6 +6,7 @@ package org.jetbrains.kotlin.fir.lightTree.fir import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.builder.convertToArrayType import org.jetbrains.kotlin.fir.declarations.FirProperty import org.jetbrains.kotlin.fir.declarations.FirValueParameter import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl @@ -36,6 +37,9 @@ class ValueParameter( fun toFirProperty(session: FirSession, callableId: CallableId): FirProperty { val name = this.firValueParameter.name var type = this.firValueParameter.returnTypeRef + if (this.firValueParameter.isVararg) { + type = type.convertToArrayType() + } if (type is FirImplicitTypeRef) { type = FirErrorTypeRefImpl(null, FirSimpleDiagnostic("Incomplete code", DiagnosticKind.Syntax)) } diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt index 3cad6817461..0c06a834cb9 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/ConversionUtils.kt @@ -26,11 +26,12 @@ import org.jetbrains.kotlin.fir.symbols.impl.FirPropertySymbol import org.jetbrains.kotlin.fir.symbols.impl.FirVariableSymbol import org.jetbrains.kotlin.fir.types.ConeStarProjection import org.jetbrains.kotlin.fir.types.FirTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitKPropertyTypeRef -import org.jetbrains.kotlin.fir.types.impl.FirImplicitTypeRefImpl +import org.jetbrains.kotlin.fir.types.FirUserTypeRef +import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.lexer.KtTokens import org.jetbrains.kotlin.name.Name import org.jetbrains.kotlin.psi.* +import org.jetbrains.kotlin.types.Variance import org.jetbrains.kotlin.types.expressions.OperatorConventions import org.jetbrains.kotlin.util.OperatorNameConventions @@ -395,6 +396,14 @@ fun FirModifiableVariable<*>.generateAccessorsByDelegate(session: FirSession, me } } +fun FirTypeRef.convertToArrayType(): FirUserTypeRef = FirUserTypeRefImpl(source, isMarkedNullable = false).apply { + qualifier += FirQualifierPartImpl(ARRAY_TYPE_NAME).apply { + typeArguments += FirTypeProjectionWithVarianceImpl( + source, this@convertToArrayType, Variance.OUT_VARIANCE + ) + } +} + private val GET_VALUE = Name.identifier("getValue") private val SET_VALUE = Name.identifier("setValue") private val PROVIDE_DELEGATE = Name.identifier("provideDelegate") diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt index 0e349ed74d9..80cd4428520 100644 --- a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/RawFirBuilder.kt @@ -22,9 +22,9 @@ import org.jetbrains.kotlin.fir.impl.FirAbstractAnnotatedElement import org.jetbrains.kotlin.fir.impl.FirLabelImpl import org.jetbrains.kotlin.fir.references.FirNamedReference import org.jetbrains.kotlin.fir.references.impl.* +import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.symbols.impl.* import org.jetbrains.kotlin.fir.types.* -import org.jetbrains.kotlin.fir.scopes.FirScopeProvider import org.jetbrains.kotlin.fir.types.impl.* import org.jetbrains.kotlin.lexer.KtTokens.* import org.jetbrains.kotlin.name.ClassId @@ -270,7 +270,10 @@ class RawFirBuilder(session: FirSession, val scopeProvider: FirScopeProvider, va private fun KtParameter.toFirProperty(firParameter: FirValueParameter): FirProperty { require(hasValOrVar()) - val type = typeReference.toFirOrErrorType() + var type = typeReference.toFirOrErrorType() + if (firParameter.isVararg) { + type = type.convertToArrayType() + } val status = FirDeclarationStatusImpl(visibility, modality).apply { isExpect = hasExpectModifier() isActual = hasActualModifier() diff --git a/compiler/fir/resolve/testData/resolve/problems/iteratorOfVararg.kt b/compiler/fir/resolve/testData/resolve/varargInPrimaryConstructor.kt similarity index 50% rename from compiler/fir/resolve/testData/resolve/problems/iteratorOfVararg.kt rename to compiler/fir/resolve/testData/resolve/varargInPrimaryConstructor.kt index 17d53924e4c..8b7f50d33ff 100644 --- a/compiler/fir/resolve/testData/resolve/problems/iteratorOfVararg.kt +++ b/compiler/fir/resolve/testData/resolve/varargInPrimaryConstructor.kt @@ -1,9 +1,9 @@ class Foo(vararg val strings: String) fun test_1(foo: Foo) { - for (s in foo.strings) { - s.length - } + for (s in foo.strings) { + s.length + } } fun test_2(vararg strings: String) { diff --git a/compiler/fir/resolve/testData/resolve/problems/iteratorOfVararg.txt b/compiler/fir/resolve/testData/resolve/varargInPrimaryConstructor.txt similarity index 55% rename from compiler/fir/resolve/testData/resolve/problems/iteratorOfVararg.txt rename to compiler/fir/resolve/testData/resolve/varargInPrimaryConstructor.txt index 1c245235332..1c718132b6c 100644 --- a/compiler/fir/resolve/testData/resolve/problems/iteratorOfVararg.txt +++ b/compiler/fir/resolve/testData/resolve/varargInPrimaryConstructor.txt @@ -1,19 +1,19 @@ -FILE: iteratorOfVararg.kt +FILE: varargInPrimaryConstructor.kt public final class Foo : R|kotlin/Any| { public constructor(vararg strings: R|kotlin/Array|): R|Foo| { super() } - public final val strings: R|kotlin/String| = R|/strings| - public get(): R|kotlin/String| + public final val strings: R|kotlin/Array| = R|/strings| + public get(): R|kotlin/Array| } public final fun test_1(foo: R|Foo|): R|kotlin/Unit| { - lval : R|kotlin/String| = R|/foo|.R|/Foo.strings| - lval : = R|/|.#() - while(R|/|.#()) { - lval s: = R|/|.#() - R|/s|.# + lval : R|kotlin/Array| = R|/foo|.R|/Foo.strings| + lval : R|kotlin/collections/Iterator| = R|/|.R|FakeOverride|>|() + while(R|/|.R|kotlin/collections/Iterator.hasNext|()) { + lval s: R|kotlin/String| = R|/|.R|FakeOverride|() + R|/s|.R|kotlin/String.length| } } diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java index 310c3ad64e3..7f9615c397b 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java @@ -243,6 +243,11 @@ public class FirDiagnosticsTestGenerated extends AbstractFirDiagnosticsTest { runTest("compiler/fir/resolve/testData/resolve/typeParameterVsNested.kt"); } + @TestMetadata("varargInPrimaryConstructor.kt") + public void testVarargInPrimaryConstructor() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/varargInPrimaryConstructor.kt"); + } + @TestMetadata("whenAsReceiver.kt") public void testWhenAsReceiver() throws Exception { runTest("compiler/fir/resolve/testData/resolve/whenAsReceiver.kt"); @@ -1051,11 +1056,6 @@ public class FirDiagnosticsTestGenerated extends AbstractFirDiagnosticsTest { runTest("compiler/fir/resolve/testData/resolve/problems/invokeOfLambdaWithReceiver.kt"); } - @TestMetadata("iteratorOfVararg.kt") - public void testIteratorOfVararg() throws Exception { - runTest("compiler/fir/resolve/testData/resolve/problems/iteratorOfVararg.kt"); - } - @TestMetadata("javaAccessorConversion.kt") public void testJavaAccessorConversion() throws Exception { runTest("compiler/fir/resolve/testData/resolve/problems/javaAccessorConversion.kt"); diff --git a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java index b4c39242d11..642dd19c25c 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsWithLightTreeTestGenerated.java @@ -243,6 +243,11 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/resolve/testData/resolve/typeParameterVsNested.kt"); } + @TestMetadata("varargInPrimaryConstructor.kt") + public void testVarargInPrimaryConstructor() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/varargInPrimaryConstructor.kt"); + } + @TestMetadata("whenAsReceiver.kt") public void testWhenAsReceiver() throws Exception { runTest("compiler/fir/resolve/testData/resolve/whenAsReceiver.kt"); @@ -1051,11 +1056,6 @@ public class FirDiagnosticsWithLightTreeTestGenerated extends AbstractFirDiagnos runTest("compiler/fir/resolve/testData/resolve/problems/invokeOfLambdaWithReceiver.kt"); } - @TestMetadata("iteratorOfVararg.kt") - public void testIteratorOfVararg() throws Exception { - runTest("compiler/fir/resolve/testData/resolve/problems/iteratorOfVararg.kt"); - } - @TestMetadata("javaAccessorConversion.kt") public void testJavaAccessorConversion() throws Exception { runTest("compiler/fir/resolve/testData/resolve/problems/javaAccessorConversion.kt"); diff --git a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/DefaultNames.kt b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/DefaultNames.kt index 92d8fd8f927..23fd36d48b0 100644 --- a/compiler/fir/tree/src/org/jetbrains/kotlin/fir/DefaultNames.kt +++ b/compiler/fir/tree/src/org/jetbrains/kotlin/fir/DefaultNames.kt @@ -9,4 +9,6 @@ import org.jetbrains.kotlin.name.Name val NAME_FOR_BACKING_FIELD = Name.identifier("field") val NAME_FOR_DEFAULT_VALUE_PARAMETER = Name.identifier("value") -val CONSTRUCTOR_NAME = Name.special("") \ No newline at end of file +val CONSTRUCTOR_NAME = Name.special("") + +val ARRAY_TYPE_NAME = Name.identifier("Array") \ No newline at end of file diff --git a/compiler/testData/ir/irText/classes/annotationClasses.fir.txt b/compiler/testData/ir/irText/classes/annotationClasses.fir.txt index e0b5a058714..3ea534b0a98 100644 --- a/compiler/testData/ir/irText/classes/annotationClasses.fir.txt +++ b/compiler/testData/ir/irText/classes/annotationClasses.fir.txt @@ -90,15 +90,15 @@ FILE fqName: fileName:/annotationClasses.kt CONSTRUCTOR visibility:public <> (xs:kotlin.IntArray) returnType:.Test4 [primary] VALUE_PARAMETER name:xs index:0 type:kotlin.IntArray PROPERTY name:xs visibility:public modality:FINAL [val] - FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Int visibility:private [final] + FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array visibility:private [final] EXPRESSION_BODY GET_VAR 'xs: kotlin.IntArray declared in .Test4.' type=kotlin.IntArray origin=INITIALIZE_PROPERTY_FROM_PARAMETER - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Test4) returnType:kotlin.Int + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.Test4) returnType:kotlin.Array correspondingProperty: PROPERTY name:xs visibility:public modality:FINAL [val] $this: VALUE_PARAMETER name: type:.Test4 BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in .Test4' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array declared in .Test4' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array visibility:private [final]' type=kotlin.Array origin=null receiver: GET_VAR ': .Test4 declared in .Test4.' type=.Test4 origin=null FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: diff --git a/compiler/testData/ir/irText/declarations/annotations/annotationsWithVarargParameters.fir.txt b/compiler/testData/ir/irText/declarations/annotations/annotationsWithVarargParameters.fir.txt index cf4a5cb798d..09c7de9fef5 100644 --- a/compiler/testData/ir/irText/declarations/annotations/annotationsWithVarargParameters.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/annotationsWithVarargParameters.fir.txt @@ -4,15 +4,15 @@ FILE fqName: fileName:/annotationsWithVarargParameters.kt CONSTRUCTOR visibility:public <> (xs:kotlin.Array) returnType:.A [primary] VALUE_PARAMETER name:xs index:0 type:kotlin.Array PROPERTY name:xs visibility:public modality:FINAL [val] - FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.String visibility:private [final] + FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array visibility:private [final] EXPRESSION_BODY GET_VAR 'xs: kotlin.Array declared in .A.' type=kotlin.Array origin=INITIALIZE_PROPERTY_FROM_PARAMETER - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.A) returnType:kotlin.String + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.A) returnType:kotlin.Array correspondingProperty: PROPERTY name:xs visibility:public modality:FINAL [val] $this: VALUE_PARAMETER name: type:.A BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in .A' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array declared in .A' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array visibility:private [final]' type=kotlin.Array origin=null receiver: GET_VAR ': .A declared in .A.' type=.A origin=null FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: diff --git a/compiler/testData/ir/irText/declarations/annotations/spreadOperatorInAnnotationArguments.fir.txt b/compiler/testData/ir/irText/declarations/annotations/spreadOperatorInAnnotationArguments.fir.txt index fd84291791d..96856de2107 100644 --- a/compiler/testData/ir/irText/declarations/annotations/spreadOperatorInAnnotationArguments.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/spreadOperatorInAnnotationArguments.fir.txt @@ -4,15 +4,15 @@ FILE fqName: fileName:/spreadOperatorInAnnotationArguments.kt CONSTRUCTOR visibility:public <> (xs:kotlin.Array) returnType:.A [primary] VALUE_PARAMETER name:xs index:0 type:kotlin.Array PROPERTY name:xs visibility:public modality:FINAL [val] - FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.String visibility:private [final] + FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array visibility:private [final] EXPRESSION_BODY GET_VAR 'xs: kotlin.Array declared in .A.' type=kotlin.Array origin=INITIALIZE_PROPERTY_FROM_PARAMETER - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.A) returnType:kotlin.String + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.A) returnType:kotlin.Array correspondingProperty: PROPERTY name:xs visibility:public modality:FINAL [val] $this: VALUE_PARAMETER name: type:.A BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in .A' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array declared in .A' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array visibility:private [final]' type=kotlin.Array origin=null receiver: GET_VAR ': .A declared in .A.' type=.A origin=null FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: diff --git a/compiler/testData/ir/irText/declarations/annotations/varargsInAnnotationArguments.fir.txt b/compiler/testData/ir/irText/declarations/annotations/varargsInAnnotationArguments.fir.txt index 302ebdb98f8..89bafceba9a 100644 --- a/compiler/testData/ir/irText/declarations/annotations/varargsInAnnotationArguments.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/varargsInAnnotationArguments.fir.txt @@ -4,15 +4,15 @@ FILE fqName: fileName:/varargsInAnnotationArguments.kt CONSTRUCTOR visibility:public <> (xs:kotlin.IntArray) returnType:.A1 [primary] VALUE_PARAMETER name:xs index:0 type:kotlin.IntArray PROPERTY name:xs visibility:public modality:FINAL [val] - FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Int visibility:private [final] + FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array visibility:private [final] EXPRESSION_BODY GET_VAR 'xs: kotlin.IntArray declared in .A1.' type=kotlin.IntArray origin=INITIALIZE_PROPERTY_FROM_PARAMETER - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.A1) returnType:kotlin.Int + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.A1) returnType:kotlin.Array correspondingProperty: PROPERTY name:xs visibility:public modality:FINAL [val] $this: VALUE_PARAMETER name: type:.A1 BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.Int declared in .A1' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Int visibility:private [final]' type=kotlin.Int origin=null + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array declared in .A1' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array visibility:private [final]' type=kotlin.Array origin=null receiver: GET_VAR ': .A1 declared in .A1.' type=.A1 origin=null FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: @@ -32,15 +32,15 @@ FILE fqName: fileName:/varargsInAnnotationArguments.kt CONSTRUCTOR visibility:public <> (xs:kotlin.Array) returnType:.A2 [primary] VALUE_PARAMETER name:xs index:0 type:kotlin.Array PROPERTY name:xs visibility:public modality:FINAL [val] - FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.String visibility:private [final] + FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array visibility:private [final] EXPRESSION_BODY GET_VAR 'xs: kotlin.Array declared in .A2.' type=kotlin.Array origin=INITIALIZE_PROPERTY_FROM_PARAMETER - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.A2) returnType:kotlin.String + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.A2) returnType:kotlin.Array correspondingProperty: PROPERTY name:xs visibility:public modality:FINAL [val] $this: VALUE_PARAMETER name: type:.A2 BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): kotlin.String declared in .A2' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.String visibility:private [final]' type=kotlin.String origin=null + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array declared in .A2' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array visibility:private [final]' type=kotlin.Array origin=null receiver: GET_VAR ': .A2 declared in .A2.' type=.A2 origin=null FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: @@ -60,15 +60,15 @@ FILE fqName: fileName:/varargsInAnnotationArguments.kt CONSTRUCTOR visibility:public <> (xs:kotlin.Array<.A1>) returnType:.AA [primary] VALUE_PARAMETER name:xs index:0 type:kotlin.Array<.A1> PROPERTY name:xs visibility:public modality:FINAL [val] - FIELD PROPERTY_BACKING_FIELD name:xs type:.A1 visibility:private [final] + FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array.A1> visibility:private [final] EXPRESSION_BODY GET_VAR 'xs: kotlin.Array<.A1> declared in .AA.' type=kotlin.Array<.A1> origin=INITIALIZE_PROPERTY_FROM_PARAMETER - FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.AA) returnType:.A1 + FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:FINAL <> ($this:.AA) returnType:kotlin.Array.A1> correspondingProperty: PROPERTY name:xs visibility:public modality:FINAL [val] $this: VALUE_PARAMETER name: type:.AA BLOCK_BODY - RETURN type=kotlin.Nothing from='public final fun (): .A1 declared in .AA' - GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:.A1 visibility:private [final]' type=.A1 origin=null + RETURN type=kotlin.Nothing from='public final fun (): kotlin.Array.A1> declared in .AA' + GET_FIELD 'FIELD PROPERTY_BACKING_FIELD name:xs type:kotlin.Array.A1> visibility:private [final]' type=kotlin.Array.A1> origin=null receiver: GET_VAR ': .AA declared in .AA.' type=.AA origin=null FUN FAKE_OVERRIDE name:equals visibility:public modality:OPEN <> ($this:kotlin.Any, other:kotlin.Any?) returnType:kotlin.Boolean [fake_override,operator] overridden: