FIR: drop JVM_DEFAULT_THROUGH_INHERITANCE diagnostic (FE 1.0 sync)
This commit is contained in:
committed by
TeamCityServer
parent
e1ca5fe344
commit
178290eac3
-6
@@ -4110,12 +4110,6 @@ internal val KT_DIAGNOSTIC_CONVERTER = KtDiagnosticConverterBuilder.buildConvert
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirJvmErrors.JVM_DEFAULT_THROUGH_INHERITANCE) { firDiagnostic ->
|
||||
JvmDefaultThroughInheritanceImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
token,
|
||||
)
|
||||
}
|
||||
add(FirJvmErrors.USAGE_OF_JVM_DEFAULT_THROUGH_SUPER_CALL) { firDiagnostic ->
|
||||
UsageOfJvmDefaultThroughSuperCallImpl(
|
||||
firDiagnostic as KtPsiDiagnostic,
|
||||
|
||||
-4
@@ -2859,10 +2859,6 @@ sealed class KtFirDiagnostic<PSI : PsiElement> : KtDiagnosticWithPsi<PSI> {
|
||||
abstract val annotation: String
|
||||
}
|
||||
|
||||
abstract class JvmDefaultThroughInheritance : KtFirDiagnostic<KtDeclaration>() {
|
||||
override val diagnosticClass get() = JvmDefaultThroughInheritance::class
|
||||
}
|
||||
|
||||
abstract class UsageOfJvmDefaultThroughSuperCall : KtFirDiagnostic<PsiElement>() {
|
||||
override val diagnosticClass get() = UsageOfJvmDefaultThroughSuperCall::class
|
||||
}
|
||||
|
||||
-5
@@ -3456,11 +3456,6 @@ internal class JvmDefaultInDeclarationImpl(
|
||||
override val token: ValidityToken,
|
||||
) : KtFirDiagnostic.JvmDefaultInDeclaration(), KtAbstractFirDiagnostic<KtElement>
|
||||
|
||||
internal class JvmDefaultThroughInheritanceImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: ValidityToken,
|
||||
) : KtFirDiagnostic.JvmDefaultThroughInheritance(), KtAbstractFirDiagnostic<KtDeclaration>
|
||||
|
||||
internal class UsageOfJvmDefaultThroughSuperCallImpl(
|
||||
override val firDiagnostic: KtPsiDiagnostic,
|
||||
override val token: ValidityToken,
|
||||
|
||||
-1
@@ -112,7 +112,6 @@ object JVM_DIAGNOSTICS_LIST : DiagnosticList("FirJvmErrors") {
|
||||
val JVM_DEFAULT_IN_DECLARATION by error<KtElement>(PositioningStrategy.DECLARATION_SIGNATURE_OR_DEFAULT) {
|
||||
parameter<String>("annotation")
|
||||
}
|
||||
val JVM_DEFAULT_THROUGH_INHERITANCE by error<KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
val USAGE_OF_JVM_DEFAULT_THROUGH_SUPER_CALL by error<PsiElement>()
|
||||
val NON_JVM_DEFAULT_OVERRIDES_JAVA_DEFAULT by warning<KtDeclaration>(PositioningStrategy.DECLARATION_SIGNATURE)
|
||||
}
|
||||
|
||||
-1
@@ -93,7 +93,6 @@ object FirJvmErrors {
|
||||
val JVM_DEFAULT_IN_JVM6_TARGET by error1<PsiElement, String>()
|
||||
val JVM_DEFAULT_REQUIRED_FOR_OVERRIDE by error0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val JVM_DEFAULT_IN_DECLARATION by error1<KtElement, String>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE_OR_DEFAULT)
|
||||
val JVM_DEFAULT_THROUGH_INHERITANCE by error0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
val USAGE_OF_JVM_DEFAULT_THROUGH_SUPER_CALL by error0<PsiElement>()
|
||||
val NON_JVM_DEFAULT_OVERRIDES_JAVA_DEFAULT by warning0<KtDeclaration>(SourceElementPositioningStrategies.DECLARATION_SIGNATURE)
|
||||
|
||||
|
||||
-5
@@ -36,7 +36,6 @@ import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_DEFAUL
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_DEFAULT_IN_JVM6_TARGET
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_DEFAULT_NOT_IN_INTERFACE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_DEFAULT_REQUIRED_FOR_OVERRIDE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_DEFAULT_THROUGH_INHERITANCE
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_INLINE_WITHOUT_VALUE_CLASS
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_PACKAGE_NAME_CANNOT_BE_EMPTY
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.jvm.FirJvmErrors.JVM_PACKAGE_NAME_MUST_BE_VALID_NAME
|
||||
@@ -177,10 +176,6 @@ object FirJvmErrorsDefaultMessages : BaseDiagnosticRendererFactory() {
|
||||
)
|
||||
map.put(JVM_DEFAULT_REQUIRED_FOR_OVERRIDE, "'@JvmDefault' is required for an override of a '@JvmDefault' member")
|
||||
map.put(JVM_DEFAULT_IN_DECLARATION, "Usage of ''@{0}'' is only allowed with -Xjvm-default option", STRING)
|
||||
map.put(
|
||||
JVM_DEFAULT_THROUGH_INHERITANCE,
|
||||
"Inheritance from an interface with '@JvmDefault' members is only allowed with -Xjvm-default option"
|
||||
)
|
||||
map.put(
|
||||
USAGE_OF_JVM_DEFAULT_THROUGH_SUPER_CALL,
|
||||
"Super calls of '@JvmDefault' members are only allowed with -Xjvm-default option"
|
||||
|
||||
-43
@@ -22,10 +22,8 @@ import org.jetbrains.kotlin.fir.declarations.utils.isInterface
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.modality
|
||||
import org.jetbrains.kotlin.fir.expressions.FirAnnotation
|
||||
import org.jetbrains.kotlin.fir.java.jvmDefaultModeState
|
||||
import org.jetbrains.kotlin.fir.resolve.toFirRegularClassSymbol
|
||||
import org.jetbrains.kotlin.fir.resolve.toSymbol
|
||||
import org.jetbrains.kotlin.fir.scopes.getDirectOverriddenFunctions
|
||||
import org.jetbrains.kotlin.fir.scopes.impl.FirClassUseSiteMemberScope
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirCallableSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.FirIntersectionCallableSymbol
|
||||
import org.jetbrains.kotlin.name.JvmNames.JVM_DEFAULT_CLASS_ID
|
||||
@@ -71,50 +69,9 @@ object FirJvmDefaultChecker : FirBasicDeclarationChecker() {
|
||||
}
|
||||
}
|
||||
|
||||
if (declaration is FirClass) {
|
||||
val unsubstitutedScope = declaration.unsubstitutedScope(context)
|
||||
val hasDeclaredJvmDefaults = unsubstitutedScope is FirClassUseSiteMemberScope &&
|
||||
unsubstitutedScope.directOverriddenFunctions.keys.any {
|
||||
it.isCompiledToJvmDefault(jvmDefaultMode)
|
||||
}
|
||||
if (!hasDeclaredJvmDefaults && !declaration.checkJvmDefaultsInHierarchy(jvmDefaultMode, context)) {
|
||||
reporter.reportOn(declaration.source, FirJvmErrors.JVM_DEFAULT_THROUGH_INHERITANCE, context)
|
||||
}
|
||||
}
|
||||
|
||||
checkNonJvmDefaultOverridesJavaDefault(defaultAnnotation, jvmDefaultMode, declaration, context, reporter)
|
||||
}
|
||||
|
||||
private fun FirDeclaration.checkJvmDefaultsInHierarchy(jvmDefaultMode: JvmDefaultMode, context: CheckerContext): Boolean {
|
||||
if (jvmDefaultMode.isEnabled) return true
|
||||
|
||||
if (this !is FirClass) return true
|
||||
|
||||
val unsubstitutedScope = unsubstitutedScope(context)
|
||||
if (unsubstitutedScope is FirClassUseSiteMemberScope) {
|
||||
val directOverriddenFunctions = unsubstitutedScope.directOverriddenFunctions.flatMap { it.value }.toSet()
|
||||
|
||||
for (key in unsubstitutedScope.overrideByBase.keys) {
|
||||
if (directOverriddenFunctions.contains(key)) {
|
||||
continue
|
||||
}
|
||||
|
||||
if (key.getOverriddenDeclarations().all {
|
||||
it.modality == Modality.ABSTRACT ||
|
||||
!it.isCompiledToJvmDefaultWithProperMode(jvmDefaultMode) ||
|
||||
it.containingClass()?.toFirRegularClassSymbol(context.session)?.isInterface != true
|
||||
}
|
||||
) {
|
||||
continue
|
||||
}
|
||||
|
||||
return false
|
||||
}
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
private fun checkNonJvmDefaultOverridesJavaDefault(
|
||||
defaultAnnotation: FirAnnotation?,
|
||||
jvmDefaultMode: JvmDefaultMode,
|
||||
|
||||
Vendored
+6
-6
@@ -6,12 +6,12 @@ interface A {
|
||||
}
|
||||
}
|
||||
|
||||
interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>B<!> : A {
|
||||
interface B : A {
|
||||
}
|
||||
|
||||
|
||||
open class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Foo<!> : B
|
||||
open class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Foo2<!> : B, A
|
||||
open class Foo : B
|
||||
open class Foo2 : B, A
|
||||
|
||||
open class FooNoError : B {
|
||||
override fun test() {
|
||||
@@ -22,9 +22,9 @@ open class Foo2NoError : B, A {
|
||||
}
|
||||
}
|
||||
|
||||
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Bar<!> : Foo()
|
||||
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Bar2<!> : Foo(), A
|
||||
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Bar3<!> : Foo(), B
|
||||
class Bar : Foo()
|
||||
class Bar2 : Foo(), A
|
||||
class Bar3 : Foo(), B
|
||||
|
||||
open class BarWithJvmDefault : B {
|
||||
<!JVM_DEFAULT_NOT_IN_INTERFACE!>@<!DEPRECATION!>JvmDefault<!><!>
|
||||
|
||||
+5
-5
@@ -7,7 +7,7 @@ interface A {
|
||||
}
|
||||
|
||||
// FILE: 2.kt
|
||||
interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>B<!> : A {
|
||||
interface B : A {
|
||||
|
||||
}
|
||||
|
||||
@@ -23,7 +23,7 @@ open class Foo : B {
|
||||
super.test()
|
||||
}
|
||||
}
|
||||
open class <!JVM_DEFAULT_THROUGH_INHERITANCE!>Foo2<!> : B
|
||||
open class Foo2 : B
|
||||
|
||||
open class Bar : Foo2() {
|
||||
override fun test() {
|
||||
@@ -37,7 +37,7 @@ open class Bar2 : Bar() {
|
||||
}
|
||||
}
|
||||
|
||||
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>ManySupers<!>: Foo2(), B {
|
||||
class ManySupers: Foo2(), B {
|
||||
fun foo() {
|
||||
super<Foo2>.test()
|
||||
super<<!QUALIFIED_SUPERTYPE_EXTENDED_BY_OTHER_SUPERTYPE!>B<!>>.test()
|
||||
@@ -45,7 +45,7 @@ class <!JVM_DEFAULT_THROUGH_INHERITANCE!>ManySupers<!>: Foo2(), B {
|
||||
}
|
||||
}
|
||||
|
||||
class <!JVM_DEFAULT_THROUGH_INHERITANCE!>ManySupers2<!>: Foo2(), C {
|
||||
class ManySupers2: Foo2(), C {
|
||||
fun foo() {
|
||||
super<Foo2>.test()
|
||||
super<C>.test()
|
||||
@@ -53,7 +53,7 @@ class <!JVM_DEFAULT_THROUGH_INHERITANCE!>ManySupers2<!>: Foo2(), C {
|
||||
}
|
||||
}
|
||||
|
||||
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class <!JVM_DEFAULT_THROUGH_INHERITANCE!>ManySupers3<!><!>: Bar2(), C {
|
||||
<!MANY_IMPL_MEMBER_NOT_IMPLEMENTED!>class ManySupers3<!>: Bar2(), C {
|
||||
fun foo() {
|
||||
super<Bar2>.test()
|
||||
super<C>.test()
|
||||
|
||||
Vendored
+2
-2
@@ -10,9 +10,9 @@ interface B{
|
||||
}
|
||||
}
|
||||
|
||||
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>AB<!><!>: A, B
|
||||
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface AB<!>: A, B
|
||||
|
||||
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>BA<!><!>: B, A
|
||||
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface BA<!>: B, A
|
||||
|
||||
|
||||
interface C : A, B {
|
||||
|
||||
Vendored
+3
-3
@@ -9,8 +9,8 @@ interface A {
|
||||
interface B{
|
||||
fun test()
|
||||
}
|
||||
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>AB<!><!> : A, B
|
||||
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface <!JVM_DEFAULT_THROUGH_INHERITANCE!>BA<!><!> : B, A
|
||||
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface AB<!> : A, B
|
||||
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>interface BA<!> : B, A
|
||||
|
||||
class C : A, B {
|
||||
override fun test() {
|
||||
@@ -24,7 +24,7 @@ class D : B, A {
|
||||
}
|
||||
}
|
||||
|
||||
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>class <!JVM_DEFAULT_THROUGH_INHERITANCE!>E<!><!>: B, A {
|
||||
<!MANY_INTERFACES_MEMBER_NOT_IMPLEMENTED!>class E<!>: B, A {
|
||||
fun foo() {
|
||||
super<A>.test()
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user