[FIR] Require overrides to have matching isSuspend flag value
^KT-57100 Fixed
This commit is contained in:
committed by
Space Team
parent
4e58715760
commit
2e7dcd6096
+2
@@ -8,6 +8,7 @@ package org.jetbrains.kotlin.fir.scopes.impl
|
||||
import org.jetbrains.kotlin.descriptors.Visibilities
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isSuspend
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.visibility
|
||||
import org.jetbrains.kotlin.fir.resolve.substitution.ConeSubstitutor
|
||||
import org.jetbrains.kotlin.fir.resolve.transformers.ensureResolvedTypeDeclaration
|
||||
@@ -127,6 +128,7 @@ class FirStandardOverrideChecker(private val session: FirSession) : FirAbstractO
|
||||
|
||||
fun isOverriddenFunction(overrideCandidate: FirSimpleFunction, baseDeclaration: FirSimpleFunction, ignoreVisibility: Boolean): Boolean {
|
||||
if (overrideCandidate.valueParameters.size != baseDeclaration.valueParameters.size) return false
|
||||
if (overrideCandidate.isSuspend != baseDeclaration.isSuspend) return false
|
||||
|
||||
val substitutor = buildTypeParametersSubstitutorIfCompatible(overrideCandidate, baseDeclaration) ?: return false
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -FUN_INTERFACE_WRONG_COUNT_OF_ABSTRACT_MEMBERS
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>suspend () -> Unit, () -> Unit<!> {
|
||||
override suspend fun invoke() {
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -FUN_INTERFACE_WRONG_COUNT_OF_ABSTRACT_MEMBERS
|
||||
|
||||
abstract class CSuper: () -> Unit
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -FUN_INTERFACE_WRONG_COUNT_OF_ABSTRACT_MEMBERS
|
||||
|
||||
fun interface FISuper: () -> Unit
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -FUN_INTERFACE_WRONG_COUNT_OF_ABSTRACT_MEMBERS
|
||||
|
||||
interface ISuper: () -> Unit
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -FUN_INTERFACE_WRONG_COUNT_OF_ABSTRACT_MEMBERS
|
||||
import kotlin.coroutines.*
|
||||
|
||||
class C: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>SuspendFunction0<Unit>, () -> Unit<!> {
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -FUN_INTERFACE_WRONG_COUNT_OF_ABSTRACT_MEMBERS
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -FUN_INTERFACE_WRONG_COUNT_OF_ABSTRACT_MEMBERS
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
|
||||
+1
-1
@@ -1,7 +1,7 @@
|
||||
// FIR_IDENTICAL
|
||||
// !LANGUAGE: +SuspendFunctionAsSupertype
|
||||
// SKIP_TXT
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS
|
||||
// DIAGNOSTICS: -CONFLICTING_INHERITED_MEMBERS, -CONFLICTING_OVERLOADS, -ABSTRACT_MEMBER_NOT_IMPLEMENTED, -FUN_INTERFACE_WRONG_COUNT_OF_ABSTRACT_MEMBERS
|
||||
|
||||
import kotlin.coroutines.*
|
||||
|
||||
|
||||
@@ -11,5 +11,5 @@ interface C07I02{
|
||||
}
|
||||
|
||||
class C07C01: C07I01, C07I02 {
|
||||
override fun some() {}
|
||||
<!CONFLICTING_OVERLOADS!>override fun some()<!> {}
|
||||
}
|
||||
|
||||
+1
-1
@@ -2,6 +2,6 @@
|
||||
interface AsyncVal { suspend fun getVal(): Int = 1}
|
||||
interface SyncVal { fun getVal(): Int = 1 }
|
||||
|
||||
<!CONFLICTING_INHERITED_MEMBERS, MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>class MixSuspend<!> : AsyncVal, SyncVal {
|
||||
<!CONFLICTING_INHERITED_MEMBERS!>class MixSuspend<!> : AsyncVal, SyncVal {
|
||||
|
||||
}
|
||||
|
||||
+2
-2
@@ -6,11 +6,11 @@ interface A {
|
||||
}
|
||||
|
||||
interface B : A {
|
||||
override fun foo() {
|
||||
<!CONFLICTING_OVERLOADS!><!NOTHING_TO_OVERRIDE!>override<!> fun foo()<!> {
|
||||
|
||||
}
|
||||
|
||||
override suspend fun bar() {
|
||||
<!CONFLICTING_OVERLOADS!><!NOTHING_TO_OVERRIDE!>override<!> suspend fun bar()<!> {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+1
-1
@@ -1,7 +1,7 @@
|
||||
import org.jetbrains.kotlin.fir.plugin.MyComposable
|
||||
import kotlin.reflect.*
|
||||
|
||||
abstract class MyClass: <!MIXING_SUSPEND_AND_NON_SUSPEND_SUPERTYPES!>KSuspendFunction0<Unit>, () -> Unit<!>
|
||||
abstract class <!CONFLICTING_OVERLOADS, CONFLICTING_OVERLOADS!>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
|
||||
|
||||
Reference in New Issue
Block a user