[FIR] Don't miss VIRTUAL_MEMBER_HIDDEN
^KT-59925 Fixed
This commit is contained in:
committed by
Space Team
parent
bab00255dc
commit
34cb9aa659
+5
@@ -12,6 +12,8 @@ import com.intellij.util.diff.FlyweightCapableTreeStructure
|
||||
import org.jetbrains.kotlin.*
|
||||
import org.jetbrains.kotlin.diagnostics.valOrVarKeyword
|
||||
import org.jetbrains.kotlin.fir.FirElement
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||
import org.jetbrains.kotlin.lexer.KtKeywordToken
|
||||
import org.jetbrains.kotlin.lexer.KtModifierKeywordToken
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
@@ -101,6 +103,9 @@ fun FirElement.getModifier(token: KtModifierKeywordToken): FirModifier<*>? = sou
|
||||
|
||||
fun FirElement.hasModifier(token: KtModifierKeywordToken): Boolean = token in source.getModifierList()
|
||||
|
||||
@OptIn(SymbolInternals::class)
|
||||
fun FirBasedSymbol<*>.hasModifier(token: KtModifierKeywordToken): Boolean = fir.hasModifier(token)
|
||||
|
||||
internal val KtSourceElement?.valOrVarKeyword: KtKeywordToken?
|
||||
get() = when (this) {
|
||||
null -> null
|
||||
|
||||
+4
-1
@@ -16,6 +16,7 @@ import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirOptInUsageBaseChecker
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.expression.FirOptInUsageBaseChecker.Experimentality
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.getContainingClassSymbol
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.hasModifier
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.unsubstitutedScope
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.analysis.overridesBackwardCompatibilityHelper
|
||||
@@ -37,6 +38,7 @@ import org.jetbrains.kotlin.fir.symbols.lazyResolveToPhase
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.*
|
||||
import org.jetbrains.kotlin.fir.visibilityChecker
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.types.AbstractTypeChecker
|
||||
import org.jetbrains.kotlin.types.TypeCheckerState
|
||||
|
||||
@@ -250,8 +252,9 @@ object FirOverrideChecker : FirClassChecker() {
|
||||
context: CheckerContext
|
||||
) {
|
||||
val overriddenMemberSymbols = firTypeScope.retrieveDirectOverriddenOf(member)
|
||||
val hasOverrideKeyword = member.hasModifier(KtTokens.OVERRIDE_KEYWORD)
|
||||
|
||||
if (!member.isOverride) {
|
||||
if (!member.isOverride || !hasOverrideKeyword) {
|
||||
if (overriddenMemberSymbols.isEmpty() ||
|
||||
context.session.overridesBackwardCompatibilityHelper.overrideCanBeOmitted(overriddenMemberSymbols, context)
|
||||
) {
|
||||
|
||||
@@ -23,8 +23,8 @@ open class MyGenericClass<T>(t : T) : MyTrait<T>, MyAbstractClass<T>(), MyProps<
|
||||
class MyChildClass() : MyGenericClass<Int>(1) {}
|
||||
class MyChildClass1<T>(t : T) : MyGenericClass<T>(t) {}
|
||||
class MyChildClass2<T>(t : T) : MyGenericClass<T>(t) {
|
||||
fun foo(t: T) = t
|
||||
val pr : T = t
|
||||
fun <!VIRTUAL_MEMBER_HIDDEN!>foo<!>(t: T) = t
|
||||
val <!VIRTUAL_MEMBER_HIDDEN!>pr<!> : T = t
|
||||
override fun bar(t: T) = t
|
||||
override val p : T = t
|
||||
}
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
package override.normal
|
||||
|
||||
interface MyTrait {
|
||||
fun foo()
|
||||
val pr : Unit
|
||||
}
|
||||
|
||||
abstract class MyAbstractClass {
|
||||
abstract fun bar()
|
||||
abstract val prr : Unit
|
||||
|
||||
}
|
||||
|
||||
open class MyClass() : MyTrait, MyAbstractClass() {
|
||||
override fun foo() {}
|
||||
override fun bar() {}
|
||||
|
||||
override val pr : Unit = Unit
|
||||
override val prr : Unit = Unit
|
||||
}
|
||||
|
||||
class MyChildClass() : MyClass() {}
|
||||
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class MyIllegalClass<!> : MyTrait, MyAbstractClass() {}
|
||||
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class MyIllegalClass2<!>() : MyTrait, MyAbstractClass() {
|
||||
override fun foo() {}
|
||||
override val pr : Unit = Unit
|
||||
override val prr : Unit = Unit
|
||||
}
|
||||
|
||||
<!ABSTRACT_MEMBER_NOT_IMPLEMENTED!>class MyIllegalClass3<!>() : MyTrait, MyAbstractClass() {
|
||||
override fun bar() {}
|
||||
override val pr : Unit = Unit
|
||||
override val prr : Unit = Unit
|
||||
}
|
||||
|
||||
<!ABSTRACT_CLASS_MEMBER_NOT_IMPLEMENTED!>class MyIllegalClass4<!>() : MyTrait, MyAbstractClass() {
|
||||
fun <!VIRTUAL_MEMBER_HIDDEN!>foo<!>() {}
|
||||
<!MUST_BE_INITIALIZED_OR_BE_ABSTRACT!>val <!VIRTUAL_MEMBER_HIDDEN!>pr<!> : Unit<!>
|
||||
<!NOTHING_TO_OVERRIDE!>override<!> fun other() {}
|
||||
<!NOTHING_TO_OVERRIDE!>override<!> val otherPr : Int = 1
|
||||
}
|
||||
|
||||
class MyChildClass1() : MyClass() {
|
||||
fun foo() {}
|
||||
val pr : Unit = Unit
|
||||
override fun bar() {}
|
||||
override val prr : Unit = Unit
|
||||
}
|
||||
@@ -1,3 +1,4 @@
|
||||
// FIR_IDENTICAL
|
||||
package override.normal
|
||||
|
||||
interface MyTrait {
|
||||
|
||||
Reference in New Issue
Block a user