[FE] Introduce a language feature entry for expect actual classes
^KT-62885 Fixed
This commit is contained in:
@@ -108,3 +108,8 @@ var CompilerConfiguration.languageVersionSettings: LanguageVersionSettings
|
|||||||
|
|
||||||
val LanguageVersionSettings.isLibraryToSourceAnalysisEnabled: Boolean
|
val LanguageVersionSettings.isLibraryToSourceAnalysisEnabled: Boolean
|
||||||
get() = getFlag(AnalysisFlags.libraryToSourceAnalysis)
|
get() = getFlag(AnalysisFlags.libraryToSourceAnalysis)
|
||||||
|
|
||||||
|
val LanguageVersionSettings.areExpectActualClassesStable: Boolean
|
||||||
|
get() {
|
||||||
|
return getFlag(AnalysisFlags.muteExpectActualClassesWarning) || supportsFeature(LanguageFeature.ExpectActualClasses)
|
||||||
|
}
|
||||||
|
|||||||
+6
@@ -151,6 +151,12 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst
|
|||||||
runTest("compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBetaWarning.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectDataObject.kt")
|
@TestMetadata("expectDataObject.kt")
|
||||||
public void testExpectDataObject() throws Exception {
|
public void testExpectDataObject() throws Exception {
|
||||||
|
|||||||
+6
@@ -151,6 +151,12 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi
|
|||||||
runTest("compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBetaWarning.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectDataObject.kt")
|
@TestMetadata("expectDataObject.kt")
|
||||||
public void testExpectDataObject() throws Exception {
|
public void testExpectDataObject() throws Exception {
|
||||||
|
|||||||
+2
-2
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.fir.analysis.checkers.declaration
|
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.LanguageFeature
|
||||||
|
import org.jetbrains.kotlin.config.areExpectActualClassesStable
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
@@ -18,7 +18,7 @@ import org.jetbrains.kotlin.fir.declarations.utils.isExpect
|
|||||||
object FirExpectActualClassifiersAreInBetaChecker : FirClassLikeChecker() {
|
object FirExpectActualClassifiersAreInBetaChecker : FirClassLikeChecker() {
|
||||||
override fun check(declaration: FirClassLikeDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirClassLikeDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (!context.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) return
|
if (!context.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) return
|
||||||
if (context.languageVersionSettings.getFlag(AnalysisFlags.muteExpectActualClassesWarning)) return
|
if (context.languageVersionSettings.areExpectActualClassesStable) return
|
||||||
|
|
||||||
if (declaration.isExpect || declaration.isActual) {
|
if (declaration.isExpect || declaration.isActual) {
|
||||||
reporter.reportOn(declaration.source, FirErrors.EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING, context)
|
reporter.reportOn(declaration.source, FirErrors.EXPECT_ACTUAL_CLASSIFIERS_ARE_IN_BETA_WARNING, context)
|
||||||
|
|||||||
+2
-2
@@ -5,8 +5,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.resolve.checkers
|
package org.jetbrains.kotlin.resolve.checkers
|
||||||
|
|
||||||
import org.jetbrains.kotlin.config.AnalysisFlags
|
|
||||||
import org.jetbrains.kotlin.config.LanguageFeature
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
|
import org.jetbrains.kotlin.config.areExpectActualClassesStable
|
||||||
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
import org.jetbrains.kotlin.descriptors.ClassDescriptor
|
||||||
import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters
|
import org.jetbrains.kotlin.descriptors.ClassifierDescriptorWithTypeParameters
|
||||||
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
import org.jetbrains.kotlin.descriptors.DeclarationDescriptor
|
||||||
@@ -20,7 +20,7 @@ import org.jetbrains.kotlin.psi.KtTypeAlias
|
|||||||
object ExpectActualClassifiersAreInBetaChecker : DeclarationChecker {
|
object ExpectActualClassifiersAreInBetaChecker : DeclarationChecker {
|
||||||
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
override fun check(declaration: KtDeclaration, descriptor: DeclarationDescriptor, context: DeclarationCheckerContext) {
|
||||||
if (!context.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) return
|
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
|
if (descriptor !is TypeAliasDescriptor && descriptor !is ClassDescriptor) return
|
||||||
check(declaration is KtClassOrObject || declaration is KtTypeAlias)
|
check(declaration is KtClassOrObject || declaration is KtTypeAlias)
|
||||||
|
|
||||||
|
|||||||
+51
@@ -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!!
|
||||||
Generated
+6
@@ -23518,6 +23518,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
|
|||||||
runTest("compiler/testData/diagnostics/tests/multiplatform/expectActualClassesAreInBetaWarning.kt");
|
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
|
@Test
|
||||||
@TestMetadata("expectDataObject.kt")
|
@TestMetadata("expectDataObject.kt")
|
||||||
public void testExpectDataObject() throws Exception {
|
public void testExpectDataObject() throws Exception {
|
||||||
|
|||||||
@@ -319,6 +319,8 @@ enum class LanguageFeature(
|
|||||||
|
|
||||||
// End of 2.* language features --------------------------------------------------
|
// End of 2.* language features --------------------------------------------------
|
||||||
|
|
||||||
|
ExpectActualClasses(sinceVersion = null), // KT-62885
|
||||||
|
|
||||||
// Disabled for indefinite time. See KT-53751
|
// Disabled for indefinite time. See KT-53751
|
||||||
IgnoreNullabilityForErasedValueParameters(sinceVersion = null, kind = BUG_FIX),
|
IgnoreNullabilityForErasedValueParameters(sinceVersion = null, kind = BUG_FIX),
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user