From 3a5a6e5587648404c2ac8b9b5db20404eb74bced Mon Sep 17 00:00:00 2001 From: Dmitriy Novozhilov Date: Thu, 15 Sep 2022 14:21:56 +0300 Subject: [PATCH] [FE] Add test for KT-54055 --- .../uninitializedCompanionOfEnum_after.fir.kt | 27 +++++++++++++++- .../uninitializedCompanionOfEnum_after.kt | 27 +++++++++++++++- .../uninitializedCompanionOfEnum_after.txt | 32 +++++++++++++++++++ ...uninitializedCompanionOfEnum_before.fir.kt | 27 +++++++++++++++- .../uninitializedCompanionOfEnum_before.kt | 27 +++++++++++++++- .../uninitializedCompanionOfEnum_before.txt | 31 ++++++++++++++++++ 6 files changed, 167 insertions(+), 4 deletions(-) diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.fir.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.fir.kt index 1940da856a3..28762f8c210 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.fir.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.fir.kt @@ -1,5 +1,5 @@ // LANGUAGE: +ProhibitAccessToEnumCompanionMembersInEnumConstructorCall -// ISSUE: KT-49110 +// ISSUE: KT-49110, KT-54055 enum class SomeEnum(val x: Int) { A(companionFun().length),// UNINITIALIZED_ENUM_COMPANION @@ -37,3 +37,28 @@ fun OtherEnum.Companion.extensionFun(): String = companionFun() val OtherEnum.Companion.extensionProp: String get() = companionProp +enum class EnumWithLambda(val lambda: () -> Unit) { + M({ + companionFun().length + companionProp.length + + EnumWithLambda.companionFun().length + EnumWithLambda.companionProp.length + + extensionFun().length + extensionProp.length + + EnumWithLambda.extensionFun().length + EnumWithLambda.extensionProp.length + }); + + companion object { + val companionProp = "someString" + fun companionFun(): String = "someString" + } +} + +fun EnumWithLambda.Companion.extensionFun(): String = companionFun() +val EnumWithLambda.Companion.extensionProp: String + get() = companionProp + diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.kt index b1bd487f067..7cff078e746 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.kt @@ -1,5 +1,5 @@ // LANGUAGE: +ProhibitAccessToEnumCompanionMembersInEnumConstructorCall -// ISSUE: KT-49110 +// ISSUE: KT-49110, KT-54055 enum class SomeEnum(val x: Int) { A(companionFun().length),// UNINITIALIZED_ENUM_COMPANION @@ -37,3 +37,28 @@ fun OtherEnum.Companion.extensionFun(): String = companionFun() val OtherEnum.Companion.extensionProp: String get() = companionProp +enum class EnumWithLambda(val lambda: () -> Unit) { + M({ + companionFun().length + companionProp.length + + EnumWithLambda.companionFun().length + EnumWithLambda.companionProp.length + + extensionFun().length + extensionProp.length + + EnumWithLambda.extensionFun().length + EnumWithLambda.extensionProp.length + }); + + companion object { + val companionProp = "someString" + fun companionFun(): String = "someString" + } +} + +fun EnumWithLambda.Companion.extensionFun(): String = companionFun() +val EnumWithLambda.Companion.extensionProp: String + get() = companionProp + diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.txt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.txt index fdbfb9a6074..cbd6c01c891 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.txt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_after.txt @@ -1,8 +1,39 @@ package +public val EnumWithLambda.Companion.extensionProp: kotlin.String public val OtherEnum.Companion.extensionProp: kotlin.String +public fun EnumWithLambda.Companion.extensionFun(): kotlin.String public fun OtherEnum.Companion.extensionFun(): kotlin.String +public final enum class EnumWithLambda : kotlin.Enum { + enum entry M + + private constructor EnumWithLambda(/*0*/ lambda: () -> kotlin.Unit) + public final val lambda: () -> kotlin.Unit + @kotlin.internal.IntrinsicConstEvaluation public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: EnumWithLambda): kotlin.Int + public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + protected/*protected and package*/ final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit + public final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class! + public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final val companionProp: kotlin.String = "someString" + public final fun companionFun(): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + // Static members + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): EnumWithLambda + public final /*synthesized*/ fun values(): kotlin.Array +} + public final enum class OtherEnum : kotlin.Enum { enum entry G @@ -80,3 +111,4 @@ public final enum class SomeEnum : kotlin.Enum { public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): SomeEnum public final /*synthesized*/ fun values(): kotlin.Array } + diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.fir.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.fir.kt index 55b53be0298..ccfad5129b3 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.fir.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.fir.kt @@ -1,5 +1,5 @@ // LANGUAGE: -ProhibitAccessToEnumCompanionMembersInEnumConstructorCall -// ISSUE: KT-49110 +// ISSUE: KT-49110, KT-54055 enum class SomeEnum(val x: Int) { A(companionFun().length),// UNINITIALIZED_ENUM_COMPANION @@ -37,3 +37,28 @@ fun OtherEnum.Companion.extensionFun(): String = companionFun() val OtherEnum.Companion.extensionProp: String get() = companionProp +enum class EnumWithLambda(val lambda: () -> Unit) { + M({ + companionFun().length + companionProp.length + + EnumWithLambda.companionFun().length + EnumWithLambda.companionProp.length + + extensionFun().length + extensionProp.length + + EnumWithLambda.extensionFun().length + EnumWithLambda.extensionProp.length + }); + + companion object { + val companionProp = "someString" + fun companionFun(): String = "someString" + } +} + +fun EnumWithLambda.Companion.extensionFun(): String = companionFun() +val EnumWithLambda.Companion.extensionProp: String + get() = companionProp + diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.kt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.kt index fb1fde5b102..a738151cad0 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.kt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.kt @@ -1,5 +1,5 @@ // LANGUAGE: -ProhibitAccessToEnumCompanionMembersInEnumConstructorCall -// ISSUE: KT-49110 +// ISSUE: KT-49110, KT-54055 enum class SomeEnum(val x: Int) { A(companionFun().length),// UNINITIALIZED_ENUM_COMPANION @@ -37,3 +37,28 @@ fun OtherEnum.Companion.extensionFun(): String = companionFun() val OtherEnum.Companion.extensionProp: String get() = companionProp +enum class EnumWithLambda(val lambda: () -> Unit) { + M({ + companionFun().length + companionProp.length + + EnumWithLambda.companionFun().length + EnumWithLambda.companionProp.length + + extensionFun().length + extensionProp.length + + EnumWithLambda.extensionFun().length + EnumWithLambda.extensionProp.length + }); + + companion object { + val companionProp = "someString" + fun companionFun(): String = "someString" + } +} + +fun EnumWithLambda.Companion.extensionFun(): String = companionFun() +val EnumWithLambda.Companion.extensionProp: String + get() = companionProp + diff --git a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.txt b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.txt index 8aecdabf090..cbd6c01c891 100644 --- a/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.txt +++ b/compiler/testData/diagnostics/tests/controlFlowAnalysis/uninitializedCompanionOfEnum_before.txt @@ -1,8 +1,39 @@ package +public val EnumWithLambda.Companion.extensionProp: kotlin.String public val OtherEnum.Companion.extensionProp: kotlin.String +public fun EnumWithLambda.Companion.extensionFun(): kotlin.String public fun OtherEnum.Companion.extensionFun(): kotlin.String +public final enum class EnumWithLambda : kotlin.Enum { + enum entry M + + private constructor EnumWithLambda(/*0*/ lambda: () -> kotlin.Unit) + public final val lambda: () -> kotlin.Unit + @kotlin.internal.IntrinsicConstEvaluation public final override /*1*/ /*fake_override*/ val name: kotlin.String + public final override /*1*/ /*fake_override*/ val ordinal: kotlin.Int + protected final override /*1*/ /*fake_override*/ fun clone(): kotlin.Any + public final override /*1*/ /*fake_override*/ fun compareTo(/*0*/ other: EnumWithLambda): kotlin.Int + public final override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + protected/*protected and package*/ final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun finalize(): kotlin.Unit + public final override /*1*/ /*fake_override*/ /*isHiddenForResolutionEverywhereBesideSupercalls*/ fun getDeclaringClass(): java.lang.Class! + public final override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + + public companion object Companion { + private constructor Companion() + public final val companionProp: kotlin.String = "someString" + public final fun companionFun(): kotlin.String + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String + } + + // Static members + public final /*synthesized*/ fun valueOf(/*0*/ value: kotlin.String): EnumWithLambda + public final /*synthesized*/ fun values(): kotlin.Array +} + public final enum class OtherEnum : kotlin.Enum { enum entry G