[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()) {
|
if (internalArguments.isNotEmpty()) {
|
||||||
configureLanguageFeaturesFromInternalArgs(collector)
|
configureLanguageFeaturesFromInternalArgs(collector)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
configureExtraLanguageFeatures(this)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected open fun configureExtraLanguageFeatures(map: HashMap<LanguageFeature, LanguageFeature.State>) {}
|
||||||
|
|
||||||
private fun HashMap<LanguageFeature, LanguageFeature.State>.configureLanguageFeaturesFromInternalArgs(collector: MessageCollector) {
|
private fun HashMap<LanguageFeature, LanguageFeature.State>.configureLanguageFeaturesFromInternalArgs(collector: MessageCollector) {
|
||||||
val featuresThatForcePreReleaseBinaries = mutableListOf<LanguageFeature>()
|
val featuresThatForcePreReleaseBinaries = mutableListOf<LanguageFeature>()
|
||||||
val disabledFeaturesFromUnsupportedVersions = mutableListOf<LanguageFeature>()
|
val disabledFeaturesFromUnsupportedVersions = mutableListOf<LanguageFeature>()
|
||||||
|
|||||||
+6
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package org.jetbrains.kotlin.cli.common.arguments
|
package org.jetbrains.kotlin.cli.common.arguments
|
||||||
|
|
||||||
|
import org.jetbrains.kotlin.config.LanguageFeature
|
||||||
|
|
||||||
class K2MetadataCompilerArguments : CommonCompilerArguments() {
|
class K2MetadataCompilerArguments : CommonCompilerArguments() {
|
||||||
companion object {
|
companion object {
|
||||||
@JvmStatic private val serialVersionUID = 0L
|
@JvmStatic private val serialVersionUID = 0L
|
||||||
@@ -80,4 +82,8 @@ class K2MetadataCompilerArguments : CommonCompilerArguments() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
override fun copyOf(): Freezable = copyK2MetadataCompilerArguments(this, K2MetadataCompilerArguments())
|
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 {
|
object O {
|
||||||
fun foo() {}
|
fun foo() {}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// LANGUAGE: +MultiPlatformProjects
|
||||||
|
|
||||||
// FILE: B.kt
|
// FILE: B.kt
|
||||||
|
|
||||||
package b.d
|
package b.d
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
// LANGUAGE: +MultiPlatformProjects
|
||||||
|
|
||||||
open class Base(v: String)
|
open class Base(v: String)
|
||||||
|
|
||||||
expect class Derived(v: String) : Base
|
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.config.LanguageFeature
|
||||||
import org.jetbrains.kotlin.descriptors.ClassKind
|
import org.jetbrains.kotlin.descriptors.ClassKind
|
||||||
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
import org.jetbrains.kotlin.diagnostics.DiagnosticReporter
|
||||||
|
import org.jetbrains.kotlin.diagnostics.SourceElementPositioningStrategies
|
||||||
import org.jetbrains.kotlin.diagnostics.reportOn
|
import org.jetbrains.kotlin.diagnostics.reportOn
|
||||||
import org.jetbrains.kotlin.fir.FirSession
|
import org.jetbrains.kotlin.fir.FirSession
|
||||||
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
import org.jetbrains.kotlin.fir.analysis.checkers.context.CheckerContext
|
||||||
@@ -35,8 +36,19 @@ import org.jetbrains.kotlin.utils.addToStdlib.firstIsInstanceOrNull
|
|||||||
@Suppress("DuplicatedCode")
|
@Suppress("DuplicatedCode")
|
||||||
object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
|
object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
|
||||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||||
if (!context.session.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) return
|
|
||||||
if (declaration !is FirMemberDeclaration) 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) {
|
if (declaration.isExpect) {
|
||||||
checkExpectDeclarationModifiers(declaration, context, reporter)
|
checkExpectDeclarationModifiers(declaration, context, reporter)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -5,7 +5,6 @@ $TESTDATA_DIR$/../jvm/hmpp/src/c.kt
|
|||||||
$TEMP_DIR$
|
$TEMP_DIR$
|
||||||
-language-version
|
-language-version
|
||||||
2.0
|
2.0
|
||||||
-XXLanguage\:+MultiPlatformProjects
|
|
||||||
-Xfragments=a,b,c
|
-Xfragments=a,b,c
|
||||||
-Xfragment-sources=a\:$TESTDATA_DIR$/../jvm/hmpp/src/a.kt
|
-Xfragment-sources=a\:$TESTDATA_DIR$/../jvm/hmpp/src/a.kt
|
||||||
-Xfragment-sources=b\:$TESTDATA_DIR$/../jvm/hmpp/src/b.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
|
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
|
error: HMPP module structure should not be passed during metadata compilation. Please remove `-Xfragments` and related flags
|
||||||
COMPILATION_ERROR
|
COMPILATION_ERROR
|
||||||
|
|||||||
@@ -3,6 +3,11 @@ $TESTDATA_DIR$/inheritorOfExpectSealedClass/common-2.kt
|
|||||||
$TESTDATA_DIR$/inheritorOfExpectSealedClass/common-3.kt
|
$TESTDATA_DIR$/inheritorOfExpectSealedClass/common-3.kt
|
||||||
-d
|
-d
|
||||||
$TEMP_DIR$
|
$TEMP_DIR$
|
||||||
-Xcommon-sources=$TESTDATA_DIR$/inheritorOfExpectSealedClass/common-1.kt,$TESTDATA_DIR$/inheritorOfExpectSealedClass/common-2.kt
|
|
||||||
-language-version
|
-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
|
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<!> fun foo1()
|
||||||
<!UNSUPPORTED_FEATURE!>expect<!> val bar1 = <!EXPECTED_PROPERTY_INITIALIZER!>42<!>
|
<!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
|
<!UNSUPPORTED_FEATURE!>actual<!> fun foo2() = 42
|
||||||
<!MUST_BE_INITIALIZED!><!UNSUPPORTED_FEATURE!>actual<!> val bar2: Int<!>
|
<!MUST_BE_INITIALIZED!><!UNSUPPORTED_FEATURE!>actual<!> val bar2: Int<!>
|
||||||
|
|||||||
Reference in New Issue
Block a user