diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index c7f29560c3c..0bcdd1b958f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -942,11 +942,11 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } private void generateGetTypeInfo() { - if(myClass instanceof JetClass && ((JetClass)myClass).isTrait()) - return; - JetType defaultType = descriptor.getDefaultType(); if(CodegenUtil.requireTypeInfoConstructorArg(defaultType)) { + if(myClass instanceof JetClass && ((JetClass)myClass).isTrait()) + return; + if(!CodegenUtil.hasDerivedTypeInfoField(defaultType)) { v.newField(myClass, ACC_PROTECTED, JvmAbi.TYPE_INFO_FIELD, "Ljet/TypeInfo;", null, null); @@ -975,7 +975,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } } else { - genGetStaticGetTypeInfoMethod(); + if (!(myClass instanceof JetClass) || !((JetClass) myClass).isTrait()) { + genGetStaticGetTypeInfoMethod(); + } + staticTypeInfoField(); } } diff --git a/testlib/test/regressions/Kt1149.kt b/testlib/test/regressions/Kt1149.kt new file mode 100644 index 00000000000..cfc1c911fe1 --- /dev/null +++ b/testlib/test/regressions/Kt1149.kt @@ -0,0 +1,23 @@ +package test.regressions.kt1149 + +import java.util.ArrayList +import std.util.* +import junit.framework.* + +public trait SomeTrait { + fun foo() +} + +class Kt1149Test() : TestCase() { + fun testMe() { + val list = ArrayList() + var res = ArrayList() + list.add(object : SomeTrait { + override fun foo() { + res.add("anonymous.foo()") + } + }) + list.foreach{ it.foo() } + Assert.assertEquals("anonymous.foo()", res[0]) + } +}