From 622b7e374020c2780a6417a8931c3df08db6ef9e Mon Sep 17 00:00:00 2001 From: Andrey Breslav Date: Fri, 6 Jun 2014 12:47:29 +0400 Subject: [PATCH] Do not report ACCIDENTAL_OVERRIDE on SAM adapters and such --- .../jet/codegen/state/GenerationState.java | 6 +++++ .../phantomClashWithSamAdapter.kt | 27 +++++++++++++++++++ .../checkers/JetDiagnosticsTestGenerated.java | 5 ++++ 3 files changed, 38 insertions(+) create mode 100644 compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/phantomClashWithSamAdapter.kt diff --git a/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java b/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java index fa4d3a91eff..0970f2d5dd3 100644 --- a/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java +++ b/compiler/backend/src/org/jetbrains/jet/codegen/state/GenerationState.java @@ -36,6 +36,7 @@ import org.jetbrains.jet.lang.resolve.BindingContext; import org.jetbrains.jet.lang.resolve.BindingContextUtils; import org.jetbrains.jet.lang.resolve.BindingTrace; import org.jetbrains.jet.lang.resolve.DelegatingBindingTrace; +import org.jetbrains.jet.lang.resolve.calls.CallResolverUtil; import org.jetbrains.jet.lang.resolve.java.diagnostics.*; import org.jetbrains.jet.lang.resolve.java.jvmSignature.JvmMethodSignature; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -334,6 +335,11 @@ public class GenerationState { // a member of super is not visible: no override continue; } + if (member instanceof CallableMemberDescriptor && + CallResolverUtil.isOrOverridesSynthesized((CallableMemberDescriptor) member)) { + // if a signature clashes with a SAM-adapter or something like that, there's no harm + continue; + } if (member instanceof PropertyDescriptor) { PropertyDescriptor propertyDescriptor = (PropertyDescriptor) member; diff --git a/compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/phantomClashWithSamAdapter.kt b/compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/phantomClashWithSamAdapter.kt new file mode 100644 index 00000000000..14707fbc29f --- /dev/null +++ b/compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/phantomClashWithSamAdapter.kt @@ -0,0 +1,27 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER +// FILE: p/Sam.java + +package p; + +public interface Sam { + void sam(); +} + +// FILE: p/Foo.java + +package p; + +public class Foo { + public void foo(Sam sam); +} + +// FILE: k.kt + +import p.* + +// to have enough fake overrides +open class K0 : Foo() + +class K : K0() { + fun foo(f: () -> Unit) {} +} \ No newline at end of file diff --git a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java index 175d17573ca..7b4cb76dfc2 100644 --- a/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/jet/checkers/JetDiagnosticsTestGenerated.java @@ -2593,6 +2593,11 @@ public class JetDiagnosticsTestGenerated extends AbstractJetDiagnosticsTest { doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/genericClassFunction.kt"); } + @TestMetadata("phantomClashWithSamAdapter.kt") + public void testPhantomClashWithSamAdapter() throws Exception { + doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/phantomClashWithSamAdapter.kt"); + } + @TestMetadata("privateClassFunctionOverriddenByProperty.kt") public void testPrivateClassFunctionOverriddenByProperty() throws Exception { doTest("compiler/testData/diagnostics/tests/duplicateJvmSignature/accidentalOverrides/privateClassFunctionOverriddenByProperty.kt");