[FIR] Report UNSUPPORTED_FEATURE for expect/actual members if MPP is disabled
Always enable MultiPlatformProjects for K2MetadataCompilerArguments ^KT-57243 Fixed
This commit is contained in:
committed by
Space Team
parent
16ed06d4e9
commit
994c2229df
+4
@@ -868,8 +868,12 @@ abstract class CommonCompilerArguments : CommonToolArguments() {
|
||||
if (internalArguments.isNotEmpty()) {
|
||||
configureLanguageFeaturesFromInternalArgs(collector)
|
||||
}
|
||||
|
||||
configureExtraLanguageFeatures(this)
|
||||
}
|
||||
|
||||
protected open fun configureExtraLanguageFeatures(map: HashMap<LanguageFeature, LanguageFeature.State>) {}
|
||||
|
||||
private fun HashMap<LanguageFeature, LanguageFeature.State>.configureLanguageFeaturesFromInternalArgs(collector: MessageCollector) {
|
||||
val featuresThatForcePreReleaseBinaries = mutableListOf<LanguageFeature>()
|
||||
val disabledFeaturesFromUnsupportedVersions = mutableListOf<LanguageFeature>()
|
||||
|
||||
+6
@@ -16,6 +16,8 @@
|
||||
|
||||
package org.jetbrains.kotlin.cli.common.arguments
|
||||
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
|
||||
class K2MetadataCompilerArguments : CommonCompilerArguments() {
|
||||
companion object {
|
||||
@JvmStatic private val serialVersionUID = 0L
|
||||
@@ -80,4 +82,8 @@ class K2MetadataCompilerArguments : CommonCompilerArguments() {
|
||||
}
|
||||
|
||||
override fun copyOf(): Freezable = copyK2MetadataCompilerArguments(this, K2MetadataCompilerArguments())
|
||||
|
||||
override fun configureExtraLanguageFeatures(map: HashMap<LanguageFeature, LanguageFeature.State>) {
|
||||
map[LanguageFeature.MultiPlatformProjects] = LanguageFeature.State.ENABLED
|
||||
}
|
||||
}
|
||||
|
||||
Vendored
+2
@@ -1,3 +1,5 @@
|
||||
// LANGUAGE: +MultiPlatformProjects
|
||||
|
||||
object O {
|
||||
fun foo() {}
|
||||
}
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// LANGUAGE: +MultiPlatformProjects
|
||||
|
||||
// FILE: B.kt
|
||||
|
||||
package b.d
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
// LANGUAGE: +MultiPlatformProjects
|
||||
|
||||
open class Base(v: String)
|
||||
|
||||
expect class Derived(v: String) : Base
|
||||
|
||||
+13
-1
@@ -10,6 +10,7 @@ import org.jetbrains.kotlin.KtSourceElement
|
||||
import org.jetbrains.kotlin.config.LanguageFeature
|
||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||
import org.jetbrains.kotlin.diagnostics.SourceElementPositioningStrategies
|
||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||
import org.jetbrains.kotlin.fir.FirSession
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||
@@ -35,8 +36,19 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
||||
@Suppress("DuplicatedCode")
|
||||
object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
|
||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (!context.session.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) return
|
||||
if (declaration !is FirMemberDeclaration) return
|
||||
if (!context.session.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) {
|
||||
if ((declaration.isExpect || declaration.isActual) && context.containingDeclarations.lastOrNull() is FirFile) {
|
||||
reporter.reportOn(
|
||||
declaration.source,
|
||||
FirErrors.UNSUPPORTED_FEATURE,
|
||||
LanguageFeature.MultiPlatformProjects to context.session.languageVersionSettings,
|
||||
context,
|
||||
positioningStrategy = SourceElementPositioningStrategies.EXPECT_ACTUAL_MODIFIER
|
||||
)
|
||||
}
|
||||
return
|
||||
}
|
||||
if (declaration.isExpect) {
|
||||
checkExpectDeclarationModifiers(declaration, context, reporter)
|
||||
}
|
||||
|
||||
@@ -5,7 +5,6 @@ $TESTDATA_DIR$/../jvm/hmpp/src/c.kt
|
||||
$TEMP_DIR$
|
||||
-language-version
|
||||
2.0
|
||||
-XXLanguage\:+MultiPlatformProjects
|
||||
-Xfragments=a,b,c
|
||||
-Xfragment-sources=a\:$TESTDATA_DIR$/../jvm/hmpp/src/a.kt
|
||||
-Xfragment-sources=b\:$TESTDATA_DIR$/../jvm/hmpp/src/b.kt
|
||||
|
||||
@@ -1,12 +1,3 @@
|
||||
warning: ATTENTION!
|
||||
This build uses unsafe internal compiler arguments:
|
||||
|
||||
-XXLanguage:+MultiPlatformProjects
|
||||
|
||||
This mode is not recommended for production use,
|
||||
as no stability/compatibility guarantees are given on
|
||||
compiler or generated code. Use it at your own risk!
|
||||
|
||||
warning: language version 2.0 is experimental, there are no backwards compatibility guarantees for new language and library features
|
||||
error: HMPP module structure should not be passed during metadata compilation. Please remove `-Xfragments` and related flags
|
||||
COMPILATION_ERROR
|
||||
|
||||
@@ -3,6 +3,11 @@ $TESTDATA_DIR$/inheritorOfExpectSealedClass/common-2.kt
|
||||
$TESTDATA_DIR$/inheritorOfExpectSealedClass/common-3.kt
|
||||
-d
|
||||
$TEMP_DIR$
|
||||
-Xcommon-sources=$TESTDATA_DIR$/inheritorOfExpectSealedClass/common-1.kt,$TESTDATA_DIR$/inheritorOfExpectSealedClass/common-2.kt
|
||||
-language-version
|
||||
2.0
|
||||
2.0
|
||||
-Xfragments=a,b,c
|
||||
-Xfragment-sources=a\:$TESTDATA_DIR$/inheritorOfExpectSealedClass/common-1.kt
|
||||
-Xfragment-sources=b\:$TESTDATA_DIR$/inheritorOfExpectSealedClass/common-2.kt
|
||||
-Xfragment-sources=c\:$TESTDATA_DIR$/inheritorOfExpectSealedClass/common-3.kt
|
||||
-Xfragment-refines=b\:a
|
||||
-Xfragment-refines=c\:b
|
||||
@@ -1,2 +1,3 @@
|
||||
warning: language version 2.0 is experimental, there are no backwards compatibility guarantees for new language and library features
|
||||
OK
|
||||
error: HMPP module structure should not be passed during metadata compilation. Please remove `-Xfragments` and related flags
|
||||
COMPILATION_ERROR
|
||||
|
||||
-7
@@ -1,7 +0,0 @@
|
||||
expect fun foo1()
|
||||
expect val bar1 = <!EXPECTED_PROPERTY_INITIALIZER!>42<!>
|
||||
expect class Baz1
|
||||
|
||||
actual fun foo2() = 42
|
||||
<!MUST_BE_INITIALIZED!>actual val bar2: Int<!>
|
||||
actual interface Baz2
|
||||
+6
-1
@@ -1,6 +1,11 @@
|
||||
// FIR_IDENTICAL
|
||||
<!UNSUPPORTED_FEATURE!>expect<!> fun foo1()
|
||||
<!UNSUPPORTED_FEATURE!>expect<!> val bar1 = <!EXPECTED_PROPERTY_INITIALIZER!>42<!>
|
||||
<!UNSUPPORTED_FEATURE!>expect<!> class Baz1
|
||||
<!UNSUPPORTED_FEATURE!>expect<!> class Baz1 {
|
||||
fun foo()
|
||||
|
||||
class Baz12
|
||||
}
|
||||
|
||||
<!UNSUPPORTED_FEATURE!>actual<!> fun foo2() = 42
|
||||
<!MUST_BE_INITIALIZED!><!UNSUPPORTED_FEATURE!>actual<!> val bar2: Int<!>
|
||||
|
||||
Reference in New Issue
Block a user