[FIR] Forbid mixing supertypes with different functional kinds

^KT-61277 Fixed
This commit is contained in:
Nikolay Lunyak
2023-08-17 13:40:54 +03:00
committed by Space Team
parent f674529558
commit 4958196c51
11 changed files with 83 additions and 11 deletions
@@ -0,0 +1,25 @@
FILE: mixingComposableAndNormalFunctions.kt
public abstract class MyClass : R|kotlin/reflect/KSuspendFunction0<kotlin/Unit>|, R|() -> kotlin/Unit| {
public constructor(): R|MyClass| {
super<R|kotlin/Any|>()
}
}
public abstract class OurClass : R|@R|org/jetbrains/kotlin/fir/plugin/MyComposable|() some/MyComposableFunction1<kotlin/Int, kotlin/Unit>|, R|() -> kotlin/Unit| {
public constructor(): R|OurClass| {
super<R|kotlin/Any|>()
}
}
public abstract class YourClass : R|@R|org/jetbrains/kotlin/fir/plugin/MyComposable|() kotlin/reflect/KFunction1<kotlin/Boolean, kotlin/Unit>|, R|() -> kotlin/Unit| {
public constructor(): R|YourClass| {
super<R|kotlin/Any|>()
}
}
public abstract class Their : R|kotlin/reflect/KSuspendFunction1<kotlin/Boolean, kotlin/Unit>|, R|() -> kotlin/Unit| {
public constructor(): R|Their| {
super<R|kotlin/Any|>()
}
}
@@ -0,0 +1,8 @@
import org.jetbrains.kotlin.fir.plugin.MyComposable
import kotlin.reflect.*
abstract class MyClass: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, () -> Unit<!>
abstract class OurClass: <!MIXING_FUNCTIONAL_KINDS_IN_SUPERTYPES!>@MyComposable (Int) -> Unit, () -> Unit<!>
abstract class YourClass: @MyComposable KFunction1<Boolean, Unit>, () -> Unit
abstract class Their: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction1<Boolean, Unit>, () -> Unit<!>
@@ -39,6 +39,12 @@ public class FirPsiPluginDiagnosticTestGenerated extends AbstractFirPsiPluginDia
runTest("plugins/fir-plugin-prototype/testData/diagnostics/checkers/dependencyWithoutAttributePlugin.kt");
}
@Test
@TestMetadata("mixingComposableAndNormalFunctions.kt")
public void testMixingComposableAndNormalFunctions() throws Exception {
runTest("plugins/fir-plugin-prototype/testData/diagnostics/checkers/mixingComposableAndNormalFunctions.kt");
}
@Test
@TestMetadata("signedNumbersCheckers.kt")
public void testSignedNumbersCheckers() throws Exception {