Fix enum entry reference from enum entry initialization context

Enum entries are "special" kind of singletons that should be
referenced as a captured 'this' instance inside during entry
initialization, because corresponding static fields in enum class
are not initialized yet.

 #KT-7257 Fixed
This commit is contained in:
Dmitry Petrov
2017-09-11 11:42:53 +03:00
parent 40e2046e76
commit 6b6d1e80f8
19 changed files with 601 additions and 14 deletions
@@ -7757,6 +7757,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("deepInnerClassInEnumEntryClass.kt")
public void testDeepInnerClassInEnumEntryClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/deepInnerClassInEnumEntryClass.kt");
doTest(fileName);
}
@TestMetadata("deepInnerClassInEnumEntryClass2.kt")
public void testDeepInnerClassInEnumEntryClass2() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/deepInnerClassInEnumEntryClass2.kt");
doTest(fileName);
}
@TestMetadata("emptyConstructor.kt")
public void testEmptyConstructor() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/emptyConstructor.kt");
@@ -7817,6 +7829,18 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("innerClassMethodInEnumEntryClass.kt")
public void testInnerClassMethodInEnumEntryClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/innerClassMethodInEnumEntryClass.kt");
doTest(fileName);
}
@TestMetadata("innerClassMethodInEnumEntryClass2.kt")
public void testInnerClassMethodInEnumEntryClass2() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/innerClassMethodInEnumEntryClass2.kt");
doTest(fileName);
}
@TestMetadata("innerWithExistingClassObject.kt")
public void testInnerWithExistingClassObject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/innerWithExistingClassObject.kt");
@@ -7835,6 +7859,66 @@ public class BlackBoxCodegenTestGenerated extends AbstractBlackBoxCodegenTest {
doTest(fileName);
}
@TestMetadata("kt7257.kt")
public void testKt7257() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257.kt");
doTest(fileName);
}
@TestMetadata("kt7257_anonObjectInit.kt")
public void testKt7257_anonObjectInit() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_anonObjectInit.kt");
doTest(fileName);
}
@TestMetadata("kt7257_anonObjectMethod.kt")
public void testKt7257_anonObjectMethod() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_anonObjectMethod.kt");
doTest(fileName);
}
@TestMetadata("kt7257_boundReference1.kt")
public void testKt7257_boundReference1() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_boundReference1.kt");
doTest(fileName);
}
@TestMetadata("kt7257_boundReference2.kt")
public void testKt7257_boundReference2() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_boundReference2.kt");
doTest(fileName);
}
@TestMetadata("kt7257_boundReferenceWithImplicitReceiver.kt")
public void testKt7257_boundReferenceWithImplicitReceiver() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_boundReferenceWithImplicitReceiver.kt");
doTest(fileName);
}
@TestMetadata("kt7257_explicitReceiver.kt")
public void testKt7257_explicitReceiver() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_explicitReceiver.kt");
doTest(fileName);
}
@TestMetadata("kt7257_fullyQualifiedReceiver.kt")
public void testKt7257_fullyQualifiedReceiver() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_fullyQualifiedReceiver.kt");
doTest(fileName);
}
@TestMetadata("kt7257_namedLocalFun.kt")
public void testKt7257_namedLocalFun() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_namedLocalFun.kt");
doTest(fileName);
}
@TestMetadata("kt7257_notInline.kt")
public void testKt7257_notInline() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_notInline.kt");
doTest(fileName);
}
@TestMetadata("kt9711.kt")
public void testKt9711() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt9711.kt");
@@ -7757,6 +7757,18 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
doTest(fileName);
}
@TestMetadata("deepInnerClassInEnumEntryClass.kt")
public void testDeepInnerClassInEnumEntryClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/deepInnerClassInEnumEntryClass.kt");
doTest(fileName);
}
@TestMetadata("deepInnerClassInEnumEntryClass2.kt")
public void testDeepInnerClassInEnumEntryClass2() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/deepInnerClassInEnumEntryClass2.kt");
doTest(fileName);
}
@TestMetadata("emptyConstructor.kt")
public void testEmptyConstructor() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/emptyConstructor.kt");
@@ -7817,6 +7829,18 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
doTest(fileName);
}
@TestMetadata("innerClassMethodInEnumEntryClass.kt")
public void testInnerClassMethodInEnumEntryClass() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/innerClassMethodInEnumEntryClass.kt");
doTest(fileName);
}
@TestMetadata("innerClassMethodInEnumEntryClass2.kt")
public void testInnerClassMethodInEnumEntryClass2() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/innerClassMethodInEnumEntryClass2.kt");
doTest(fileName);
}
@TestMetadata("innerWithExistingClassObject.kt")
public void testInnerWithExistingClassObject() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/innerWithExistingClassObject.kt");
@@ -7835,6 +7859,66 @@ public class LightAnalysisModeTestGenerated extends AbstractLightAnalysisModeTes
doTest(fileName);
}
@TestMetadata("kt7257.kt")
public void testKt7257() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257.kt");
doTest(fileName);
}
@TestMetadata("kt7257_anonObjectInit.kt")
public void testKt7257_anonObjectInit() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_anonObjectInit.kt");
doTest(fileName);
}
@TestMetadata("kt7257_anonObjectMethod.kt")
public void testKt7257_anonObjectMethod() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_anonObjectMethod.kt");
doTest(fileName);
}
@TestMetadata("kt7257_boundReference1.kt")
public void testKt7257_boundReference1() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_boundReference1.kt");
doTest(fileName);
}
@TestMetadata("kt7257_boundReference2.kt")
public void testKt7257_boundReference2() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_boundReference2.kt");
doTest(fileName);
}
@TestMetadata("kt7257_boundReferenceWithImplicitReceiver.kt")
public void testKt7257_boundReferenceWithImplicitReceiver() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_boundReferenceWithImplicitReceiver.kt");
doTest(fileName);
}
@TestMetadata("kt7257_explicitReceiver.kt")
public void testKt7257_explicitReceiver() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_explicitReceiver.kt");
doTest(fileName);
}
@TestMetadata("kt7257_fullyQualifiedReceiver.kt")
public void testKt7257_fullyQualifiedReceiver() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_fullyQualifiedReceiver.kt");
doTest(fileName);
}
@TestMetadata("kt7257_namedLocalFun.kt")
public void testKt7257_namedLocalFun() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_namedLocalFun.kt");
doTest(fileName);
}
@TestMetadata("kt7257_notInline.kt")
public void testKt7257_notInline() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt7257_notInline.kt");
doTest(fileName);
}
@TestMetadata("kt9711.kt")
public void testKt9711() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/codegen/box/enum/kt9711.kt");