diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 780086f0389..567ad569bae 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -745,7 +745,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } private void generateTraitMethods(ExpressionCodegen codegen) { - if (!(myClass instanceof JetClass) || ((JetClass)myClass).isTrait() || ((JetClass)myClass).hasModifier(JetTokens.ABSTRACT_KEYWORD)) + if (myClass instanceof JetClass && (((JetClass)myClass).isTrait() || ((JetClass)myClass).hasModifier(JetTokens.ABSTRACT_KEYWORD))) return; for (Pair needDelegates : getTraitImplementations(descriptor)) { diff --git a/compiler/testData/codegen/regressions/kt2399.kt b/compiler/testData/codegen/regressions/kt2399.kt new file mode 100644 index 00000000000..8f4de76c99e --- /dev/null +++ b/compiler/testData/codegen/regressions/kt2399.kt @@ -0,0 +1,43 @@ +import java.util.Collection +import java.util.ArrayList + +class JsonObject { +} + +class JsonArray { +} + +class ProjectInfo { + public fun toString(): String = "OK" +} + +public trait Parser { + public fun parse(source: IN): OUT +} + +public trait MultiParser { + public fun parse(source: IN): Collection +} + +public trait JsonParser: Parser, MultiParser { + public override fun parse(source: JsonArray): Collection { + return ArrayList() + } +} + +public abstract class ProjectInfoJsonParser(): JsonParser { + public override fun parse(source: JsonObject): ProjectInfo { + return ProjectInfo() + } +} + +class ProjectApiContext { + public val projectInfoJsonParser: ProjectInfoJsonParser = object : ProjectInfoJsonParser(){ + } +} + +fun box(): String { + val context = ProjectApiContext() + val array = context.projectInfoJsonParser.parse(JsonArray()) + return if (array != null) "OK" else "fail" +} diff --git a/compiler/tests/org/jetbrains/jet/codegen/TraitsTest.java b/compiler/tests/org/jetbrains/jet/codegen/TraitsTest.java index 6cdb140549f..25e56a2e115 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/TraitsTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/TraitsTest.java @@ -18,7 +18,7 @@ package org.jetbrains.jet.codegen; import org.jetbrains.jet.ConfigurationKind; -public class TraitsTest extends CodegenTestCase { +public class TraitsTest extends CodegenTestCase { @Override protected void setUp() throws Exception { @@ -31,29 +31,33 @@ public class TraitsTest extends CodegenTestCase { return "traits"; } - public void testSimple () throws Exception { + public void testSimple () { blackBoxFile("traits/simple.jet"); // System.out.println(generateToText()); } - public void testWithRequired () throws Exception { + public void testWithRequired () { blackBoxFile("traits/withRequired.jet"); // System.out.println(generateToText()); } - public void testMultiple () throws Exception { + public void testMultiple () { blackBoxFile("traits/multiple.jet"); } - public void testStdlib () throws Exception { + public void testStdlib () { blackBoxFile("traits/stdlib.jet"); } - public void testInheritedFun() throws Exception { + public void testInheritedFun() { blackBoxFile("traits/inheritedFun.jet"); } - public void testInheritedVar() throws Exception { + public void testInheritedVar() { blackBoxFile("traits/inheritedVar.jet"); } + + public void testKt2399() { + blackBoxFile("regressions/kt2399.kt"); + } }