[FE] Introduce a language feature entry for expect actual classes

^KT-62885 Fixed
This commit is contained in:
Nikita Bobko
2023-11-07 15:28:47 +01:00
committed by teamcity
parent 4d4ad6c0d8
commit 45c5fd7a2d
8 changed files with 80 additions and 4 deletions
@@ -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)
}
@@ -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 {
@@ -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 {
@@ -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)
@@ -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)
@@ -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!!
@@ -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 {
@@ -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),