diff --git a/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiContractsUtils.kt b/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiContractsUtils.kt index b4f187da8ad..66159f41cff 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiContractsUtils.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/contracts/parsing/PsiContractsUtils.kt @@ -87,7 +87,7 @@ fun DeclarationDescriptor.isCallsInPlaceEffectDescriptor(): Boolean = equalsDslD fun DeclarationDescriptor.isInvocationKindEnum(): Boolean = equalsDslDescriptor(INVOCATION_KIND_ENUM) fun DeclarationDescriptor.isEqualsDescriptor(): Boolean = - this is FunctionDescriptor && this.name == Name.identifier("equals") && // fast checks + this is FunctionDescriptor && this.name == Name.identifier("equals") && dispatchReceiverParameter != null && // fast checks this.returnType?.isBoolean() == true && this.valueParameters.singleOrNull()?.type?.isNullableAny() == true // signature matches internal fun ResolvedCall<*>.firstArgumentAsExpressionOrNull(): KtExpression? = diff --git a/compiler/testData/diagnostics/tests/override/fakeEquals.kt b/compiler/testData/diagnostics/tests/override/fakeEquals.kt new file mode 100644 index 00000000000..81e96a21e8b --- /dev/null +++ b/compiler/testData/diagnostics/tests/override/fakeEquals.kt @@ -0,0 +1,9 @@ +// !DIAGNOSTICS: -UNUSED_PARAMETER -UNUSED_REFERENCE + +class Foo + +fun test(a: Foo, b: Foo) { + // Note that signature matches the 'equals' + fun equals(x: Any?): Boolean = false + equals(b) +} \ No newline at end of file diff --git a/compiler/testData/diagnostics/tests/override/fakeEquals.txt b/compiler/testData/diagnostics/tests/override/fakeEquals.txt new file mode 100644 index 00000000000..75439bb14cd --- /dev/null +++ b/compiler/testData/diagnostics/tests/override/fakeEquals.txt @@ -0,0 +1,10 @@ +package + +public fun test(/*0*/ a: Foo, /*1*/ b: Foo): kotlin.Unit + +public final class Foo { + public constructor Foo() + public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean + public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int + public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String +} diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java index 7847d7d6a32..4465146d078 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/DiagnosticsTestGenerated.java @@ -14501,6 +14501,11 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest { runTest("compiler/testData/diagnostics/tests/override/ExtendFunctionClass.kt"); } + @TestMetadata("fakeEquals.kt") + public void testFakeEquals() throws Exception { + runTest("compiler/testData/diagnostics/tests/override/fakeEquals.kt"); + } + @TestMetadata("FakeOverrideAbstractAndNonAbstractFun.kt") public void testFakeOverrideAbstractAndNonAbstractFun() throws Exception { runTest("compiler/testData/diagnostics/tests/override/FakeOverrideAbstractAndNonAbstractFun.kt"); diff --git a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java index 486ad61745c..35fc1428706 100644 --- a/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java +++ b/compiler/tests/org/jetbrains/kotlin/checkers/javac/DiagnosticsUsingJavacTestGenerated.java @@ -14501,6 +14501,11 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing runTest("compiler/testData/diagnostics/tests/override/ExtendFunctionClass.kt"); } + @TestMetadata("fakeEquals.kt") + public void testFakeEquals() throws Exception { + runTest("compiler/testData/diagnostics/tests/override/fakeEquals.kt"); + } + @TestMetadata("FakeOverrideAbstractAndNonAbstractFun.kt") public void testFakeOverrideAbstractAndNonAbstractFun() throws Exception { runTest("compiler/testData/diagnostics/tests/override/FakeOverrideAbstractAndNonAbstractFun.kt");