diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 61d30448c49..6dcdf52fd03 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -49,6 +49,7 @@ import org.jetbrains.jet.lang.resolve.calls.model.VarargValueArgument; import org.jetbrains.jet.lang.resolve.java.AsmTypeConstants; import org.jetbrains.jet.lang.resolve.java.JvmAbi; import org.jetbrains.jet.lang.resolve.java.JvmAnnotationNames; +import org.jetbrains.jet.lang.resolve.java.descriptor.JavaCallableMemberDescriptor; import org.jetbrains.jet.lang.resolve.java.diagnostics.JvmDeclarationOrigin; import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmClassSignature; import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodParameterKind; @@ -1412,8 +1413,12 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { private void generateTraitMethods() { if (JetPsiUtil.isTrait(myClass)) return; - for(Map.Entry entry : CodegenUtil.getTraitMethods(descriptor).entrySet()) { - generateDelegationToTraitImpl(entry.getKey(), entry.getValue()); + for (Map.Entry entry : CodegenUtil.getTraitMethods(descriptor).entrySet()) { + FunctionDescriptor traitFun = entry.getKey(); + //skip java 8 default methods + if (!(traitFun instanceof JavaCallableMemberDescriptor)) { + generateDelegationToTraitImpl(traitFun, entry.getValue()); + } } } diff --git a/compiler/testData/codegen/boxWithJava/trait/MyInt.java b/compiler/testData/codegen/boxWithJava/trait/MyInt.java new file mode 100644 index 00000000000..8a9dc92f8f1 --- /dev/null +++ b/compiler/testData/codegen/boxWithJava/trait/MyInt.java @@ -0,0 +1,4 @@ +public interface MyInt { + + String test(); +} \ No newline at end of file diff --git a/compiler/testData/codegen/boxWithJava/trait/interfaceInheritance.kt b/compiler/testData/codegen/boxWithJava/trait/interfaceInheritance.kt new file mode 100644 index 00000000000..7e1dd4e1527 --- /dev/null +++ b/compiler/testData/codegen/boxWithJava/trait/interfaceInheritance.kt @@ -0,0 +1,11 @@ +trait A : MyInt { + override public fun test(): String? { + return "OK" + } +} + +class B: A + +fun box() : String { + return B().test()!! +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java index 553b1610bfd..aa1331789f3 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithJavaCodegenTestGenerated.java @@ -45,6 +45,12 @@ public class BlackBoxWithJavaCodegenTestGenerated extends AbstractBlackBoxCodege doTestWithJava(fileName); } + @TestMetadata("trait") + public void testTrait() throws Exception { + String fileName = JetTestUtils.navigationMetadata("compiler/testData/codegen/boxWithJava/trait/"); + doTestWithJava(fileName); + } + @TestMetadata("compiler/testData/codegen/boxWithJava/platformStatic") @TestDataPath("$PROJECT_ROOT") @InnerTestClasses({})