diff --git a/compiler/config/src/org/jetbrains/kotlin/config/CommonConfigurationKeys.kt b/compiler/config/src/org/jetbrains/kotlin/config/CommonConfigurationKeys.kt index f3fbbee2604..e544dd3d00f 100644 --- a/compiler/config/src/org/jetbrains/kotlin/config/CommonConfigurationKeys.kt +++ b/compiler/config/src/org/jetbrains/kotlin/config/CommonConfigurationKeys.kt @@ -108,3 +108,8 @@ var CompilerConfiguration.languageVersionSettings: LanguageVersionSettings val LanguageVersionSettings.isLibraryToSourceAnalysisEnabled: Boolean get() = getFlag(AnalysisFlags.libraryToSourceAnalysis) + +val LanguageVersionSettings.areExpectActualClassesStable: Boolean + get() { + return getFlag(AnalysisFlags.muteExpectActualClassesWarning) || supportsFeature(LanguageFeature.ExpectActualClasses) + } diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java index 0cae76b8942..7da370607d9 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated.java @@ -151,6 +151,12 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst runTest("compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBetaWarning.kt"); } + @Test + @TestMetadata("expectActualClassesAreInBeta_suppressWarningWithLv.kt") + public void testExpectActualClassesAreInBeta_suppressWarningWithLv() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBeta_suppressWarningWithLv.kt"); + } + @Test @TestMetadata("expectDataObject.kt") public void testExpectDataObject() throws Exception { diff --git a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java index 58947fe1b99..bc877ccb616 100644 --- a/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java +++ b/compiler/fir/analysis-tests/tests-gen/org/jetbrains/kotlin/test/runners/FirOldFrontendMPPDiagnosticsWithPsiTestGenerated.java @@ -151,6 +151,12 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi runTest("compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBetaWarning.kt"); } + @Test + @TestMetadata("expectActualClassesAreInBeta_suppressWarningWithLv.kt") + public void testExpectActualClassesAreInBeta_suppressWarningWithLv() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBeta_suppressWarningWithLv.kt"); + } + @Test @TestMetadata("expectDataObject.kt") public void testExpectDataObject() throws Exception { diff --git a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualClassifiersAreInBetaChecker.kt b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualClassifiersAreInBetaChecker.kt index adddb5be848..aef13ddfc79 100644 --- a/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualClassifiersAreInBetaChecker.kt +++ b/compiler/fir/checkers/src/org/jetbrains/kotlin/fir/analysis/checkers/declaration/FirExpectActualClassifiersAreInBetaChecker.kt @@ -5,8 +5,8 @@ package org.jetbrains.kotlin.fir.analysis.checkers.declaration -import org.jetbrains.kotlin.config.AnalysisFlags import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.config.areExpectActualClassesStable import org.jetbrains.kotlin.diagnostics.DiagnosticReporter import org.jetbrains.kotlin.diagnostics.reportOn import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext @@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isExpect object FirExpectActualClassifiersAreInBetaChecker : FirClassLikeChecker() { override fun check(declaration: FirClassLikeDeclaration, context: CheckerContext, reporter: DiagnosticReporter) { if (!context.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) return - if (context.languageVersionSettings.getFlag(AnalysisFlags.muteExpectActualClassesWarning)) return + if (context.languageVersionSettings.areExpectActualClassesStable) return if (declaration.isExpect || declaration.isActual) { reporter.reportOn(declaration.source, FirErrors.EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING, context) diff --git a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectActualClassifiersAreInBetaChecker.kt b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectActualClassifiersAreInBetaChecker.kt index 284484f15dd..ed767acc207 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectActualClassifiersAreInBetaChecker.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/resolve/checkers/ExpectActualClassifiersAreInBetaChecker.kt @@ -5,8 +5,8 @@ package org.jetbrains.kotlin.resolve.checkers -import org.jetbrains.kotlin.config.AnalysisFlags import org.jetbrains.kotlin.config.LanguageFeature +import org.jetbrains.kotlin.config.areExpectActualClassesStable import org.jetbrains.kotlin.descriptors.ClassDescriptor import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters import org.jetbrains.kotlin.descriptors.DeclarationDescriptor @@ -20,7 +20,7 @@ import org.jetbrains.kotlin.psi.KtTypeAlias object ExpectActualClassifiersAreInBetaChecker : DeclarationChecker { override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) { if (!context.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) return - if (context.languageVersionSettings.getFlag(AnalysisFlags.muteExpectActualClassesWarning)) return + if (context.languageVersionSettings.areExpectActualClassesStable) return if (descriptor !is TypeAliasDescriptor && descriptor !is ClassDescriptor) return check(declaration is KtClassOrObject || declaration is KtTypeAlias) diff --git a/compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBeta_suppressWarningWithLv.kt b/compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBeta_suppressWarningWithLv.kt new file mode 100644 index 00000000000..f54e21b2f10 --- /dev/null +++ b/compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBeta_suppressWarningWithLv.kt @@ -0,0 +1,51 @@ +// FIR_IDENTICAL +// ENABLE_EXPECT_ACTUAL_CLASSES_WARNING +// LANGUAGE: +ExpectActualClasses +// MODULE: m1-common +// FILE: common.kt + +expect class Clazz { + class Nested + + fun memberFun() + val memberProp: Clazz +} + +expect interface Interface + +expect object Object + +expect annotation class Annotation + +expect enum class Enum + +expect class ActualTypealias + +expect fun function() + +expect val property: Clazz + +// MODULE: m2-jvm()()(m1-common) +// FILE: jvm.kt +actual class Clazz { + actual class Nested + + actual fun memberFun() {} + actual val memberProp: Clazz = null!! +} + +actual interface Interface + +actual object Object + +actual annotation class Annotation + +actual enum class Enum + +actual typealias ActualTypealias = ActualTypealiasImpl + +class ActualTypealiasImpl + +actual fun function() {} + +actual val property: Clazz = null!! diff --git a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java index 8419365b01a..9376990898f 100644 --- a/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java +++ b/compiler/tests-common-new/tests-gen/org/jetbrains/kotlin/test/runners/DiagnosticTestGenerated.java @@ -23518,6 +23518,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest { runTest("compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBetaWarning.kt"); } + @Test + @TestMetadata("expectActualClassesAreInBeta_suppressWarningWithLv.kt") + public void testExpectActualClassesAreInBeta_suppressWarningWithLv() throws Exception { + runTest("compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBeta_suppressWarningWithLv.kt"); + } + @Test @TestMetadata("expectDataObject.kt") public void testExpectDataObject() throws Exception { diff --git a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt index e1639e06394..71970350262 100644 --- a/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt +++ b/compiler/util/src/org/jetbrains/kotlin/config/LanguageVersionSettings.kt @@ -319,6 +319,8 @@ enum class LanguageFeature( // End of 2.* language features -------------------------------------------------- + ExpectActualClasses(sinceVersion = null), // KT-62885 + // Disabled for indefinite time. See KT-53751 IgnoreNullabilityForErasedValueParameters(sinceVersion = null, kind = BUG_FIX),