K2: build SAM-based function type for a given captured type properly
Before this commit, we assumed (erroneously) that a captured type cannot have an associated SAM-based function type. In this commit we changed this assumption, replacing a captured type with its lower type for this purpose #KT-63379 Fixed
This commit is contained in:
committed by
Space Team
parent
8588588760
commit
a02cf76d6c
+6
@@ -13927,6 +13927,12 @@ public class DiagnosticCompilerTestFE10TestdataTestGenerated extends AbstractDia
|
|||||||
public void testUnitInContravariantPosition() throws Exception {
|
public void testUnitInContravariantPosition() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/funInterface/unitInContravariantPosition.kt");
|
runTest("compiler/testData/diagnostics/tests/funInterface/unitInContravariantPosition.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unitInCovariantPosition.kt")
|
||||||
|
public void testUnitInCovariantPosition() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/funInterface/unitInCovariantPosition.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
|
|||||||
+6
@@ -13927,6 +13927,12 @@ public class LLFirPreresolvedReversedDiagnosticCompilerFE10TestDataTestGenerated
|
|||||||
public void testUnitInContravariantPosition() throws Exception {
|
public void testUnitInContravariantPosition() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/funInterface/unitInContravariantPosition.kt");
|
runTest("compiler/testData/diagnostics/tests/funInterface/unitInContravariantPosition.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unitInCovariantPosition.kt")
|
||||||
|
public void testUnitInCovariantPosition() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/funInterface/unitInCovariantPosition.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
|
|||||||
+6
@@ -13921,6 +13921,12 @@ public class FirLightTreeOldFrontendDiagnosticsTestGenerated extends AbstractFir
|
|||||||
public void testUnitInContravariantPosition() throws Exception {
|
public void testUnitInContravariantPosition() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/funInterface/unitInContravariantPosition.kt");
|
runTest("compiler/testData/diagnostics/tests/funInterface/unitInContravariantPosition.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unitInCovariantPosition.kt")
|
||||||
|
public void testUnitInCovariantPosition() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/funInterface/unitInCovariantPosition.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
|
|||||||
+6
@@ -13927,6 +13927,12 @@ public class FirPsiOldFrontendDiagnosticsTestGenerated extends AbstractFirPsiDia
|
|||||||
public void testUnitInContravariantPosition() throws Exception {
|
public void testUnitInContravariantPosition() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/funInterface/unitInContravariantPosition.kt");
|
runTest("compiler/testData/diagnostics/tests/funInterface/unitInContravariantPosition.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unitInCovariantPosition.kt")
|
||||||
|
public void testUnitInCovariantPosition() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/funInterface/unitInCovariantPosition.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
|
|||||||
@@ -81,10 +81,11 @@ class FirSamResolver(
|
|||||||
}
|
}
|
||||||
|
|
||||||
is ConeStubType, is ConeTypeParameterType, is ConeTypeVariableType,
|
is ConeStubType, is ConeTypeParameterType, is ConeTypeVariableType,
|
||||||
is ConeCapturedType, is ConeDefinitelyNotNullType, is ConeIntersectionType,
|
is ConeDefinitelyNotNullType, is ConeIntersectionType, is ConeIntegerLiteralType,
|
||||||
is ConeIntegerLiteralType,
|
|
||||||
-> null
|
-> null
|
||||||
|
|
||||||
|
is ConeCapturedType -> type.lowerType?.let { getFunctionTypeForPossibleSamType(it) }
|
||||||
|
|
||||||
is ConeLookupTagBasedType -> unreachableBranch(type)
|
is ConeLookupTagBasedType -> unreachableBranch(type)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
-17
@@ -1,17 +0,0 @@
|
|||||||
// ISSUE: KT-63379
|
|
||||||
|
|
||||||
class TestDummyClass<T> {
|
|
||||||
fun testFun(t: T) {}
|
|
||||||
}
|
|
||||||
|
|
||||||
fun more(t: TestDummyClass<in CustomRunnable>) {
|
|
||||||
t.testFun <!ARGUMENT_TYPE_MISMATCH!>{ Unit }<!>
|
|
||||||
t.testFun(CustomRunnable { Unit })
|
|
||||||
t.testFun(object : CustomRunnable {
|
|
||||||
override fun run() {}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
fun interface CustomRunnable {
|
|
||||||
fun run()
|
|
||||||
}
|
|
||||||
+1
@@ -1,3 +1,4 @@
|
|||||||
|
// FIR_IDENTICAL
|
||||||
// ISSUE: KT-63379
|
// ISSUE: KT-63379
|
||||||
|
|
||||||
class TestDummyClass<T> {
|
class TestDummyClass<T> {
|
||||||
|
|||||||
+17
@@ -0,0 +1,17 @@
|
|||||||
|
// ISSUE: KT-63379 (modified example, see original in unitInContravariantPosition.kt)
|
||||||
|
|
||||||
|
class TestDummyClass<T> {
|
||||||
|
fun testFun(t: T) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun more(t: TestDummyClass<out CustomRunnable>) {
|
||||||
|
t.testFun <!ARGUMENT_TYPE_MISMATCH!>{ Unit }<!>
|
||||||
|
t.testFun(<!ARGUMENT_TYPE_MISMATCH!>CustomRunnable { Unit }<!>)
|
||||||
|
t.testFun(<!ARGUMENT_TYPE_MISMATCH!>object : CustomRunnable<!> {
|
||||||
|
override fun run() {}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fun interface CustomRunnable {
|
||||||
|
fun run()
|
||||||
|
}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
// ISSUE: KT-63379 (modified example, see original in unitInContravariantPosition.kt)
|
||||||
|
|
||||||
|
class TestDummyClass<T> {
|
||||||
|
fun testFun(t: T) {}
|
||||||
|
}
|
||||||
|
|
||||||
|
fun more(t: TestDummyClass<out CustomRunnable>) {
|
||||||
|
t.testFun <!TYPE_MISMATCH!>{ Unit }<!>
|
||||||
|
t.testFun(<!TYPE_MISMATCH!>CustomRunnable { Unit }<!>)
|
||||||
|
t.testFun(<!TYPE_MISMATCH!>object : CustomRunnable<!> {
|
||||||
|
override fun run() {}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
fun interface CustomRunnable {
|
||||||
|
fun run()
|
||||||
|
}
|
||||||
Generated
+6
@@ -13927,6 +13927,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
public void testUnitInContravariantPosition() throws Exception {
|
public void testUnitInContravariantPosition() throws Exception {
|
||||||
runTest("compiler/testData/diagnostics/tests/funInterface/unitInContravariantPosition.kt");
|
runTest("compiler/testData/diagnostics/tests/funInterface/unitInContravariantPosition.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@TestMetadata("unitInCovariantPosition.kt")
|
||||||
|
public void testUnitInCovariantPosition() throws Exception {
|
||||||
|
runTest("compiler/testData/diagnostics/tests/funInterface/unitInCovariantPosition.kt");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Nested
|
@Nested
|
||||||
|
|||||||
Reference in New Issue
Block a user