From abf352cebd15b63df6f3f090448d5e096327caeb Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Wed, 29 Jan 2014 17:57:50 +0400 Subject: [PATCH] KT-4485 getGenericInterfaces vs getInterfaces for kotlin classes #KT-4485 fixed --- .../codegen/ImplementationBodyCodegen.java | 4 ++++ .../regressions/getGenericInterfaces.kt | 24 +++++++++++++++++++ ...lackBoxWithStdlibCodegenTestGenerated.java | 5 ++++ 3 files changed, 33 insertions(+) create mode 100644 compiler/testData/codegen/boxWithStdlib/regressions/getGenericInterfaces.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 7aa245f2c59..9e7d1037eb1 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -350,6 +350,10 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { sw.writeSuperclassEnd(); LinkedHashSet superInterfaces = new LinkedHashSet(); + sw.writeInterface(); + sw.writeClassBegin(Type.getObjectType(JvmAbi.JET_OBJECT.getInternalName())); + sw.writeClassEnd(); + sw.writeInterfaceEnd(); superInterfaces.add(JvmAbi.JET_OBJECT.getInternalName()); for (JetDelegationSpecifier specifier : myClass.getDelegationSpecifiers()) { diff --git a/compiler/testData/codegen/boxWithStdlib/regressions/getGenericInterfaces.kt b/compiler/testData/codegen/boxWithStdlib/regressions/getGenericInterfaces.kt new file mode 100644 index 00000000000..62882c27798 --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/regressions/getGenericInterfaces.kt @@ -0,0 +1,24 @@ +// KT-4485 getGenericInterfaces vs getInterfaces for kotlin classes + +class SimpleClass + +class ClassWithNonGenericSuperInterface: Cloneable + +class ClassWithGenericSuperInterface: java.util.Comparator { + override fun compare(a: String, b: String): Int = 0 +} + +fun check(klass: Class<*>) { + val interfaces = klass.getInterfaces().toList() + val genericInterfaces = klass.getGenericInterfaces().toList() + if (interfaces.size != genericInterfaces.size) { + throw AssertionError("interfaces=$interfaces, genericInterfaces=$genericInterfaces") + } +} + +fun box(): String { + check(javaClass()) + check(javaClass()) + check(javaClass()) + return "OK" +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 493792a3c9c..f8de45af583 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -903,6 +903,11 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/regressions/generic.kt"); } + @TestMetadata("getGenericInterfaces.kt") + public void testGetGenericInterfaces() throws Exception { + doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/regressions/getGenericInterfaces.kt"); + } + @TestMetadata("implicitlyCastToHashable.kt") public void testImplicitlyCastToHashable() throws Exception { doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/regressions/implicitlyCastToHashable.kt");