From 581504aac5d6b2b5ff810f31e5186f28de3f6fd7 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Wed, 6 Nov 2019 16:31:56 +0300 Subject: [PATCH] Raw FIR: add synthesized Enum.values() function #KT-24076 Fixed --- .../converter/DeclarationsConverter.kt | 9 ++-- .../kotlin/fir/builder/EnumClassUtils.kt | 51 +++++++++++++++++++ .../kotlin/fir/builder/RawFirBuilder.kt | 4 ++ .../rawBuilder/declarations/enums.txt | 6 +++ .../rawBuilder/declarations/enums2.txt | 3 ++ .../fir/resolve/testData/resolve/enum.txt | 3 ++ .../testData/resolve/exhaustiveness_enum.txt | 3 ++ .../resolve/expresssions/enumValues.kt | 15 ++++++ .../resolve/expresssions/enumValues.txt | 45 ++++++++++++++++ .../expresssions/qualifiedExpressions.txt | 3 ++ .../testData/resolve/fromBuilder/enums.txt | 6 +++ .../fir/FirDiagnosticsTestGenerated.java | 5 ++ .../ir/irText/classes/classes.fir.txt | 3 ++ .../testData/ir/irText/classes/enum.fir.txt | 43 ++++++++++++++++ .../irText/classes/enumClassModality.fir.txt | 25 +++++++++ .../classes/enumWithSecondaryCtor.fir.txt | 17 +++++++ .../classesWithAnnotations.fir.txt | 3 ++ .../enumEntriesWithAnnotations.fir.txt | 3 ++ .../enumsInAnnotationArguments.fir.txt | 3 ++ .../multiplatform/expectedEnumClass.fir.txt | 6 +++ .../expressions/enumEntryAsReceiver.fir.txt | 3 ++ ...umEntryReferenceFromEnumEntryClass.fir.txt | 3 ++ .../expressions/objectAsCallable.fir.txt | 3 ++ .../temporaryInEnumEntryInitializer.fir.txt | 7 +++ .../ir/irText/expressions/values.fir.txt | 3 ++ .../ir/irText/singletons/enumEntry.fir.txt | 3 ++ 26 files changed, 274 insertions(+), 4 deletions(-) create mode 100644 compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/EnumClassUtils.kt create mode 100644 compiler/fir/resolve/testData/resolve/expresssions/enumValues.kt create mode 100644 compiler/fir/resolve/testData/resolve/expresssions/enumValues.txt diff --git a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt index f35c4f92e17..5c99a8770d9 100644 --- a/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt +++ b/compiler/fir/lightTree/src/org/jetbrains/kotlin/fir/lightTree/converter/DeclarationsConverter.kt @@ -16,10 +16,7 @@ import org.jetbrains.kotlin.descriptors.annotations.AnnotationUseSiteTarget import org.jetbrains.kotlin.fir.FirElement import org.jetbrains.kotlin.fir.FirSession import org.jetbrains.kotlin.fir.NAME_FOR_DEFAULT_VALUE_PARAMETER -import org.jetbrains.kotlin.fir.builder.Context -import org.jetbrains.kotlin.fir.builder.generateAccessorsByDelegate -import org.jetbrains.kotlin.fir.builder.generateComponentFunctions -import org.jetbrains.kotlin.fir.builder.generateCopyFunction +import org.jetbrains.kotlin.fir.builder.* import org.jetbrains.kotlin.fir.declarations.* import org.jetbrains.kotlin.fir.declarations.impl.* import org.jetbrains.kotlin.fir.diagnostics.DiagnosticKind @@ -436,6 +433,10 @@ class DeclarationsConverter( // TODO: equals, hashCode, toString } + if (modifiers.isEnum()) { + firClass.generateValuesFunction(session, context.packageFqName, context.className) + } + return@withChildClassName firClass } } diff --git a/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/EnumClassUtils.kt b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/EnumClassUtils.kt new file mode 100644 index 00000000000..d2a31971458 --- /dev/null +++ b/compiler/fir/psi2fir/src/org/jetbrains/kotlin/fir/builder/EnumClassUtils.kt @@ -0,0 +1,51 @@ +/* + * Copyright 2010-2019 JetBrains s.r.o. and Kotlin Programming Language contributors. + * Use of this source code is governed by the Apache 2.0 license that can be found in the license/LICENSE.txt file. + */ + +package org.jetbrains.kotlin.fir.builder + +import org.jetbrains.kotlin.descriptors.Modality +import org.jetbrains.kotlin.descriptors.Visibilities +import org.jetbrains.kotlin.fir.FirSession +import org.jetbrains.kotlin.fir.declarations.addDeclaration +import org.jetbrains.kotlin.fir.declarations.impl.FirDeclarationStatusImpl +import org.jetbrains.kotlin.fir.declarations.impl.FirModifiableRegularClass +import org.jetbrains.kotlin.fir.declarations.impl.FirSimpleFunctionImpl +import org.jetbrains.kotlin.fir.expressions.impl.FirEmptyExpressionBlock +import org.jetbrains.kotlin.fir.symbols.CallableId +import org.jetbrains.kotlin.fir.symbols.StandardClassIds +import org.jetbrains.kotlin.fir.symbols.impl.ConeClassLikeLookupTagImpl +import org.jetbrains.kotlin.fir.symbols.impl.FirNamedFunctionSymbol +import org.jetbrains.kotlin.fir.types.impl.ConeClassTypeImpl +import org.jetbrains.kotlin.fir.types.impl.FirResolvedTypeRefImpl +import org.jetbrains.kotlin.name.FqName +import org.jetbrains.kotlin.name.Name + +private val ENUM_VALUES = Name.identifier("values") + +fun FirModifiableRegularClass.generateValuesFunction( + session: FirSession, packageFqName: FqName, classFqName: FqName +) { + val symbol = FirNamedFunctionSymbol(CallableId(packageFqName, classFqName, ENUM_VALUES)) + val status = FirDeclarationStatusImpl(Visibilities.PUBLIC, Modality.FINAL).apply { + isStatic = true + } + addDeclaration( + FirSimpleFunctionImpl( + source, session, + FirResolvedTypeRefImpl( + source, ConeClassTypeImpl( + ConeClassLikeLookupTagImpl(StandardClassIds.Array), + arrayOf( + ConeClassTypeImpl(ConeClassLikeLookupTagImpl(this.symbol.classId), emptyArray(), isNullable = false) + ), + isNullable = false + ) + ), + null, ENUM_VALUES, status, symbol + ).apply { + body = FirEmptyExpressionBlock() + } + ) +} \ No newline at end of file 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 1d78854e2ab..8f780921f03 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 @@ -535,6 +535,10 @@ class RawFirBuilder(session: FirSession, val stubMode: Boolean) : BaseFirBuilder // TODO: equals, hashCode, toString } + if (classOrObject.hasModifier(ENUM_KEYWORD)) { + firClass.generateValuesFunction(session, context.packageFqName, context.className) + } + firClass } } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums.txt index 4ec202412c1..a7d3ad6fc80 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums.txt @@ -25,6 +25,9 @@ FILE: enums.kt } + public final static fun values(): R|kotlin/Array| { + } + } public? final? enum class Planet : R|kotlin/Enum| { public? constructor(m: Double, r: Double): R|Planet| { @@ -85,4 +88,7 @@ FILE: enums.kt } + public final static fun values(): R|kotlin/Array| { + } + } diff --git a/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums2.txt b/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums2.txt index 24327963f58..1413cc318eb 100644 --- a/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums2.txt +++ b/compiler/fir/psi2fir/testData/rawBuilder/declarations/enums2.txt @@ -45,4 +45,7 @@ FILE: enums2.kt public? abstract fun check(y: Some): Boolean + public final static fun values(): R|kotlin/Array| { + } + } diff --git a/compiler/fir/resolve/testData/resolve/enum.txt b/compiler/fir/resolve/testData/resolve/enum.txt index 6ff62c73207..2e339b6b0da 100644 --- a/compiler/fir/resolve/testData/resolve/enum.txt +++ b/compiler/fir/resolve/testData/resolve/enum.txt @@ -45,4 +45,7 @@ FILE: enum.kt public abstract fun check(y: R|Some|): R|kotlin/Boolean| + public final static fun values(): R|kotlin/Array| { + } + } diff --git a/compiler/fir/resolve/testData/resolve/exhaustiveness_enum.txt b/compiler/fir/resolve/testData/resolve/exhaustiveness_enum.txt index 86a64520bd7..cf93842774c 100644 --- a/compiler/fir/resolve/testData/resolve/exhaustiveness_enum.txt +++ b/compiler/fir/resolve/testData/resolve/exhaustiveness_enum.txt @@ -25,6 +25,9 @@ FILE: exhaustiveness_enum.kt } + public final static fun values(): R|kotlin/Array| { + } + } public final fun test_1(e: R|Enum|): R|kotlin/Unit| { lval a: R|kotlin/Unit| = when (R|/e|) { diff --git a/compiler/fir/resolve/testData/resolve/expresssions/enumValues.kt b/compiler/fir/resolve/testData/resolve/expresssions/enumValues.kt new file mode 100644 index 00000000000..3bcbab8e876 --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/expresssions/enumValues.kt @@ -0,0 +1,15 @@ +enum class MyEnum { + FIRST, + SECOND, + LAST; + + fun bar() = 42 +} + +fun foo() { + val values = MyEnum.values() + + for (value in values) { + value.bar() + } +} \ No newline at end of file diff --git a/compiler/fir/resolve/testData/resolve/expresssions/enumValues.txt b/compiler/fir/resolve/testData/resolve/expresssions/enumValues.txt new file mode 100644 index 00000000000..6fc89219b48 --- /dev/null +++ b/compiler/fir/resolve/testData/resolve/expresssions/enumValues.txt @@ -0,0 +1,45 @@ +FILE: enumValues.kt + public final enum class MyEnum : R|kotlin/Enum| { + private constructor(): R|MyEnum| { + super() + } + + public final enum entry FIRST : R|kotlin/Any| { + public constructor(): R|MyEnum.FIRST| { + super() + } + + } + + public final enum entry SECOND : R|kotlin/Any| { + public constructor(): R|MyEnum.SECOND| { + super() + } + + } + + public final enum entry LAST : R|kotlin/Any| { + public constructor(): R|MyEnum.LAST| { + super() + } + + } + + public final fun bar(): R|kotlin/Int| { + ^bar Int(42) + } + + public final static fun values(): R|kotlin/Array| { + } + + } + public final fun foo(): R|kotlin/Unit| { + lval values: R|kotlin/Array| = Q|MyEnum|.R|/MyEnum.values|() + lval : R|kotlin/Array| = R|/values| + lval : R|kotlin/collections/Iterator| = R|/|.R|FakeOverride|>|() + while(R|/|.R|kotlin/collections/Iterator.hasNext|()) { + lval value: R|MyEnum| = R|/|.R|FakeOverride|() + R|/value|.R|/MyEnum.bar|() + } + + } diff --git a/compiler/fir/resolve/testData/resolve/expresssions/qualifiedExpressions.txt b/compiler/fir/resolve/testData/resolve/expresssions/qualifiedExpressions.txt index d853eb13249..4bc274f686c 100644 --- a/compiler/fir/resolve/testData/resolve/expresssions/qualifiedExpressions.txt +++ b/compiler/fir/resolve/testData/resolve/expresssions/qualifiedExpressions.txt @@ -40,6 +40,9 @@ FILE: qualifiedExpressions.kt } + public final static fun values(): R|kotlin/Array| { + } + } public final fun foo(): R|kotlin/Unit| { } diff --git a/compiler/fir/resolve/testData/resolve/fromBuilder/enums.txt b/compiler/fir/resolve/testData/resolve/fromBuilder/enums.txt index d7a0f69c67e..26be3ccae66 100644 --- a/compiler/fir/resolve/testData/resolve/fromBuilder/enums.txt +++ b/compiler/fir/resolve/testData/resolve/fromBuilder/enums.txt @@ -25,6 +25,9 @@ FILE: enums.kt } + public final static fun values(): R|kotlin/Array| { + } + } public final enum class Planet : R|kotlin/Enum| { private constructor(m: R|kotlin/Double|, r: R|kotlin/Double|): R|Planet| { @@ -85,4 +88,7 @@ FILE: enums.kt } + public final static fun values(): R|kotlin/Array| { + } + } 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 1f1d3baaf22..827d7185df6 100644 --- a/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java +++ b/compiler/fir/resolve/tests/org/jetbrains/kotlin/fir/FirDiagnosticsTestGenerated.java @@ -334,6 +334,11 @@ public class FirDiagnosticsTestGenerated extends AbstractFirDiagnosticsTest { runTest("compiler/fir/resolve/testData/resolve/expresssions/dispatchReceiver.kt"); } + @TestMetadata("enumValues.kt") + public void testEnumValues() throws Exception { + runTest("compiler/fir/resolve/testData/resolve/expresssions/enumValues.kt"); + } + @TestMetadata("extensionPropertyInLambda.kt") public void testExtensionPropertyInLambda() throws Exception { runTest("compiler/fir/resolve/testData/resolve/expresssions/extensionPropertyInLambda.kt"); diff --git a/compiler/testData/ir/irText/classes/classes.fir.txt b/compiler/testData/ir/irText/classes/classes.fir.txt index aa9a72586ab..4382adfe9c1 100644 --- a/compiler/testData/ir/irText/classes/classes.fir.txt +++ b/compiler/testData/ir/irText/classes/classes.fir.txt @@ -75,6 +75,9 @@ FILE fqName: fileName:/classes.kt DELEGATING_CONSTRUCTOR_CALL 'public constructor (name: kotlin.String, ordinal: kotlin.Int) [primary] declared in kotlin.Enum' : INSTANCE_INITIALIZER_CALL classDescriptor='CLASS ENUM_CLASS name:TestEnumClass modality:FINAL visibility:public superTypes:[kotlin.Enum]' + FUN name:values visibility:public modality:FINAL <> ($this:.TestEnumClass) returnType:kotlin.Array<.TestEnumClass> + $this: VALUE_PARAMETER name: type:.TestEnumClass + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/classes/enum.fir.txt b/compiler/testData/ir/irText/classes/enum.fir.txt index 8b2e71fcab0..43c53234bc6 100644 --- a/compiler/testData/ir/irText/classes/enum.fir.txt +++ b/compiler/testData/ir/irText/classes/enum.fir.txt @@ -44,6 +44,9 @@ FILE fqName: fileName:/enum.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.TestEnum1) returnType:kotlin.Array<.TestEnum1> + $this: VALUE_PARAMETER name: type:.TestEnum1 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -110,6 +113,10 @@ FILE fqName: fileName:/enum.kt overridden: public final fun (): kotlin.Int declared in .TestEnum2 $this: VALUE_PARAMETER name: type:.TestEnum2.TEST1 + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.TestEnum2) returnType:kotlin.Array<.TestEnum2> [fake_override] + overridden: + public final fun values (): kotlin.Array<.TestEnum2> declared in .TestEnum2 + $this: VALUE_PARAMETER name: type:.TestEnum2 FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -157,6 +164,10 @@ FILE fqName: fileName:/enum.kt overridden: public final fun (): kotlin.Int declared in .TestEnum2 $this: VALUE_PARAMETER name: type:.TestEnum2.TEST2 + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.TestEnum2) returnType:kotlin.Array<.TestEnum2> [fake_override] + overridden: + public final fun values (): kotlin.Array<.TestEnum2> declared in .TestEnum2 + $this: VALUE_PARAMETER name: type:.TestEnum2 FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -204,6 +215,10 @@ FILE fqName: fileName:/enum.kt overridden: public final fun (): kotlin.Int declared in .TestEnum2 $this: VALUE_PARAMETER name: type:.TestEnum2.TEST3 + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.TestEnum2) returnType:kotlin.Array<.TestEnum2> [fake_override] + overridden: + public final fun values (): kotlin.Array<.TestEnum2> declared in .TestEnum2 + $this: VALUE_PARAMETER name: type:.TestEnum2 FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -238,6 +253,9 @@ FILE fqName: fileName:/enum.kt overridden: public final fun (): kotlin.Int declared in kotlin.Enum $this: VALUE_PARAMETER name: type:.TestEnum2.TEST3 + FUN name:values visibility:public modality:FINAL <> ($this:.TestEnum2) returnType:kotlin.Array<.TestEnum2> + $this: VALUE_PARAMETER name: type:.TestEnum2 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -305,6 +323,9 @@ FILE fqName: fileName:/enum.kt $this: VALUE_PARAMETER name: type:kotlin.Any FUN name:foo visibility:public modality:ABSTRACT <> ($this:.TestEnum3) returnType:kotlin.Unit $this: VALUE_PARAMETER name: type:.TestEnum3 + FUN name:values visibility:public modality:FINAL <> ($this:.TestEnum3) returnType:kotlin.Array<.TestEnum3> + $this: VALUE_PARAMETER name: type:.TestEnum3 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -376,6 +397,10 @@ FILE fqName: fileName:/enum.kt overridden: public final fun (): kotlin.Int declared in .TestEnum4 $this: VALUE_PARAMETER name: type:.TestEnum4.TEST1 + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.TestEnum4) returnType:kotlin.Array<.TestEnum4> [fake_override] + overridden: + public final fun values (): kotlin.Array<.TestEnum4> declared in .TestEnum4 + $this: VALUE_PARAMETER name: type:.TestEnum4 FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -443,6 +468,10 @@ FILE fqName: fileName:/enum.kt overridden: public final fun (): kotlin.Int declared in .TestEnum4 $this: VALUE_PARAMETER name: type:.TestEnum4.TEST2 + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.TestEnum4) returnType:kotlin.Array<.TestEnum4> [fake_override] + overridden: + public final fun values (): kotlin.Array<.TestEnum4> declared in .TestEnum4 + $this: VALUE_PARAMETER name: type:.TestEnum4 FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -479,6 +508,9 @@ FILE fqName: fileName:/enum.kt $this: VALUE_PARAMETER name: type:.TestEnum4.TEST2 FUN name:foo visibility:public modality:ABSTRACT <> ($this:.TestEnum4) returnType:kotlin.Unit $this: VALUE_PARAMETER name: type:.TestEnum4 + FUN name:values visibility:public modality:FINAL <> ($this:.TestEnum4) returnType:kotlin.Array<.TestEnum4> + $this: VALUE_PARAMETER name: type:.TestEnum4 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -565,6 +597,10 @@ FILE fqName: fileName:/enum.kt overridden: public final fun (): kotlin.Int declared in .TestEnum5 $this: VALUE_PARAMETER name: type:.TestEnum5.TEST2 + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.TestEnum5) returnType:kotlin.Array<.TestEnum5> [fake_override] + overridden: + public final fun values (): kotlin.Array<.TestEnum5> declared in .TestEnum5 + $this: VALUE_PARAMETER name: type:.TestEnum5 FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -612,6 +648,10 @@ FILE fqName: fileName:/enum.kt overridden: public final fun (): kotlin.Int declared in .TestEnum5 $this: VALUE_PARAMETER name: type:.TestEnum5.TEST3 + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.TestEnum5) returnType:kotlin.Array<.TestEnum5> [fake_override] + overridden: + public final fun values (): kotlin.Array<.TestEnum5> declared in .TestEnum5 + $this: VALUE_PARAMETER name: type:.TestEnum5 FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -646,6 +686,9 @@ FILE fqName: fileName:/enum.kt overridden: public final fun (): kotlin.Int declared in kotlin.Enum $this: VALUE_PARAMETER name: type:.TestEnum5.TEST3 + FUN name:values visibility:public modality:FINAL <> ($this:.TestEnum5) returnType:kotlin.Array<.TestEnum5> + $this: VALUE_PARAMETER name: type:.TestEnum5 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/classes/enumClassModality.fir.txt b/compiler/testData/ir/irText/classes/enumClassModality.fir.txt index 328c0ad6fee..c0ffa523377 100644 --- a/compiler/testData/ir/irText/classes/enumClassModality.fir.txt +++ b/compiler/testData/ir/irText/classes/enumClassModality.fir.txt @@ -25,6 +25,9 @@ FILE fqName: fileName:/enumClassModality.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.TestFinalEnum1) returnType:kotlin.Array<.TestFinalEnum1> + $this: VALUE_PARAMETER name: type:.TestFinalEnum1 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -91,6 +94,10 @@ FILE fqName: fileName:/enumClassModality.kt overridden: public final fun (): kotlin.Int declared in .TestFinalEnum2 $this: VALUE_PARAMETER name: type:.TestFinalEnum2.X1 + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.TestFinalEnum2) returnType:kotlin.Array<.TestFinalEnum2> [fake_override] + overridden: + public final fun values (): kotlin.Array<.TestFinalEnum2> declared in .TestFinalEnum2 + $this: VALUE_PARAMETER name: type:.TestFinalEnum2 FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -125,6 +132,9 @@ FILE fqName: fileName:/enumClassModality.kt overridden: public final fun (): kotlin.Int declared in kotlin.Enum $this: VALUE_PARAMETER name: type:.TestFinalEnum2.X1 + FUN name:values visibility:public modality:FINAL <> ($this:.TestFinalEnum2) returnType:kotlin.Array<.TestFinalEnum2> + $this: VALUE_PARAMETER name: type:.TestFinalEnum2 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -188,6 +198,9 @@ FILE fqName: fileName:/enumClassModality.kt FUN name:doStuff visibility:public modality:FINAL <> ($this:.TestFinalEnum3) returnType:kotlin.Unit $this: VALUE_PARAMETER name: type:.TestFinalEnum3 BLOCK_BODY + FUN name:values visibility:public modality:FINAL <> ($this:.TestFinalEnum3) returnType:kotlin.Array<.TestFinalEnum3> + $this: VALUE_PARAMETER name: type:.TestFinalEnum3 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -249,6 +262,9 @@ FILE fqName: fileName:/enumClassModality.kt overridden: public open fun hashCode (): kotlin.Int declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.TestOpenEnum1) returnType:kotlin.Array<.TestOpenEnum1> + $this: VALUE_PARAMETER name: type:.TestOpenEnum1 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -315,6 +331,9 @@ FILE fqName: fileName:/enumClassModality.kt FUN name:foo visibility:public modality:OPEN <> ($this:.TestOpenEnum2) returnType:kotlin.Unit $this: VALUE_PARAMETER name: type:.TestOpenEnum2 BLOCK_BODY + FUN name:values visibility:public modality:FINAL <> ($this:.TestOpenEnum2) returnType:kotlin.Array<.TestOpenEnum2> + $this: VALUE_PARAMETER name: type:.TestOpenEnum2 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -380,6 +399,9 @@ FILE fqName: fileName:/enumClassModality.kt $this: VALUE_PARAMETER name: type:kotlin.Any FUN name:foo visibility:public modality:ABSTRACT <> ($this:.TestAbstractEnum1) returnType:kotlin.Unit $this: VALUE_PARAMETER name: type:.TestAbstractEnum1 + FUN name:values visibility:public modality:FINAL <> ($this:.TestAbstractEnum1) returnType:kotlin.Array<.TestAbstractEnum1> + $this: VALUE_PARAMETER name: type:.TestAbstractEnum1 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -460,6 +482,9 @@ FILE fqName: fileName:/enumClassModality.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.TestAbstractEnum2) returnType:kotlin.Array<.TestAbstractEnum2> + $this: VALUE_PARAMETER name: type:.TestAbstractEnum2 + BLOCK_BODY FUN FAKE_OVERRIDE name:foo visibility:public modality:ABSTRACT <> ($this:.IFoo) returnType:kotlin.Unit [fake_override] overridden: public abstract fun foo (): kotlin.Unit declared in .IFoo diff --git a/compiler/testData/ir/irText/classes/enumWithSecondaryCtor.fir.txt b/compiler/testData/ir/irText/classes/enumWithSecondaryCtor.fir.txt index 16506489b9a..380ad7370d1 100644 --- a/compiler/testData/ir/irText/classes/enumWithSecondaryCtor.fir.txt +++ b/compiler/testData/ir/irText/classes/enumWithSecondaryCtor.fir.txt @@ -41,6 +41,9 @@ FILE fqName: fileName:/enumWithSecondaryCtor.kt BLOCK_BODY DELEGATING_CONSTRUCTOR_CALL 'private constructor (x: kotlin.Int) [primary] declared in .Test0' x: CONST Int type=kotlin.Int value=0 + FUN name:values visibility:public modality:FINAL <> ($this:.Test0) returnType:kotlin.Array<.Test0> + $this: VALUE_PARAMETER name: type:.Test0 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -126,6 +129,10 @@ FILE fqName: fileName:/enumWithSecondaryCtor.kt overridden: public final fun (): kotlin.Int declared in .Test1 $this: VALUE_PARAMETER name: type:.Test1.ONE + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.Test1) returnType:kotlin.Array<.Test1> [fake_override] + overridden: + public final fun values (): kotlin.Array<.Test1> declared in .Test1 + $this: VALUE_PARAMETER name: type:.Test1 FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -164,6 +171,9 @@ FILE fqName: fileName:/enumWithSecondaryCtor.kt BLOCK_BODY DELEGATING_CONSTRUCTOR_CALL 'private constructor (x: kotlin.Int) [primary] declared in .Test1' x: CONST Int type=kotlin.Int value=0 + FUN name:values visibility:public modality:FINAL <> ($this:.Test1) returnType:kotlin.Array<.Test1> + $this: VALUE_PARAMETER name: type:.Test1 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -259,6 +269,10 @@ FILE fqName: fileName:/enumWithSecondaryCtor.kt overridden: public final fun (): kotlin.Int declared in .Test2 $this: VALUE_PARAMETER name: type:.Test2.ONE + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.Test2) returnType:kotlin.Array<.Test2> [fake_override] + overridden: + public final fun values (): kotlin.Array<.Test2> declared in .Test2 + $this: VALUE_PARAMETER name: type:.Test2 FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -299,6 +313,9 @@ FILE fqName: fileName:/enumWithSecondaryCtor.kt x: CONST Int type=kotlin.Int value=0 FUN name:foo visibility:public modality:ABSTRACT <> ($this:.Test2) returnType:kotlin.Unit $this: VALUE_PARAMETER name: type:.Test2 + FUN name:values visibility:public modality:FINAL <> ($this:.Test2) returnType:kotlin.Array<.Test2> + $this: VALUE_PARAMETER name: type:.Test2 + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/declarations/annotations/classesWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/classesWithAnnotations.fir.txt index d6ebd6b956d..e9a7886fb2a 100644 --- a/compiler/testData/ir/irText/declarations/annotations/classesWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/classesWithAnnotations.fir.txt @@ -135,6 +135,9 @@ FILE fqName: fileName:/classesWithAnnotations.kt DELEGATING_CONSTRUCTOR_CALL 'public constructor (name: kotlin.String, ordinal: kotlin.Int) [primary] declared in kotlin.Enum' : INSTANCE_INITIALIZER_CALL classDescriptor='CLASS ENUM_CLASS name:TestEnum modality:FINAL visibility:public superTypes:[kotlin.Enum]' + FUN name:values visibility:public modality:FINAL <> ($this:.TestEnum) returnType:kotlin.Array<.TestEnum> + $this: VALUE_PARAMETER name: type:.TestEnum + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/declarations/annotations/enumEntriesWithAnnotations.fir.txt b/compiler/testData/ir/irText/declarations/annotations/enumEntriesWithAnnotations.fir.txt index ccd5347c451..57ed47ca54c 100644 --- a/compiler/testData/ir/irText/declarations/annotations/enumEntriesWithAnnotations.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/enumEntriesWithAnnotations.fir.txt @@ -87,6 +87,9 @@ FILE fqName: fileName:/enumEntriesWithAnnotations.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.TestEnum) returnType:kotlin.Array<.TestEnum> + $this: VALUE_PARAMETER name: type:.TestEnum + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/declarations/annotations/enumsInAnnotationArguments.fir.txt b/compiler/testData/ir/irText/declarations/annotations/enumsInAnnotationArguments.fir.txt index 047e40b183e..581306c42f4 100644 --- a/compiler/testData/ir/irText/declarations/annotations/enumsInAnnotationArguments.fir.txt +++ b/compiler/testData/ir/irText/declarations/annotations/enumsInAnnotationArguments.fir.txt @@ -82,6 +82,9 @@ FILE fqName: fileName:/enumsInAnnotationArguments.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.En) returnType:kotlin.Array<.En> + $this: VALUE_PARAMETER name: type:.En + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/declarations/multiplatform/expectedEnumClass.fir.txt b/compiler/testData/ir/irText/declarations/multiplatform/expectedEnumClass.fir.txt index 571f2a05fbc..2c18303c3b3 100644 --- a/compiler/testData/ir/irText/declarations/multiplatform/expectedEnumClass.fir.txt +++ b/compiler/testData/ir/irText/declarations/multiplatform/expectedEnumClass.fir.txt @@ -44,6 +44,9 @@ FILE fqName: fileName:/expectedEnumClass.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.MyEnum) returnType:kotlin.Array<.MyEnum> + $this: VALUE_PARAMETER name: type:.MyEnum + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -142,6 +145,9 @@ FILE fqName: fileName:/expectedEnumClass.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.MyEnum) returnType:kotlin.Array<.MyEnum> + $this: VALUE_PARAMETER name: type:.MyEnum + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/expressions/enumEntryAsReceiver.fir.txt b/compiler/testData/ir/irText/expressions/enumEntryAsReceiver.fir.txt index 341b9c0f8f1..4fd004b2ab2 100644 --- a/compiler/testData/ir/irText/expressions/enumEntryAsReceiver.fir.txt +++ b/compiler/testData/ir/irText/expressions/enumEntryAsReceiver.fir.txt @@ -56,6 +56,9 @@ FILE fqName: fileName:/enumEntryAsReceiver.kt FUN DEFAULT_PROPERTY_ACCESSOR name: visibility:public modality:ABSTRACT <> ($this:.X) returnType:kotlin.Function0 correspondingProperty: PROPERTY name:value visibility:public modality:ABSTRACT [val] $this: VALUE_PARAMETER name: type:.X + FUN name:values visibility:public modality:FINAL <> ($this:.X) returnType:kotlin.Array<.X> + $this: VALUE_PARAMETER name: type:.X + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/expressions/enumEntryReferenceFromEnumEntryClass.fir.txt b/compiler/testData/ir/irText/expressions/enumEntryReferenceFromEnumEntryClass.fir.txt index 68162222dee..4275747b5fc 100644 --- a/compiler/testData/ir/irText/expressions/enumEntryReferenceFromEnumEntryClass.fir.txt +++ b/compiler/testData/ir/irText/expressions/enumEntryReferenceFromEnumEntryClass.fir.txt @@ -107,6 +107,9 @@ FILE fqName: fileName:/enumEntryReferenceFromEnumEntryClass.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.MyEnum) returnType:kotlin.Array<.MyEnum> + $this: VALUE_PARAMETER name: type:.MyEnum + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/expressions/objectAsCallable.fir.txt b/compiler/testData/ir/irText/expressions/objectAsCallable.fir.txt index cb3f72baa5e..308906f5e52 100644 --- a/compiler/testData/ir/irText/expressions/objectAsCallable.fir.txt +++ b/compiler/testData/ir/irText/expressions/objectAsCallable.fir.txt @@ -44,6 +44,9 @@ FILE fqName: fileName:/objectAsCallable.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.En) returnType:kotlin.Array<.En> + $this: VALUE_PARAMETER name: type:.En + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/expressions/temporaryInEnumEntryInitializer.fir.txt b/compiler/testData/ir/irText/expressions/temporaryInEnumEntryInitializer.fir.txt index 50e985db4ae..556a3df3f5b 100644 --- a/compiler/testData/ir/irText/expressions/temporaryInEnumEntryInitializer.fir.txt +++ b/compiler/testData/ir/irText/expressions/temporaryInEnumEntryInitializer.fir.txt @@ -41,6 +41,10 @@ FILE fqName: fileName:/temporaryInEnumEntryInitializer.kt overridden: public final fun (): kotlin.String? declared in .En $this: VALUE_PARAMETER name: type:.En.ENTRY + FUN FAKE_OVERRIDE name:values visibility:public modality:FINAL <> ($this:.En) returnType:kotlin.Array<.En> [fake_override] + overridden: + public final fun values (): kotlin.Array<.En> declared in .En + $this: VALUE_PARAMETER name: type:.En FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum @@ -75,6 +79,9 @@ FILE fqName: fileName:/temporaryInEnumEntryInitializer.kt overridden: public final fun (): kotlin.Int declared in kotlin.Enum $this: VALUE_PARAMETER name: type:.En.ENTRY + FUN name:values visibility:public modality:FINAL <> ($this:.En) returnType:kotlin.Array<.En> + $this: VALUE_PARAMETER name: type:.En + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/expressions/values.fir.txt b/compiler/testData/ir/irText/expressions/values.fir.txt index d3520f57c1c..a5ba19d27ff 100644 --- a/compiler/testData/ir/irText/expressions/values.fir.txt +++ b/compiler/testData/ir/irText/expressions/values.fir.txt @@ -25,6 +25,9 @@ FILE fqName: fileName:/values.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.Enum) returnType:kotlin.Array<.Enum> + $this: VALUE_PARAMETER name: type:.Enum + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum diff --git a/compiler/testData/ir/irText/singletons/enumEntry.fir.txt b/compiler/testData/ir/irText/singletons/enumEntry.fir.txt index 1d73e136083..ab4f4ea4157 100644 --- a/compiler/testData/ir/irText/singletons/enumEntry.fir.txt +++ b/compiler/testData/ir/irText/singletons/enumEntry.fir.txt @@ -52,6 +52,9 @@ FILE fqName: fileName:/enumEntry.kt overridden: public open fun toString (): kotlin.String declared in kotlin.Any $this: VALUE_PARAMETER name: type:kotlin.Any + FUN name:values visibility:public modality:FINAL <> ($this:.Z) returnType:kotlin.Array<.Z> + $this: VALUE_PARAMETER name: type:.Z + BLOCK_BODY FUN FAKE_OVERRIDE name:clone visibility:protected modality:FINAL <> ($this:kotlin.Enum) returnType:kotlin.Any [fake_override] overridden: protected final fun clone (): kotlin.Any declared in kotlin.Enum