[Test] Operator ambiguity check with 'set'

When using `x[y] += z` the spec mandates attempting all possible combinations.

^KT-62138 Fixed
This commit is contained in:
Alejandro Serrano Mena
2023-10-02 11:24:42 +02:00
committed by Space Team
parent 5b7b159d64
commit c2dfe415f3
7 changed files with 82 additions and 0 deletions
@@ -24036,6 +24036,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
runTest("compiler/testData/diagnostics/tests/operatorsOverloading/AssignOperatorAmbiguity.kt");
}
@Test
@TestMetadata("AssignOperatorAmbiguityExtension.kt")
public void testAssignOperatorAmbiguityExtension() throws Exception {
runTest("compiler/testData/diagnostics/tests/operatorsOverloading/AssignOperatorAmbiguityExtension.kt");
}
@Test
@TestMetadata("AssignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24036,6 +24036,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
runTest("compiler/testData/diagnostics/tests/operatorsOverloading/AssignOperatorAmbiguity.kt");
}
@Test
@TestMetadata("AssignOperatorAmbiguityExtension.kt")
public void testAssignOperatorAmbiguityExtension() throws Exception {
runTest("compiler/testData/diagnostics/tests/operatorsOverloading/AssignOperatorAmbiguityExtension.kt");
}
@Test
@TestMetadata("AssignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24036,6 +24036,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
runTest("compiler/testData/diagnostics/tests/operatorsOverloading/AssignOperatorAmbiguity.kt");
}
@Test
@TestMetadata("AssignOperatorAmbiguityExtension.kt")
public void testAssignOperatorAmbiguityExtension() throws Exception {
runTest("compiler/testData/diagnostics/tests/operatorsOverloading/AssignOperatorAmbiguityExtension.kt");
}
@Test
@TestMetadata("AssignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -24042,6 +24042,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
runTest("compiler/testData/diagnostics/tests/operatorsOverloading/AssignOperatorAmbiguity.kt");
}
@Test
@TestMetadata("AssignOperatorAmbiguityExtension.kt")
public void testAssignOperatorAmbiguityExtension() throws Exception {
runTest("compiler/testData/diagnostics/tests/operatorsOverloading/AssignOperatorAmbiguityExtension.kt");
}
@Test
@TestMetadata("AssignmentOperations.kt")
public void testAssignmentOperations() throws Exception {
@@ -0,0 +1,22 @@
// FIR_IDENTICAL
// ISSUE: KT-62138
class HashMap<K, V>(
private val defaultValue: V
) {
operator fun get(key: K): V = defaultValue
operator fun set(key: K, value: V) { }
}
private class X
private operator fun X?.plus(p: Int) = X()
private operator fun X?.plusAssign(p: Int) { }
class C {
private val map = HashMap<String, X>(defaultValue = X())
fun f(): Any? {
map[""] <!ASSIGN_OPERATOR_AMBIGUITY!>+=<!> 1
return map[""]
}
}
@@ -0,0 +1,30 @@
package
private operator fun X?.plus(/*0*/ p: kotlin.Int): X
private operator fun X?.plusAssign(/*0*/ p: kotlin.Int): kotlin.Unit
public final class C {
public constructor C()
private final val map: HashMap<kotlin.String, X>
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final fun f(): kotlin.Any?
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
public final class HashMap</*0*/ K, /*1*/ V> {
public constructor HashMap</*0*/ K, /*1*/ V>(/*0*/ defaultValue: V)
private final val defaultValue: V
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public final operator fun get(/*0*/ key: K): V
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public final operator fun set(/*0*/ key: K, /*1*/ value: V): kotlin.Unit
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
private final class X {
public constructor X()
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
}
@@ -25888,6 +25888,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
runTest("compiler/testData/diagnostics/tests/operatorsOverloading/AssignOperatorAmbiguity.kt");
}
@Test
@TestMetadata("AssignOperatorAmbiguityExtension.kt")
public void testAssignOperatorAmbiguityExtension() throws Exception {
runTest("compiler/testData/diagnostics/tests/operatorsOverloading/AssignOperatorAmbiguityExtension.kt");
}
@Test
@TestMetadata("AssignmentOperations.kt")
public void testAssignmentOperations() throws Exception {