[FIR] Properly prohibit access to enum companion in enum entry initialization section
^KT-57456 Fixed KT-57608
This commit is contained in:
committed by
Space Team
parent
cbfa155333
commit
e02194b461
Vendored
+2
-2
@@ -1,7 +1,7 @@
|
||||
// SKIP_TXT
|
||||
|
||||
enum class A(val z: Any) {
|
||||
Y(<!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>x<!>);
|
||||
Y(<!UNINITIALIZED_ENUM_COMPANION!>x<!>);
|
||||
|
||||
companion object {
|
||||
val x = A.Y.ordinal
|
||||
@@ -9,7 +9,7 @@ enum class A(val z: Any) {
|
||||
}
|
||||
|
||||
enum class B(val z: Any) {
|
||||
Y(<!UNINITIALIZED_VARIABLE!><!UNINITIALIZED_ENUM_COMPANION!>B<!>.x<!>);
|
||||
Y(<!UNINITIALIZED_ENUM_COMPANION!>B<!>.x);
|
||||
|
||||
companion object {
|
||||
val x = B.Y.ordinal
|
||||
|
||||
+21
-21
@@ -10,22 +10,22 @@ import kotlin.reflect.KProperty
|
||||
|
||||
enum class Enum {
|
||||
A {
|
||||
val aInside = foo()
|
||||
val bInside = inPlaceRun { foo() }
|
||||
val aInside = <!UNINITIALIZED_ENUM_COMPANION!>foo<!>()
|
||||
val bInside = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
val cInside = nonInPlaceRun { foo() }
|
||||
|
||||
val dInside by foo()
|
||||
val eInside by inPlaceDelegate { foo() }
|
||||
val dInside by <!UNINITIALIZED_ENUM_COMPANION!>foo<!>()
|
||||
val eInside by inPlaceDelegate { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
val fInside by nonInPlaceDelegate { foo() }
|
||||
},
|
||||
B {
|
||||
init {
|
||||
val aInit = foo()
|
||||
val bInit = inPlaceRun { foo() }
|
||||
val aInit = <!UNINITIALIZED_ENUM_COMPANION!>foo<!>()
|
||||
val bInit = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
val cInit = nonInPlaceRun { foo() }
|
||||
|
||||
val dInit by foo()
|
||||
val eInit by inPlaceDelegate { foo() }
|
||||
val dInit by <!UNINITIALIZED_ENUM_COMPANION!>foo<!>()
|
||||
val eInit by inPlaceDelegate { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
val fInit by nonInPlaceDelegate { foo() }
|
||||
}
|
||||
},
|
||||
@@ -65,21 +65,21 @@ enum class Enum {
|
||||
D {
|
||||
init {
|
||||
val someObj = object {
|
||||
val aInside = foo()
|
||||
val bInside = inPlaceRun { foo() }
|
||||
val aInside = <!UNINITIALIZED_ENUM_COMPANION!>foo<!>()
|
||||
val bInside = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
val cInside = nonInPlaceRun { foo() }
|
||||
|
||||
val dInside by foo()
|
||||
val eInside by inPlaceDelegate { foo() }
|
||||
val dInside by <!UNINITIALIZED_ENUM_COMPANION!>foo<!>()
|
||||
val eInside by inPlaceDelegate { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
val fInside by nonInPlaceDelegate { foo() }
|
||||
|
||||
init {
|
||||
val aInit = foo()
|
||||
val bInit = inPlaceRun { foo() }
|
||||
val aInit = <!UNINITIALIZED_ENUM_COMPANION!>foo<!>()
|
||||
val bInit = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
val cInit = nonInPlaceRun { foo() }
|
||||
|
||||
val dInit by foo()
|
||||
val eInit by inPlaceDelegate { foo() }
|
||||
val dInit by <!UNINITIALIZED_ENUM_COMPANION!>foo<!>()
|
||||
val eInit by inPlaceDelegate { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
val fInit by nonInPlaceDelegate { foo() }
|
||||
}
|
||||
|
||||
@@ -97,12 +97,12 @@ enum class Enum {
|
||||
}
|
||||
;
|
||||
|
||||
val a = foo()
|
||||
val b = inPlaceRun { foo() }
|
||||
val a = <!UNINITIALIZED_ENUM_COMPANION!>foo<!>()
|
||||
val b = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
val c = nonInPlaceRun { foo() }
|
||||
|
||||
val d by foo()
|
||||
val e by inPlaceDelegate { foo() }
|
||||
val d by <!UNINITIALIZED_ENUM_COMPANION!>foo<!>()
|
||||
val e by inPlaceDelegate { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
val f by nonInPlaceDelegate { foo() }
|
||||
|
||||
companion object {
|
||||
@@ -114,7 +114,7 @@ enum class EnumWithConstructor(val a: String, val b: String, val c: String) {
|
||||
A(
|
||||
a = <!UNINITIALIZED_ENUM_COMPANION!>foo<!>(),
|
||||
b = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() },
|
||||
c = nonInPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>foo<!>() }
|
||||
c = nonInPlaceRun { foo() }
|
||||
);
|
||||
|
||||
companion object {
|
||||
|
||||
+25
-25
@@ -10,22 +10,22 @@ import kotlin.reflect.KProperty
|
||||
|
||||
enum class Enum {
|
||||
A {
|
||||
val aInside = value
|
||||
val bInside = inPlaceRun { value }
|
||||
val aInside = <!UNINITIALIZED_ENUM_COMPANION!>value<!>
|
||||
val bInside = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
val cInside = nonInPlaceRun { value }
|
||||
|
||||
val dInside by value
|
||||
val eInside by inPlaceDelegate { value }
|
||||
val dInside by <!UNINITIALIZED_ENUM_COMPANION!>value<!>
|
||||
val eInside by inPlaceDelegate { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
val fInside by nonInPlaceDelegate { value }
|
||||
},
|
||||
B {
|
||||
init {
|
||||
val aInit = value
|
||||
val bInit = inPlaceRun { value }
|
||||
val aInit = <!UNINITIALIZED_ENUM_COMPANION!>value<!>
|
||||
val bInit = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
val cInit = nonInPlaceRun { value }
|
||||
|
||||
val dInit by value
|
||||
val eInit by inPlaceDelegate { value }
|
||||
val dInit by <!UNINITIALIZED_ENUM_COMPANION!>value<!>
|
||||
val eInit by inPlaceDelegate { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
val fInit by nonInPlaceDelegate { value }
|
||||
}
|
||||
},
|
||||
@@ -65,21 +65,21 @@ enum class Enum {
|
||||
D {
|
||||
init {
|
||||
val someObj = object {
|
||||
val aInside = value
|
||||
val bInside = inPlaceRun { value }
|
||||
val aInside = <!UNINITIALIZED_ENUM_COMPANION!>value<!>
|
||||
val bInside = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
val cInside = nonInPlaceRun { value }
|
||||
|
||||
val dInside by value
|
||||
val eInside by inPlaceDelegate { value }
|
||||
val dInside by <!UNINITIALIZED_ENUM_COMPANION!>value<!>
|
||||
val eInside by inPlaceDelegate { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
val fInside by nonInPlaceDelegate { value }
|
||||
|
||||
init {
|
||||
val aInit = value
|
||||
val bInit = inPlaceRun { value }
|
||||
val aInit = <!UNINITIALIZED_ENUM_COMPANION!>value<!>
|
||||
val bInit = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
val cInit = nonInPlaceRun { value }
|
||||
|
||||
val dInit by value
|
||||
val eInit by inPlaceDelegate { value }
|
||||
val dInit by <!UNINITIALIZED_ENUM_COMPANION!>value<!>
|
||||
val eInit by inPlaceDelegate { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
val fInit by nonInPlaceDelegate { value }
|
||||
}
|
||||
|
||||
@@ -97,13 +97,13 @@ enum class Enum {
|
||||
}
|
||||
;
|
||||
|
||||
val a = <!UNINITIALIZED_VARIABLE!>value<!>
|
||||
val b = inPlaceRun { <!UNINITIALIZED_VARIABLE!>value<!> }
|
||||
val c = nonInPlaceRun { <!UNINITIALIZED_VARIABLE!>value<!> }
|
||||
val a = <!UNINITIALIZED_ENUM_COMPANION!>value<!>
|
||||
val b = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
val c = nonInPlaceRun { value }
|
||||
|
||||
val d by <!UNINITIALIZED_VARIABLE!>value<!>
|
||||
val e by inPlaceDelegate { <!UNINITIALIZED_VARIABLE!>value<!> }
|
||||
val f by nonInPlaceDelegate { <!UNINITIALIZED_VARIABLE!>value<!> }
|
||||
val d by <!UNINITIALIZED_ENUM_COMPANION!>value<!>
|
||||
val e by inPlaceDelegate { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
val f by nonInPlaceDelegate { value }
|
||||
|
||||
companion object {
|
||||
val value = "value"
|
||||
@@ -112,9 +112,9 @@ enum class Enum {
|
||||
|
||||
enum class EnumWithConstructor(val a: String, val b: String, val c: String) {
|
||||
A(
|
||||
a = <!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>value<!>,
|
||||
b = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>value<!> },
|
||||
c = nonInPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>value<!> }
|
||||
a = <!UNINITIALIZED_ENUM_COMPANION!>value<!>,
|
||||
b = inPlaceRun { <!UNINITIALIZED_ENUM_COMPANION!>value<!> },
|
||||
c = nonInPlaceRun { value }
|
||||
);
|
||||
|
||||
companion object {
|
||||
|
||||
Vendored
+3
-3
@@ -9,7 +9,7 @@ enum class B(val x: Int) {
|
||||
}
|
||||
|
||||
enum class C(val x: Int) {
|
||||
C1(<!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>SUM<!>),
|
||||
C1(<!UNINITIALIZED_ENUM_COMPANION!>SUM<!>),
|
||||
C2(1);
|
||||
|
||||
companion object {
|
||||
@@ -26,8 +26,8 @@ enum class Fruit(personal: Int) {
|
||||
val common = 20
|
||||
}
|
||||
|
||||
val score = personal + <!UNINITIALIZED_VARIABLE!>common<!>
|
||||
val score2 = { personal + <!UNINITIALIZED_VARIABLE!>common<!> }()
|
||||
val score = personal + <!UNINITIALIZED_ENUM_COMPANION!>common<!>
|
||||
val score2 = { personal + common }()
|
||||
}
|
||||
|
||||
// Another example from KT-11769
|
||||
|
||||
Vendored
+11
-11
@@ -3,13 +3,13 @@
|
||||
|
||||
enum class SomeEnum(val x: Int) {
|
||||
A(<!UNINITIALIZED_ENUM_COMPANION!>companionFun<!>().length),// UNINITIALIZED_ENUM_COMPANION
|
||||
B(<!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>companionProp<!>.length), // UNINITIALIZED_VARIABLE
|
||||
B(<!UNINITIALIZED_ENUM_COMPANION!>companionProp<!>.length), // UNINITIALIZED_VARIABLE
|
||||
|
||||
C(<!UNINITIALIZED_ENUM_COMPANION!>SomeEnum<!>.companionFun().length),
|
||||
D(<!UNINITIALIZED_VARIABLE!><!UNINITIALIZED_ENUM_COMPANION!>SomeEnum<!>.companionProp<!>.length),
|
||||
D(<!UNINITIALIZED_ENUM_COMPANION!>SomeEnum<!>.companionProp.length),
|
||||
|
||||
E(SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.companionFun().length),
|
||||
F(<!UNINITIALIZED_VARIABLE!>SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.companionProp<!>.length); // UNINITIALIZED_VARIABLE
|
||||
F(SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.companionProp.length); // UNINITIALIZED_VARIABLE
|
||||
|
||||
companion object {
|
||||
val companionProp = "someString"
|
||||
@@ -39,17 +39,17 @@ val OtherEnum.Companion.extensionProp: String
|
||||
|
||||
enum class EnumWithLambda(val lambda: () -> Unit) {
|
||||
M({
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>companionFun<!>().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>companionProp<!>.length
|
||||
companionFun().length
|
||||
companionProp.length
|
||||
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.companionFun().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.companionProp.length
|
||||
EnumWithLambda.companionFun().length
|
||||
EnumWithLambda.companionProp.length
|
||||
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>extensionFun<!>().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>extensionProp<!>.length
|
||||
extensionFun().length
|
||||
extensionProp.length
|
||||
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.extensionFun().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.extensionProp.length
|
||||
EnumWithLambda.extensionFun().length
|
||||
EnumWithLambda.extensionProp.length
|
||||
});
|
||||
|
||||
companion object {
|
||||
|
||||
Vendored
+11
-11
@@ -3,13 +3,13 @@
|
||||
|
||||
enum class SomeEnum(val x: Int) {
|
||||
A(<!UNINITIALIZED_ENUM_COMPANION!>companionFun<!>().length),// UNINITIALIZED_ENUM_COMPANION
|
||||
B(<!UNINITIALIZED_ENUM_COMPANION, UNINITIALIZED_VARIABLE!>companionProp<!>.length), // UNINITIALIZED_VARIABLE
|
||||
B(<!UNINITIALIZED_ENUM_COMPANION!>companionProp<!>.length), // UNINITIALIZED_VARIABLE
|
||||
|
||||
C(<!UNINITIALIZED_ENUM_COMPANION!>SomeEnum<!>.companionFun().length),
|
||||
D(<!UNINITIALIZED_VARIABLE!><!UNINITIALIZED_ENUM_COMPANION!>SomeEnum<!>.companionProp<!>.length),
|
||||
D(<!UNINITIALIZED_ENUM_COMPANION!>SomeEnum<!>.companionProp.length),
|
||||
|
||||
E(SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.companionFun().length),
|
||||
F(<!UNINITIALIZED_VARIABLE!>SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.companionProp<!>.length); // UNINITIALIZED_VARIABLE
|
||||
F(SomeEnum.<!UNINITIALIZED_ENUM_COMPANION!>Companion<!>.companionProp.length); // UNINITIALIZED_VARIABLE
|
||||
|
||||
companion object {
|
||||
val companionProp = "someString"
|
||||
@@ -39,17 +39,17 @@ val OtherEnum.Companion.extensionProp: String
|
||||
|
||||
enum class EnumWithLambda(val lambda: () -> Unit) {
|
||||
M({
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>companionFun<!>().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>companionProp<!>.length
|
||||
companionFun().length
|
||||
companionProp.length
|
||||
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.companionFun().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.companionProp.length
|
||||
EnumWithLambda.companionFun().length
|
||||
EnumWithLambda.companionProp.length
|
||||
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>extensionFun<!>().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>extensionProp<!>.length
|
||||
extensionFun().length
|
||||
extensionProp.length
|
||||
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.extensionFun().length
|
||||
<!UNINITIALIZED_ENUM_COMPANION!>EnumWithLambda<!>.extensionProp.length
|
||||
EnumWithLambda.extensionFun().length
|
||||
EnumWithLambda.extensionProp.length
|
||||
});
|
||||
|
||||
companion object {
|
||||
|
||||
Reference in New Issue
Block a user