Emit MultiPlatformProjects diagnostic on all declarations
where expect/actual modifier is present ^KT-31281
This commit is contained in:
committed by
Space Team
parent
341f61428b
commit
792b6482c0
+11
-1
@@ -13,6 +13,7 @@ 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
|
||||
import org.jetbrains.kotlin.fir.analysis.checkers.getModifierList
|
||||
import org.jetbrains.kotlin.fir.analysis.diagnostics.FirErrors
|
||||
import org.jetbrains.kotlin.fir.declarations.*
|
||||
import org.jetbrains.kotlin.fir.declarations.utils.isActual
|
||||
@@ -26,6 +27,9 @@ import org.jetbrains.kotlin.fir.scopes.impl.declaredMemberScope
|
||||
import org.jetbrains.kotlin.fir.symbols.FirBasedSymbol
|
||||
import org.jetbrains.kotlin.fir.symbols.SymbolInternals
|
||||
import org.jetbrains.kotlin.fir.symbols.impl.*
|
||||
import org.jetbrains.kotlin.fir.types.coneType
|
||||
import org.jetbrains.kotlin.fir.types.toSymbol
|
||||
import org.jetbrains.kotlin.lexer.KtTokens
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility
|
||||
import org.jetbrains.kotlin.resolve.multiplatform.ExpectActualCompatibility.*
|
||||
|
||||
@@ -34,7 +38,7 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
|
||||
override fun check(declaration: FirDeclaration, context: CheckerContext, reporter: DiagnosticReporter) {
|
||||
if (declaration !is FirMemberDeclaration) return
|
||||
if (!context.session.languageVersionSettings.supportsFeature(LanguageFeature.MultiPlatformProjects)) {
|
||||
if ((declaration.isExpect || declaration.isActual) && context.containingDeclarations.lastOrNull() is FirFile) {
|
||||
if ((declaration.isExpect || declaration.isActual) && containsExpectOrActualModifier(declaration)) {
|
||||
reporter.reportOn(
|
||||
declaration.source,
|
||||
FirErrors.UNSUPPORTED_FEATURE,
|
||||
@@ -53,6 +57,12 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
|
||||
}
|
||||
}
|
||||
|
||||
private fun containsExpectOrActualModifier(declaration: FirMemberDeclaration): Boolean {
|
||||
return declaration.source.getModifierList()?.let { modifiers ->
|
||||
KtTokens.EXPECT_KEYWORD in modifiers || KtTokens.ACTUAL_KEYWORD in modifiers
|
||||
} ?: false
|
||||
}
|
||||
|
||||
private fun checkExpectDeclarationModifiers(
|
||||
declaration: FirMemberDeclaration,
|
||||
context: CheckerContext,
|
||||
|
||||
+5
@@ -10,3 +10,8 @@
|
||||
<!UNSUPPORTED_FEATURE!>actual<!> fun foo2() = 42
|
||||
<!MUST_BE_INITIALIZED!><!UNSUPPORTED_FEATURE!>actual<!> val bar2: Int<!>
|
||||
<!UNSUPPORTED_FEATURE!>actual<!> interface Baz2
|
||||
|
||||
<!UNSUPPORTED_FEATURE!>actual<!> class Baz1 {
|
||||
<!UNSUPPORTED_FEATURE!>actual<!> fun foo() {
|
||||
}
|
||||
}
|
||||
+8
@@ -3,6 +3,14 @@ package
|
||||
public actual val bar2: kotlin.Int
|
||||
public actual fun foo2(): kotlin.Int
|
||||
|
||||
public final actual class Baz1 {
|
||||
public constructor Baz1()
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public final actual fun foo(): kotlin.Unit
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
|
||||
}
|
||||
|
||||
public actual interface Baz2 {
|
||||
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
|
||||
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
|
||||
|
||||
Reference in New Issue
Block a user