From 226bfe65f0d347f2c80aa95013ac536c6f15eb5f Mon Sep 17 00:00:00 2001 From: Alexander Udalov Date: Tue, 12 Aug 2014 12:03:32 +0400 Subject: [PATCH] Don't make traits and annotations inherit from KObject #KT-5609 Fixed --- .../codegen/ImplementationBodyCodegen.java | 3 +- .../nullabilityAnnotations/Generic.java | 2 +- .../nullabilityAnnotations/Primitives.java | 2 +- .../PrivateInTrait.java | 2 +- .../nullabilityAnnotations/Trait.java | 2 +- .../TraitClassObjectField.java | 2 +- .../boxWithStdlib/regressions/kt5609.kt | 30 +++++++++++++++++++ .../MappedSupertypeWithVariance.kt | 2 +- .../jet/codegen/AnnotationGenTest.java | 8 ++--- ...lackBoxWithStdlibCodegenTestGenerated.java | 5 ++++ 10 files changed, 44 insertions(+), 14 deletions(-) create mode 100644 compiler/testData/codegen/boxWithStdlib/regressions/kt5609.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java index 696e62dc7e1..c8b572d142f 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/ImplementationBodyCodegen.java @@ -65,7 +65,6 @@ import org.jetbrains.jet.lang.types.*; import org.jetbrains.jet.lang.types.checker.JetTypeChecker; import org.jetbrains.jet.lang.types.lang.KotlinBuiltIns; import org.jetbrains.jet.lexer.JetTokens; -import org.jetbrains.jet.renderer.DescriptorRenderer; import org.jetbrains.org.objectweb.asm.*; import org.jetbrains.org.objectweb.asm.commons.InstructionAdapter; import org.jetbrains.org.objectweb.asm.commons.Method; @@ -369,7 +368,7 @@ public class ImplementationBodyCodegen extends ClassBodyCodegen { } LinkedHashSet superInterfaces = new LinkedHashSet(); - if (!explicitKObject) { + if (!explicitKObject && !isInterface(descriptor)) { Type kObject = asmTypeByFqNameWithoutInnerClasses(JvmAbi.K_OBJECT); sw.writeInterface(); sw.writeClassBegin(kObject); diff --git a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Generic.java b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Generic.java index 152f476b4a0..337546bfa6f 100644 --- a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Generic.java +++ b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Generic.java @@ -1,4 +1,4 @@ -public interface Generic extends kotlin.jvm.internal.KObject { +public interface Generic { N a(@jet.runtime.typeinfo.JetValueParameter(name = "n") N n); @org.jetbrains.annotations.NotNull diff --git a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Primitives.java b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Primitives.java index e9e92214695..b2280afdc2b 100644 --- a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Primitives.java +++ b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Primitives.java @@ -1,4 +1,4 @@ -public interface Primitives extends kotlin.jvm.internal.KObject { +public interface Primitives { int $$int /* Real name is 'int' */(@jet.runtime.typeinfo.JetValueParameter(name = "x") int x); @org.jetbrains.annotations.Nullable diff --git a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/PrivateInTrait.java b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/PrivateInTrait.java index 052cdba2245..f2d71c146cf 100644 --- a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/PrivateInTrait.java +++ b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/PrivateInTrait.java @@ -1,4 +1,4 @@ -public interface PrivateInTrait extends kotlin.jvm.internal.KObject { +public interface PrivateInTrait { @org.jetbrains.annotations.NotNull java.lang.String getNn(); diff --git a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Trait.java b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Trait.java index 0470e2dec65..598e9222342 100644 --- a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Trait.java +++ b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/Trait.java @@ -1,4 +1,4 @@ -public interface Trait extends kotlin.jvm.internal.KObject { +public interface Trait { @org.jetbrains.annotations.NotNull java.lang.String notNull(@jet.runtime.typeinfo.JetValueParameter(name = "a") @org.jetbrains.annotations.NotNull java.lang.String a); diff --git a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/TraitClassObjectField.java b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/TraitClassObjectField.java index fe882578e11..e62e588f3de 100644 --- a/compiler/testData/asJava/lightClasses/nullabilityAnnotations/TraitClassObjectField.java +++ b/compiler/testData/asJava/lightClasses/nullabilityAnnotations/TraitClassObjectField.java @@ -1,4 +1,4 @@ -public interface TraitClassObjectField extends kotlin.jvm.internal.KObject { +public interface TraitClassObjectField { TraitClassObjectField.object OBJECT$; @org.jetbrains.annotations.Nullable java.lang.String x = ""; diff --git a/compiler/testData/codegen/boxWithStdlib/regressions/kt5609.kt b/compiler/testData/codegen/boxWithStdlib/regressions/kt5609.kt new file mode 100644 index 00000000000..a866c62f612 --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/regressions/kt5609.kt @@ -0,0 +1,30 @@ +// KT-5609: interfaces should not inherit from KObject, unless explicitly said so + +trait A + +trait B : kotlin.jvm.internal.KObject + +annotation class C + +class D + +class E : kotlin.jvm.internal.KObject + +fun box(): String { + val a = javaClass().getGenericInterfaces().toList() + if (a.toString() != "[]") return "Fail A: $a" + + val b = javaClass().getGenericInterfaces().toList() + if (b.toString() != "[interface kotlin.jvm.internal.KObject]") return "Fail B: $b" + + val c = javaClass().getGenericInterfaces().toList() + if (c.toString() != "[interface java.lang.annotation.Annotation]") return "Fail C: $c" + + val d = javaClass().getGenericInterfaces().toList() + if (d.toString() != "[interface kotlin.jvm.internal.KObject]") return "Fail D: $d" + + val e = javaClass().getGenericInterfaces().toList() + if (e.toString() != "[interface kotlin.jvm.internal.KObject]") return "Fail E: $e" + + return "OK" +} diff --git a/compiler/testData/writeSignature/declarationSiteVariance/MappedSupertypeWithVariance.kt b/compiler/testData/writeSignature/declarationSiteVariance/MappedSupertypeWithVariance.kt index b3dc2dbb72b..9441498ed92 100644 --- a/compiler/testData/writeSignature/declarationSiteVariance/MappedSupertypeWithVariance.kt +++ b/compiler/testData/writeSignature/declarationSiteVariance/MappedSupertypeWithVariance.kt @@ -3,4 +3,4 @@ trait Derived: List // class: Derived // jvm signature: Derived -// generic signature: Ljava/lang/Object;Lkotlin/jvm/internal/KObject;Ljava/util/List; +// generic signature: Ljava/lang/Object;Ljava/util/List; diff --git a/compiler/tests/org/jetbrains/jet/codegen/AnnotationGenTest.java b/compiler/tests/org/jetbrains/jet/codegen/AnnotationGenTest.java index 0ec949de17f..ad5f193a0a0 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/AnnotationGenTest.java +++ b/compiler/tests/org/jetbrains/jet/codegen/AnnotationGenTest.java @@ -16,7 +16,6 @@ package org.jetbrains.jet.codegen; -import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.ConfigurationKind; @@ -233,11 +232,8 @@ public class AnnotationGenTest extends CodegenTestCase { Class[] interfaces = aClass.getInterfaces(); assertEquals(0, aClass.getDeclaredMethods().length); assertTrue(aClass.isAnnotation()); - assertEquals(2, interfaces.length); - assertEquals( - Sets.newHashSet("java.lang.annotation.Annotation", "kotlin.jvm.internal.KObject"), - Sets.newHashSet(interfaces[0].getName(), interfaces[1].getName()) - ); + assertEquals(1, interfaces.length); + assertEquals("java.lang.annotation.Annotation", interfaces[0].getName()); } public void testAnnotationClassWithStringProperty() diff --git a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java index 53573a33133..2eaf51e22ce 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -1843,6 +1843,11 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/regressions/kt533.kt"); } + @TestMetadata("kt5609.kt") + public void testKt5609() throws Exception { + doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/regressions/kt5609.kt"); + } + @TestMetadata("kt715.kt") public void testKt715() throws Exception { doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/regressions/kt715.kt");