diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java index 6e80413f215..368b4d4b5da 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsTestGenerated.java @@ -22756,6 +22756,12 @@ public class FirOldFrontendDiagnosticsTestGenerated extends AbstractFirDiagnosti runTest("compiler/testData/diagnostics/tests/operatorsOverloading/compareToNullable.kt"); } + @Test + @TestMetadata("EqualsOperatorOverrideHierarchies.kt") + public void testEqualsOperatorOverrideHierarchies() throws Exception { + runTest("compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.kt"); + } + @Test @TestMetadata("incForAssignmentSmartCast.kt") public void testIncForAssignmentSmartCast() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java index 6c6a1625be3..932a845ebed 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendDiagnosticsWithLightTreeTestGenerated.java @@ -22750,6 +22750,12 @@ public class FirOldFrontendDiagnosticsWithLightTreeTestGenerated extends Abstrac runTest("compiler/testData/diagnostics/tests/operatorsOverloading/compareToNullable.kt"); } + @Test + @TestMetadata("EqualsOperatorOverrideHierarchies.kt") + public void testEqualsOperatorOverrideHierarchies() throws Exception { + runTest("compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.kt"); + } + @Test @TestMetadata("incForAssignmentSmartCast.kt") public void testIncForAssignmentSmartCast() throws Exception { diff --git a/compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.fir.kt b/compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.fir.kt new file mode 100644 index 00000000000..d853c4339a1 --- /dev/null +++ b/compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.fir.kt @@ -0,0 +1,25 @@ +open class Parent { + override fun equals(other: Any?): Boolean = + super.equals(other) +} +open class OperatorParent { + override operator fun equals(other: Any?): Boolean = + super.equals(other) +} + +class A : Parent() { + override fun equals(other: Any?): Boolean = + super.equals(other) +} +class B : OperatorParent() { + override fun equals(other: Any?): Boolean = + super.equals(other) +} +class C : Parent() { + override operator fun equals(other: Any?): Boolean = // false positive in K1, OK in K2 + super.equals(other) // +} +class D : OperatorParent() { + override operator fun equals(other: Any?): Boolean = // false positive in K1, OK in K2 + super.equals(other) +} diff --git a/compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.kt b/compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.kt new file mode 100644 index 00000000000..466ec23d218 --- /dev/null +++ b/compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.kt @@ -0,0 +1,25 @@ +open class Parent { + override fun equals(other: Any?): Boolean = + super.equals(other) +} +open class OperatorParent { + override operator fun equals(other: Any?): Boolean = + super.equals(other) +} + +class A : Parent() { + override fun equals(other: Any?): Boolean = + super.equals(other) +} +class B : OperatorParent() { + override fun equals(other: Any?): Boolean = + super.equals(other) +} +class C : Parent() { + override operator fun equals(other: Any?): Boolean = // false positive in K1, OK in K2 + super.equals(other) // +} +class D : OperatorParent() { + override operator fun equals(other: Any?): Boolean = // false positive in K1, OK in K2 + super.equals(other) +} diff --git a/compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.txt b/compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.txt new file mode 100644 index 00000000000..a0c18cea0ca --- /dev/null +++ b/compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.txt @@ -0,0 +1,43 @@ +package + +public final class A : Parent { + public constructor A() + public open override /*1*/ 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 +} + +public final class B : OperatorParent { + public constructor B() + public open override /*1*/ 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 +} + +public final class C : Parent { + public constructor C() + public open override /*1*/ 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 +} + +public final class D : OperatorParent { + public constructor D() + public open override /*1*/ 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 +} + +public open class OperatorParent { + public constructor OperatorParent() + public open override /*1*/ 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 +} + +public open class Parent { + public constructor Parent() + public open override /*1*/ 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-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 37f665d04ff..d9a780547ce 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -22756,6 +22756,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/operatorsOverloading/compareToNullable.kt"); } + @Test + @TestMetadata("EqualsOperatorOverrideHierarchies.kt") + public void testEqualsOperatorOverrideHierarchies() throws Exception { + runTest("compiler/testData/diagnostics/tests/operatorsOverloading/EqualsOperatorOverrideHierarchies.kt"); + } + @Test @TestMetadata("incForAssignmentSmartCast.kt") public void testIncForAssignmentSmartCast() throws Exception {