Generated field for classObject is now final

EA-38323 Fixed - Illegal field modifiers in class
This commit is contained in:
Natalia.Ukhorskaya
2012-09-14 16:40:38 +04:00
parent 812b9453d1
commit c5db89e534
3 changed files with 18 additions and 1 deletions
@@ -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
@@ -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
}
@@ -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