From c5db89e5347e435f9dc5747ef4a108f5510d2b8e Mon Sep 17 00:00:00 2001 From: "Natalia.Ukhorskaya" Date: Fri, 14 Sep 2012 16:40:38 +0400 Subject: [PATCH] Generated field for classObject is now final EA-38323 Fixed - Illegal field modifiers in class --- .../jet/codegen/ImplementationBodyCodegen.java | 2 +- .../testData/codegen/classes/classObjectInTrait.jet | 12 ++++++++++++ .../org/jetbrains/jet/codegen/ClassGenTest.java | 5 +++++ 3 files changed, 18 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/classes/classObjectInTrait.jet diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index c4825c3012a..75febd1d848 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -596,7 +596,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { final ClassDescriptor descriptor1 = bindingContext.get(BindingContext.CLASS, classObject.getObjectDeclaration()); assert descriptor1 != null; Type type = Type.getObjectType(typeMapper.mapType(descriptor1).getInternalName()); - v.newField(classObject, ACC_PUBLIC | ACC_STATIC, "$classobj", type.getDescriptor(), null, null); + v.newField(classObject, ACC_PUBLIC | ACC_STATIC | ACC_FINAL, "$classobj", type.getDescriptor(), null, null); staticInitializerChunks.add(new CodeChunk() { @Override diff --git a/compiler/testData/codegen/classes/classObjectInTrait.jet b/compiler/testData/codegen/classes/classObjectInTrait.jet new file mode 100644 index 00000000000..f931cb5c4e8 --- /dev/null +++ b/compiler/testData/codegen/classes/classObjectInTrait.jet @@ -0,0 +1,12 @@ +// EA-38323 - Illegal field modifiers in class: classObject field in C must be static and final + +trait C { + class object { + public val FOO: String = "OK" + } +} + +fun box(): String { + return C.FOO +} + diff --git a/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java index 65c177a1757..114151cd4e0 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/ClassGenTest.java @@ -217,6 +217,11 @@ public class ClassGenTest extends CodegenTestCase { blackBoxFile("classes/classObject.jet"); } + public void testClassObjectInTrait() throws Exception { + createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); + blackBoxFile("classes/classObjectInTrait.jet"); + } + public void testClassObjectMethod() throws Exception { createEnvironmentWithMockJdkAndIdeaAnnotations(ConfigurationKind.JDK_ONLY); // todo to be implemented after removal of type info