From 0739925869248c05ff668191f397ea31fa2aad06 Mon Sep 17 00:00:00 2001 From: Mikhail Glukhikh Date: Tue, 19 Oct 2021 16:49:22 +0300 Subject: [PATCH] Drop QUALIFIED_SUPERTYPE_EXTENDED_BY_OTHER_SUPERTYPE diagnostic in 1.7.0 #KT-49016 Fixed --- .../qualifiedSupertypeExtendedByOtherSupertype.kt | 1 + .../FirQualifiedSupertypeExtendedByOtherSupertypeChecker.kt | 2 ++ .../types/expressions/BasicExpressionTypingVisitor.java | 5 ++++- .../diagnostics/tests/inline/superCallDepecation.fir.kt | 5 +++-- .../diagnostics/tests/inline/superCallDepecation.kt | 5 +++-- .../tests/inline/superCallDepecationWarning.fir.kt | 6 +++--- .../diagnostics/tests/inline/superCallDepecationWarning.kt | 6 +++--- .../tests/thisAndSuper/genericQualifiedSuperOverridden.kt | 5 +++-- .../tests/thisAndSuper/qualifiedSuperOverridden.kt | 5 +++-- .../testsWithStdLib/annotations/jvmDefault/superCall.fir.kt | 1 + .../testsWithStdLib/annotations/jvmDefault/superCall.kt | 1 + .../org/jetbrains/kotlin/config/LanguageVersionSettings.kt | 1 + 12 files changed, 28 insertions(+), 15 deletions(-) diff --git a/compiler/fir/analysis-tests/testData/resolve/diagnostics/qualifiedSupertypeExtendedByOtherSupertype.kt b/compiler/fir/analysis-tests/testData/resolve/diagnostics/qualifiedSupertypeExtendedByOtherSupertype.kt index 81edcb0ef35..9904db411ba 100644 --- a/compiler/fir/analysis-tests/testData/resolve/diagnostics/qualifiedSupertypeExtendedByOtherSupertype.kt +++ b/compiler/fir/analysis-tests/testData/resolve/diagnostics/qualifiedSupertypeExtendedByOtherSupertype.kt @@ -1,3 +1,4 @@ +// !LANGUAGE: -QualifiedSupertypeMayBeExtendedByOtherSupertype interface IBase { fun foo() {} fun bar() {} diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirQualifiedSupertypeExtendedByOtherSupertypeChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirQualifiedSupertypeExtendedByOtherSupertypeChecker.kt index e2883e60e2c..4fa54681cc5 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirQualifiedSupertypeExtendedByOtherSupertypeChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/expression/FirQualifiedSupertypeExtendedByOtherSupertypeChecker.kt @@ -5,6 +5,7 @@ package org.jetbrains.kotlin.fir.analysis.checkers.expression +import org.jetbrains.kotlin.config.LanguageFeature import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext import org.jetbrains.kotlin.fir.analysis.checkers.findClosestClassOrObject import org.jetbrains.kotlin.fir.analysis.checkers.fullyExpandedClass @@ -20,6 +21,7 @@ import org.jetbrains.kotlin.utils.addToStdlib.safeAs object FirQualifiedSupertypeExtendedByOtherSupertypeChecker : FirQualifiedAccessExpressionChecker() { override fun check(expression: FirQualifiedAccessExpression, context: CheckerContext, reporter: DiagnosticReporter) { + if (context.languageVersionSettings.supportsFeature(LanguageFeature.QualifiedSupertypeMayBeExtendedByOtherSupertype)) return // require to be called over a super reference val superReference = expression.calleeReference.safeAs() ?.takeIf { it.hadExplicitTypeInSource() } diff --git a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java index 98c8d6a135e..8556a42eebc 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java +++ b/compiler/frontend/src/org/jetbrains/kotlin/types/expressions/BasicExpressionTypingVisitor.java @@ -500,7 +500,10 @@ public class BasicExpressionTypingVisitor extends ExpressionTypingVisitor { context.trace.report(TYPE_ARGUMENTS_REDUNDANT_IN_SUPER_QUALIFIER.on(redundantTypeArguments)); } - if (result != null && (validClassifier || validType)) { + if (!components.languageVersionSettings.supportsFeature(LanguageFeature.QualifiedSupertypeMayBeExtendedByOtherSupertype) && + result != null && + (validClassifier || validType) + ) { checkResolvedExplicitlyQualifiedSupertype(context.trace, result, supertypes, superTypeQualifier); } } diff --git a/compiler/testData/diagnostics/tests/inline/superCallDepecation.fir.kt b/compiler/testData/diagnostics/tests/inline/superCallDepecation.fir.kt index 139ce9f8138..0b1476f7748 100644 --- a/compiler/testData/diagnostics/tests/inline/superCallDepecation.fir.kt +++ b/compiler/testData/diagnostics/tests/inline/superCallDepecation.fir.kt @@ -1,4 +1,5 @@ // !DIAGNOSTICS: -EXPOSED_PARAMETER_TYPE -NOTHING_TO_INLINE +// !LANGUAGE: +QualifiedSupertypeMayBeExtendedByOtherSupertype // FILE: main.kt open class AndroidTargetConfigurator : @@ -33,10 +34,10 @@ open class AndroidTargetConfigurator : } inline fun anonymousInline() { - super.classFun() + super<ModuleConfiguratorWithTests>.getConfiguratorSettings() + super<AndroidModuleConfigurator>.getConfiguratorSettings() + super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() } - fun run() = super.classFun() + super<ModuleConfiguratorWithTests>.getConfiguratorSettings() + super<AndroidModuleConfigurator>.getConfiguratorSettings() + fun run() = super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() }.run() } diff --git a/compiler/testData/diagnostics/tests/inline/superCallDepecation.kt b/compiler/testData/diagnostics/tests/inline/superCallDepecation.kt index c47e89db0f6..c82d3a14f01 100644 --- a/compiler/testData/diagnostics/tests/inline/superCallDepecation.kt +++ b/compiler/testData/diagnostics/tests/inline/superCallDepecation.kt @@ -1,4 +1,5 @@ // !DIAGNOSTICS: -EXPOSED_PARAMETER_TYPE -NOTHING_TO_INLINE +// !LANGUAGE: +QualifiedSupertypeMayBeExtendedByOtherSupertype // FILE: main.kt open class AndroidTargetConfigurator : @@ -33,10 +34,10 @@ open class AndroidTargetConfigurator : } inline fun anonymousInline() { - super.classFun() + super<ModuleConfiguratorWithTests>.getConfiguratorSettings() + super<AndroidModuleConfigurator>.getConfiguratorSettings() + super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() } - fun run() = super.classFun() + super<ModuleConfiguratorWithTests>.getConfiguratorSettings() + super<AndroidModuleConfigurator>.getConfiguratorSettings() + fun run() = super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() }.run() } diff --git a/compiler/testData/diagnostics/tests/inline/superCallDepecationWarning.fir.kt b/compiler/testData/diagnostics/tests/inline/superCallDepecationWarning.fir.kt index 25bb91c657f..b1ab5fdbb56 100644 --- a/compiler/testData/diagnostics/tests/inline/superCallDepecationWarning.fir.kt +++ b/compiler/testData/diagnostics/tests/inline/superCallDepecationWarning.fir.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: -ProhibitSuperCallsFromPublicInline +// !LANGUAGE: -ProhibitSuperCallsFromPublicInline +QualifiedSupertypeMayBeExtendedByOtherSupertype // !DIAGNOSTICS: -EXPOSED_PARAMETER_TYPE -NOTHING_TO_INLINE // FILE: main.kt @@ -34,10 +34,10 @@ open class AndroidTargetConfigurator : } inline fun anonymousInline() { - super.classFun() + super<ModuleConfiguratorWithTests>.getConfiguratorSettings() + super<AndroidModuleConfigurator>.getConfiguratorSettings() + super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() } - fun run() = super.classFun() + super<ModuleConfiguratorWithTests>.getConfiguratorSettings() + super<AndroidModuleConfigurator>.getConfiguratorSettings() + fun run() = super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() }.run() } diff --git a/compiler/testData/diagnostics/tests/inline/superCallDepecationWarning.kt b/compiler/testData/diagnostics/tests/inline/superCallDepecationWarning.kt index 49b2b6a30d0..005ff45cef1 100644 --- a/compiler/testData/diagnostics/tests/inline/superCallDepecationWarning.kt +++ b/compiler/testData/diagnostics/tests/inline/superCallDepecationWarning.kt @@ -1,4 +1,4 @@ -// !LANGUAGE: -ProhibitSuperCallsFromPublicInline +// !LANGUAGE: -ProhibitSuperCallsFromPublicInline +QualifiedSupertypeMayBeExtendedByOtherSupertype // !DIAGNOSTICS: -EXPOSED_PARAMETER_TYPE -NOTHING_TO_INLINE // FILE: main.kt @@ -34,10 +34,10 @@ open class AndroidTargetConfigurator : } inline fun anonymousInline() { - super.classFun() + super<ModuleConfiguratorWithTests>.getConfiguratorSettings() + super<AndroidModuleConfigurator>.getConfiguratorSettings() + super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() } - fun run() = super.classFun() + super<ModuleConfiguratorWithTests>.getConfiguratorSettings() + super<AndroidModuleConfigurator>.getConfiguratorSettings() + fun run() = super.classFun() + super.getConfiguratorSettings() + super.getConfiguratorSettings() }.run() } diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/genericQualifiedSuperOverridden.kt b/compiler/testData/diagnostics/tests/thisAndSuper/genericQualifiedSuperOverridden.kt index a83da06a287..ccb9b86c70d 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/genericQualifiedSuperOverridden.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/genericQualifiedSuperOverridden.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +// !LANGUAGE: +QualifiedSupertypeMayBeExtendedByOtherSupertype interface IBase { fun foo() {} fun bar() {} @@ -11,8 +12,8 @@ interface IDerived : IBase { class Test : IDerived, IBase { fun test() { - super<IBase>.foo() - super<IBase>.bar() + super.foo() + super.bar() super.foo() super.bar() super.qux() diff --git a/compiler/testData/diagnostics/tests/thisAndSuper/qualifiedSuperOverridden.kt b/compiler/testData/diagnostics/tests/thisAndSuper/qualifiedSuperOverridden.kt index ec6a55eedbb..634b2ebdec1 100644 --- a/compiler/testData/diagnostics/tests/thisAndSuper/qualifiedSuperOverridden.kt +++ b/compiler/testData/diagnostics/tests/thisAndSuper/qualifiedSuperOverridden.kt @@ -1,4 +1,5 @@ // FIR_IDENTICAL +// !LANGUAGE: +QualifiedSupertypeMayBeExtendedByOtherSupertype interface IBase { fun foo() {} fun bar() {} @@ -17,8 +18,8 @@ class Test : IDerived1, IBase, IDerived2 { override fun foo() {} fun test() { - super<IBase>.foo() - super<IBase>.bar() + super.foo() + super.bar() super.foo() super.bar() diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt index 00676103d4a..4b7b2d1915e 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.fir.kt @@ -1,4 +1,5 @@ // !JVM_TARGET: 1.8 +// !LANGUAGE: -QualifiedSupertypeMayBeExtendedByOtherSupertype // FILE: 1.kt interface A { @JvmDefault diff --git a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.kt b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.kt index f2c2140ebaf..d16a4ab02e7 100644 --- a/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.kt +++ b/compiler/testData/diagnostics/testsWithStdLib/annotations/jvmDefault/superCall.kt @@ -1,4 +1,5 @@ // !JVM_TARGET: 1.8 +// !LANGUAGE: -QualifiedSupertypeMayBeExtendedByOtherSupertype // FILE: 1.kt interface A { @JvmDefault diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index a945fcd4a73..3d4b4848ec1 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -244,6 +244,7 @@ enum class LanguageFeature( ConsiderExtensionReceiverFromConstrainsInLambda(KOTLIN_1_7, kind = BUG_FIX), // KT-49832 ProperInternalVisibilityCheckInImportingScope(KOTLIN_1_7, kind = BUG_FIX), InlineClassImplementationByDelegation(KOTLIN_1_7), + QualifiedSupertypeMayBeExtendedByOtherSupertype(KOTLIN_1_7), // 1.8