From e98b75b462d2afab36134a03916817161a256cc8 Mon Sep 17 00:00:00 2001 From: Evgeny Gerashchenko Date: Tue, 24 Sep 2013 16:27:21 +0400 Subject: [PATCH] Do not generate toString and other methods if they are inherited. --- .../src/org/jetbrains/jet/codegen/CodegenUtil.java | 3 ++- .../dataClasses/tostring/alreadyInherited.kt | 10 ++++++++++ .../BlackBoxWithStdlibCodegenTestGenerated.java | 5 +++++ 3 files changed, 17 insertions(+), 1 deletion(-) create mode 100644 compiler/testData/codegen/boxWithStdlib/dataClasses/tostring/alreadyInherited.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java index 1120edd1f3a..9cfc470617d 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/CodegenUtil.java @@ -37,6 +37,7 @@ import org.jetbrains.jet.lang.descriptors.impl.TypeParameterDescriptorImpl; import org.jetbrains.jet.lang.psi.JetClassOrObject; import org.jetbrains.jet.lang.psi.JetObjectDeclaration; import org.jetbrains.jet.lang.resolve.DescriptorUtils; +import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil; import org.jetbrains.jet.lang.resolve.name.Name; import org.jetbrains.jet.lang.types.JetType; import org.jetbrains.jet.lang.types.TypeUtils; @@ -163,7 +164,7 @@ public class CodegenUtil { ) { Collection functions = owner.getDefaultType().getMemberScope().getFunctions(name); for (FunctionDescriptor function : functions) { - if (function.getKind() == CallableMemberDescriptor.Kind.DECLARATION + if (!CallResolverUtil.isOrOverridesSynthesized(function) && function.getTypeParameters().isEmpty() && valueParameterClassesMatch(function.getValueParameters(), Arrays.asList(valueParameterClassifiers)) && rawTypeMatches(function.getReturnType(), returnedClassifier)) { diff --git a/compiler/testData/codegen/boxWithStdlib/dataClasses/tostring/alreadyInherited.kt b/compiler/testData/codegen/boxWithStdlib/dataClasses/tostring/alreadyInherited.kt new file mode 100644 index 00000000000..945a5bcc9ad --- /dev/null +++ b/compiler/testData/codegen/boxWithStdlib/dataClasses/tostring/alreadyInherited.kt @@ -0,0 +1,10 @@ +trait SuperTrait { + public fun toString(): String = "!" +} + +data class A(val x: Int): SuperTrait { +} + +fun box(): String { + return if (A(0).toString() == "!") "OK" else "fail" +} \ 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 a338f2cf7b1..1242eb4b177 100644 --- a/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/codegen/generated/BlackBoxWithStdlibCodegenTestGenerated.java @@ -343,6 +343,11 @@ public class BlackBoxWithStdlibCodegenTestGenerated extends AbstractBlackBoxCode doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/dataClasses/tostring/alreadyDeclaredWrongSignature.kt"); } + @TestMetadata("alreadyInherited.kt") + public void testAlreadyInherited() throws Exception { + doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/dataClasses/tostring/alreadyInherited.kt"); + } + @TestMetadata("arrayParams.kt") public void testArrayParams() throws Exception { doTestWithStdlib("compiler/testData/codegen/boxWithStdlib/dataClasses/tostring/arrayParams.kt");