fixup! K2: implement checker to detect overload clash by JVM erasure
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLDiagnosticsFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLDiagnosticsFirTestGenerated.java
index f8f59b1..e274aa1 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLDiagnosticsFirTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLDiagnosticsFirTestGenerated.java
@@ -8370,6 +8370,12 @@
}
@Test
+ @TestMetadata("sequenceCollectionIntersectionOverrideKJJ.kt")
+ public void testSequenceCollectionIntersectionOverrideKJJ() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/sequenceCollectionIntersectionOverrideKJJ.kt");
+ }
+
+ @Test
@TestMetadata("serializableString.kt")
public void testSerializableString() {
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/serializableString.kt");
@@ -8424,6 +8430,46 @@
}
@Nested
+ @TestMetadata("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges")
+ @TestDataPath("$PROJECT_ROOT")
+ public class Bridges {
+ @Test
+ public void testAllFilesPresentInBridges() {
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverride.kt")
+ public void testBridgeAndFakeOverride() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverride.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideExtensionReceiver.kt")
+ public void testBridgeAndFakeOverrideExtensionReceiver() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideExtensionReceiver.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideFromGeneric.kt")
+ public void testBridgeAndFakeOverrideFromGeneric() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideFromGeneric.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideGenericImplementation.kt")
+ public void testBridgeAndFakeOverrideGenericImplementation() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideGenericImplementation.kt");
+ }
+
+ @Test
+ @TestMetadata("inheritedBridgeAndFakeOverride.kt")
+ public void testInheritedBridgeAndFakeOverride() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/inheritedBridgeAndFakeOverride.kt");
+ }
+ }
+
+ @Nested
@TestMetadata("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/commonAtomicTypes")
@TestDataPath("$PROJECT_ROOT")
public class CommonAtomicTypes {
diff --git a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLReversedDiagnosticsFirTestGenerated.java b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLReversedDiagnosticsFirTestGenerated.java
index 2e65a29..619a1ff 100644
--- a/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLReversedDiagnosticsFirTestGenerated.java
+++ b/analysis/low-level-api-fir/tests/org/jetbrains/kotlin/analysis/low/level/api/fir/diagnostic/compiler/based/LLReversedDiagnosticsFirTestGenerated.java
@@ -8370,6 +8370,12 @@
}
@Test
+ @TestMetadata("sequenceCollectionIntersectionOverrideKJJ.kt")
+ public void testSequenceCollectionIntersectionOverrideKJJ() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/sequenceCollectionIntersectionOverrideKJJ.kt");
+ }
+
+ @Test
@TestMetadata("serializableString.kt")
public void testSerializableString() {
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/serializableString.kt");
@@ -8424,6 +8430,46 @@
}
@Nested
+ @TestMetadata("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges")
+ @TestDataPath("$PROJECT_ROOT")
+ public class Bridges {
+ @Test
+ public void testAllFilesPresentInBridges() {
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverride.kt")
+ public void testBridgeAndFakeOverride() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverride.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideExtensionReceiver.kt")
+ public void testBridgeAndFakeOverrideExtensionReceiver() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideExtensionReceiver.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideFromGeneric.kt")
+ public void testBridgeAndFakeOverrideFromGeneric() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideFromGeneric.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideGenericImplementation.kt")
+ public void testBridgeAndFakeOverrideGenericImplementation() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideGenericImplementation.kt");
+ }
+
+ @Test
+ @TestMetadata("inheritedBridgeAndFakeOverride.kt")
+ public void testInheritedBridgeAndFakeOverride() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/inheritedBridgeAndFakeOverride.kt");
+ }
+ }
+
+ @Nested
@TestMetadata("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/commonAtomicTypes")
@TestDataPath("$PROJECT_ROOT")
public class CommonAtomicTypes {
diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverride.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverride.kt
new file mode 100644
index 0000000..a89572f
--- /dev/null
+++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverride.kt
@@ -0,0 +1,24 @@
+// RUN_PIPELINE_TILL: BACKEND
+// LANGUAGE: -ForbidOverloadClashesByErasure
+// ISSUE: KT-13712
+
+interface Restrict
+
+object EmptyRestrict : Restrict
+
+interface RestrictedGeneric<T: Restrict>: Restrict {
+ fun accept(obj: T): Int
+ fun acceptOpen(obj: T)
+}
+
+open class Foo {
+ fun accept(obj: Restrict): Int = 0
+ open fun acceptOpen(obj: Restrict) {
+ }
+}
+
+class Bar : Foo(), RestrictedGeneric<Bar>{
+ override fun <!ACCIDENTAL_OVERLOAD_CLASH_BY_JVM_ERASURE_WARNING!>accept<!>(obj: Bar): Int = 0
+ override fun <!ACCIDENTAL_OVERLOAD_CLASH_BY_JVM_ERASURE_WARNING!>acceptOpen<!>(obj: Bar) {
+ }
+}
diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideExtensionReceiver.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideExtensionReceiver.kt
new file mode 100644
index 0000000..ba82934
--- /dev/null
+++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideExtensionReceiver.kt
@@ -0,0 +1,15 @@
+// RUN_PIPELINE_TILL: BACKEND
+// LANGUAGE: -ForbidOverloadClashesByErasure
+// ISSUE: KT-13712
+
+interface B<T> {
+ fun T.foo() {}
+}
+
+open class A {
+ fun Any.foo() {}
+}
+
+class C : B<String>, A() {
+ override fun String.<!ACCIDENTAL_OVERLOAD_CLASH_BY_JVM_ERASURE_WARNING!>foo<!>() {}
+}
diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideFromGeneric.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideFromGeneric.kt
new file mode 100644
index 0000000..aff4b8a
--- /dev/null
+++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideFromGeneric.kt
@@ -0,0 +1,19 @@
+// RUN_PIPELINE_TILL: BACKEND
+// LANGUAGE: -ForbidOverloadClashesByErasure
+// ISSUE: KT-13712
+
+interface Restrict
+
+object EmptyRestrict : Restrict
+
+interface RestrictedGeneric<T : Restrict>: Restrict {
+ fun accept(obj: T): Int
+}
+
+open class Foo<D : Restrict> {
+ fun accept(obj: D): Int = 0
+}
+
+class Bar : Foo<EmptyRestrict>(), RestrictedGeneric<Bar> {
+ override fun accept(obj: Bar): Int = 0
+}
diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideGenericImplementation.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideGenericImplementation.kt
new file mode 100644
index 0000000..188c89a
--- /dev/null
+++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideGenericImplementation.kt
@@ -0,0 +1,19 @@
+// RUN_PIPELINE_TILL: BACKEND
+// LANGUAGE: -ForbidOverloadClashesByErasure
+// ISSUE: KT-13712
+
+interface Restrict
+
+object EmptyRestrict : Restrict
+
+interface RestrictedGeneric<T : Restrict>: Restrict {
+ fun accept(obj: T): Int
+}
+
+open class Foo {
+ fun accept(obj: Restrict): Int = 0
+}
+
+class Bar<T> : Foo(), RestrictedGeneric<Bar<T>>{
+ override fun <!ACCIDENTAL_OVERLOAD_CLASH_BY_JVM_ERASURE_WARNING!>accept<!>(obj: Bar<T>): Int = 0
+}
diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/inheritedBridgeAndFakeOverride.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/inheritedBridgeAndFakeOverride.kt
new file mode 100644
index 0000000..0602df7
--- /dev/null
+++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/inheritedBridgeAndFakeOverride.kt
@@ -0,0 +1,15 @@
+// RUN_PIPELINE_TILL: BACKEND
+// LANGUAGE: -ForbidOverloadClashesByErasure
+// ISSUE: KT-13712
+
+open class A {
+ fun f(x: Any) {
+ }
+}
+
+interface B<T> {
+ fun f(x: T) {
+ }
+}
+
+class C : B<String>, A()
diff --git a/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/sequenceCollectionIntersectionOverrideKJJ.kt b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/sequenceCollectionIntersectionOverrideKJJ.kt
new file mode 100644
index 0000000..d509c84
--- /dev/null
+++ b/compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/sequenceCollectionIntersectionOverrideKJJ.kt
@@ -0,0 +1,16 @@
+// RUN_PIPELINE_TILL: BACKEND
+// LANGUAGE: -ForbidOverloadClashesByErasure
+// JDK_KIND: FULL_JDK_21
+// WITH_STDLIB
+
+// FILE: 1.kt
+import java.util.*
+
+class A : LinkedList<Int>(), SequencedCollection<Int>
+
+class B : LinkedList<Int>(), SequencedCollection<Int> {
+ override fun addFirst(e: Int?) { }
+ override fun reversed(): LinkedList<Int> {
+ return null!!
+ }
+}
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeDiagnosticsWithLatestLanguageVersionTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeDiagnosticsWithLatestLanguageVersionTestGenerated.java
index c001492..57c46b8 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeDiagnosticsWithLatestLanguageVersionTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirLightTreeDiagnosticsWithLatestLanguageVersionTestGenerated.java
@@ -8370,6 +8370,12 @@
}
@Test
+ @TestMetadata("sequenceCollectionIntersectionOverrideKJJ.kt")
+ public void testSequenceCollectionIntersectionOverrideKJJ() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/sequenceCollectionIntersectionOverrideKJJ.kt");
+ }
+
+ @Test
@TestMetadata("serializableString.kt")
public void testSerializableString() {
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/serializableString.kt");
@@ -8424,6 +8430,46 @@
}
@Nested
+ @TestMetadata("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges")
+ @TestDataPath("$PROJECT_ROOT")
+ public class Bridges {
+ @Test
+ public void testAllFilesPresentInBridges() {
+ KtTestUtil.assertAllTestsPresentByMetadataWithExcluded(this.getClass(), new File("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges"), Pattern.compile("^([^.]+)\\.kt$"), null, true);
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverride.kt")
+ public void testBridgeAndFakeOverride() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverride.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideExtensionReceiver.kt")
+ public void testBridgeAndFakeOverrideExtensionReceiver() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideExtensionReceiver.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideFromGeneric.kt")
+ public void testBridgeAndFakeOverrideFromGeneric() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideFromGeneric.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideGenericImplementation.kt")
+ public void testBridgeAndFakeOverrideGenericImplementation() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideGenericImplementation.kt");
+ }
+
+ @Test
+ @TestMetadata("inheritedBridgeAndFakeOverride.kt")
+ public void testInheritedBridgeAndFakeOverride() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/inheritedBridgeAndFakeOverride.kt");
+ }
+ }
+
+ @Nested
@TestMetadata("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/commonAtomicTypes")
@TestDataPath("$PROJECT_ROOT")
public class CommonAtomicTypes {
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/PhasedJvmDiagnosticLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/PhasedJvmDiagnosticLightTreeTestGenerated.java
index 304b86c..8100c0f 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/PhasedJvmDiagnosticLightTreeTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/PhasedJvmDiagnosticLightTreeTestGenerated.java
@@ -58137,6 +58137,12 @@
}
@Test
+ @TestMetadata("sequenceCollectionIntersectionOverrideKJJ.kt")
+ public void testSequenceCollectionIntersectionOverrideKJJ() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/sequenceCollectionIntersectionOverrideKJJ.kt");
+ }
+
+ @Test
@TestMetadata("serializableString.kt")
public void testSerializableString() {
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/serializableString.kt");
@@ -58191,6 +58197,41 @@
}
@Nested
+ @TestMetadata("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges")
+ @TestDataPath("$PROJECT_ROOT")
+ public class Bridges {
+ @Test
+ @TestMetadata("bridgeAndFakeOverride.kt")
+ public void testBridgeAndFakeOverride() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverride.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideExtensionReceiver.kt")
+ public void testBridgeAndFakeOverrideExtensionReceiver() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideExtensionReceiver.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideFromGeneric.kt")
+ public void testBridgeAndFakeOverrideFromGeneric() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideFromGeneric.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideGenericImplementation.kt")
+ public void testBridgeAndFakeOverrideGenericImplementation() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideGenericImplementation.kt");
+ }
+
+ @Test
+ @TestMetadata("inheritedBridgeAndFakeOverride.kt")
+ public void testInheritedBridgeAndFakeOverride() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/inheritedBridgeAndFakeOverride.kt");
+ }
+ }
+
+ @Nested
@TestMetadata("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/commonAtomicTypes")
@TestDataPath("$PROJECT_ROOT")
public class CommonAtomicTypes {
diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/PhasedJvmDiagnosticPsiTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/PhasedJvmDiagnosticPsiTestGenerated.java
index e0ad970..eea4844 100644
--- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/PhasedJvmDiagnosticPsiTestGenerated.java
+++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/PhasedJvmDiagnosticPsiTestGenerated.java
@@ -58309,6 +58309,12 @@
}
@Test
+ @TestMetadata("sequenceCollectionIntersectionOverrideKJJ.kt")
+ public void testSequenceCollectionIntersectionOverrideKJJ() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/sequenceCollectionIntersectionOverrideKJJ.kt");
+ }
+
+ @Test
@TestMetadata("serializableString.kt")
public void testSerializableString() {
runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/serializableString.kt");
@@ -58363,6 +58369,41 @@
}
@Nested
+ @TestMetadata("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges")
+ @TestDataPath("$PROJECT_ROOT")
+ public class Bridges {
+ @Test
+ @TestMetadata("bridgeAndFakeOverride.kt")
+ public void testBridgeAndFakeOverride() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverride.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideExtensionReceiver.kt")
+ public void testBridgeAndFakeOverrideExtensionReceiver() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideExtensionReceiver.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideFromGeneric.kt")
+ public void testBridgeAndFakeOverrideFromGeneric() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideFromGeneric.kt");
+ }
+
+ @Test
+ @TestMetadata("bridgeAndFakeOverrideGenericImplementation.kt")
+ public void testBridgeAndFakeOverrideGenericImplementation() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/bridgeAndFakeOverrideGenericImplementation.kt");
+ }
+
+ @Test
+ @TestMetadata("inheritedBridgeAndFakeOverride.kt")
+ public void testInheritedBridgeAndFakeOverride() {
+ runTest("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/bridges/inheritedBridgeAndFakeOverride.kt");
+ }
+ }
+
+ @Nested
@TestMetadata("compiler/fir/analysis-tests/testData/resolveWithStdlib/j+k/commonAtomicTypes")
@TestDataPath("$PROJECT_ROOT")
public class CommonAtomicTypes {
diff --git a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirOverrideSignatureClashChecker.kt b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirOverrideSignatureClashChecker.kt
index 167b4af..0ef1d37 100644
--- a/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirOverrideSignatureClashChecker.kt
+++ b/compiler/fir/checkers/checkers.jvm/src/org/jetbrains/kotlin/fir/analysis/jvm/checkers/declaration/FirOverrideSignatureClashChecker.kt
@@ -35,7 +35,7 @@
val overloads = mutableListOf<FirNamedFunctionSymbol>()
scope.processFunctionsByName(name) {
if (it !== declaration.symbol && it.valueParameterSymbols.size == declaration.valueParameters.size &&
- it.receiverParameterSymbol == null && it.contextParameterSymbols.isEmpty()
+ it.contextParameterSymbols.isEmpty()
) {
overloads += it
}
@@ -46,16 +46,19 @@
scope.processDirectlyOverriddenFunctions(declaration.symbol) { overriddenSymbol ->
for (overloadSymbol in overloads) {
val unwrappedOverriddenSymbol = overriddenSymbol.unwrapSubstitutionOverrides()
- if (unwrappedOverriddenSymbol.receiverParameterSymbol != null ||
- unwrappedOverriddenSymbol.contextParameterSymbols.isNotEmpty()
- ) {
+ if (unwrappedOverriddenSymbol.contextParameterSymbols.isNotEmpty()) {
continue
}
- val indexedParameterTypes = unwrappedOverriddenSymbol.valueParameterSymbols.map { it.resolvedReturnType }.withIndex()
+ val indexedParameterTypes = with(unwrappedOverriddenSymbol) {
+ val valueParameterTypes = valueParameterSymbols.map { it.resolvedReturnType }
+ (receiverParameterSymbol?.let { listOf(it.resolvedType) + valueParameterTypes } ?: valueParameterTypes).withIndex()
+ }
if (indexedParameterTypes.none { it.value is ConeTypeParameterType }) continue
if (indexedParameterTypes.all { (index, parameterType) ->
- parameterType.computeJvmDescriptorRepresentation() ==
- overloadSymbol.valueParameterSymbols[index].resolvedReturnType.computeJvmDescriptorRepresentation()
+ val overloadType = overloadSymbol.receiverParameterSymbol?.let {
+ if (index == 0) it.resolvedType else overloadSymbol.valueParameterSymbols[index - 1].resolvedReturnType
+ } ?: overloadSymbol.valueParameterSymbols[index].resolvedReturnType
+ parameterType.computeJvmDescriptorRepresentation() == overloadType.computeJvmDescriptorRepresentation()
}
) {
reporter.reportOn(
diff --git a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt
index f4d35f8..4e309da 100644
--- a/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt
+++ b/compiler/fir/checkers/gen/org/jetbrains/kotlin/fir/analysis/diagnostics/FirNonSuppressibleErrorNames.kt
@@ -662,6 +662,7 @@
"VALUE_CLASS_WITHOUT_JVM_INLINE_ANNOTATION",
"JVM_INLINE_WITHOUT_VALUE_CLASS",
"ACCIDENTAL_OVERRIDE_CLASH_BY_JVM_SIGNATURE",
+ "ACCIDENTAL_OVERLOAD_CLASH_BY_JVM_ERASURE_ERROR",
"IMPLEMENTATION_BY_DELEGATION_WITH_DIFFERENT_GENERIC_SIGNATURE_ERROR",
"NOT_YET_SUPPORTED_LOCAL_INLINE_FUNCTION",
"JAVA_TYPE_MISMATCH",