KMP: Put "prohbit actual typealias if expect has default params" under the flag

^KT-61668 Fixed

Review: https://jetbrains.team/p/kt/reviews/12062/timeline
This commit is contained in:
Nikita Bobko
2023-09-05 16:53:22 +02:00
committed by Space Team
parent 6868c95263
commit 141bc9cac9
6 changed files with 40 additions and 3 deletions
@@ -999,6 +999,12 @@ public class FirOldFrontendMPPDiagnosticsWithLightTreeTestGenerated extends Abst
public void testMethodDefaultArgsViaActualTypealias() throws Exception { public void testMethodDefaultArgsViaActualTypealias() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/defaultArguments/methodDefaultArgsViaActualTypealias.kt"); runTest("compiler/testData/diagnostics/tests/multiplatform/defaultArguments/methodDefaultArgsViaActualTypealias.kt");
} }
@Test
@TestMetadata("methodDefaultArgsViaActualTypealias_oldLanguageVersion.kt")
public void testMethodDefaultArgsViaActualTypealias_oldLanguageVersion() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/defaultArguments/methodDefaultArgsViaActualTypealias_oldLanguageVersion.kt");
}
} }
@Nested @Nested
@@ -999,6 +999,12 @@ public class FirOldFrontendMPPDiagnosticsWithPsiTestGenerated extends AbstractFi
public void testMethodDefaultArgsViaActualTypealias() throws Exception { public void testMethodDefaultArgsViaActualTypealias() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/defaultArguments/methodDefaultArgsViaActualTypealias.kt"); runTest("compiler/testData/diagnostics/tests/multiplatform/defaultArguments/methodDefaultArgsViaActualTypealias.kt");
} }
@Test
@TestMetadata("methodDefaultArgsViaActualTypealias_oldLanguageVersion.kt")
public void testMethodDefaultArgsViaActualTypealias_oldLanguageVersion() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/defaultArguments/methodDefaultArgsViaActualTypealias_oldLanguageVersion.kt");
}
} }
@Nested @Nested
@@ -231,6 +231,7 @@ object FirExpectActualDeclarationChecker : FirBasicDeclarationChecker() {
context: CheckerContext, context: CheckerContext,
reporter: DiagnosticReporter, reporter: DiagnosticReporter,
) { ) {
if (!context.languageVersionSettings.supportsFeature(LanguageFeature.MultiplatformRestrictions)) return
if (expectSymbol !is FirClassSymbol || if (expectSymbol !is FirClassSymbol ||
actualSymbol !is FirTypeAliasSymbol || actualSymbol !is FirTypeAliasSymbol ||
expectSymbol.classKind == ClassKind.ANNOTATION_CLASS expectSymbol.classKind == ClassKind.ANNOTATION_CLASS
@@ -241,8 +241,9 @@ class ExpectedActualDeclarationChecker(
private fun checkIfExpectHasDefaultArgumentsAndActualizedWithTypealias( private fun checkIfExpectHasDefaultArgumentsAndActualizedWithTypealias(
expectDescriptor: MemberDescriptor, expectDescriptor: MemberDescriptor,
actualDeclaration: KtNamedDeclaration, actualDeclaration: KtNamedDeclaration,
trace: BindingTrace, context: DeclarationCheckerContext,
) { ) {
if (!context.languageVersionSettings.supportsFeature(LanguageFeature.MultiplatformRestrictions)) return
if (expectDescriptor !is ClassDescriptor || if (expectDescriptor !is ClassDescriptor ||
actualDeclaration !is KtTypeAlias || actualDeclaration !is KtTypeAlias ||
expectDescriptor.kind == ClassKind.ANNOTATION_CLASS expectDescriptor.kind == ClassKind.ANNOTATION_CLASS
@@ -257,7 +258,7 @@ class ExpectedActualDeclarationChecker(
if (membersWithDefaultValueParameters.isEmpty()) return if (membersWithDefaultValueParameters.isEmpty()) return
trace.report( context.trace.report(
Errors.DEFAULT_ARGUMENTS_IN_EXPECT_WITH_ACTUAL_TYPEALIAS.on( Errors.DEFAULT_ARGUMENTS_IN_EXPECT_WITH_ACTUAL_TYPEALIAS.on(
actualDeclaration, actualDeclaration,
expectDescriptor, expectDescriptor,
@@ -381,7 +382,7 @@ class ExpectedActualDeclarationChecker(
// We want to report errors even if a candidate is incompatible, but it's single // We want to report errors even if a candidate is incompatible, but it's single
val expectSingleCandidate = (compatibility[Compatible] ?: compatibility.values.singleOrNull())?.singleOrNull() val expectSingleCandidate = (compatibility[Compatible] ?: compatibility.values.singleOrNull())?.singleOrNull()
if (expectSingleCandidate != null) { if (expectSingleCandidate != null) {
checkIfExpectHasDefaultArgumentsAndActualizedWithTypealias(expectSingleCandidate, reportOn, trace) checkIfExpectHasDefaultArgumentsAndActualizedWithTypealias(expectSingleCandidate, reportOn, context)
checkAnnotationsMatch(expectSingleCandidate, descriptor, reportOn, context) checkAnnotationsMatch(expectSingleCandidate, descriptor, reportOn, context)
} }
} }
@@ -0,0 +1,17 @@
// FIR_IDENTICAL
// !DIAGNOSTICS: -ACTUAL_WITHOUT_EXPECT
// LANGUAGE: -MultiplatformRestrictions
// MODULE: m1-common
// FILE: common.kt
expect class A {
fun foo(p: String = "common")
}
// MODULE: m2-jvm()()(m1-common)
// FILE: jvm.kt
class AImpl {
fun foo(p: String) {}
}
actual typealias A = AImpl
@@ -23994,6 +23994,12 @@ public class DiagnosticTestGenerated extends AbstractDiagnosticTest {
public void testMethodDefaultArgsViaActualTypealias() throws Exception { public void testMethodDefaultArgsViaActualTypealias() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/defaultArguments/methodDefaultArgsViaActualTypealias.kt"); runTest("compiler/testData/diagnostics/tests/multiplatform/defaultArguments/methodDefaultArgsViaActualTypealias.kt");
} }
@Test
@TestMetadata("methodDefaultArgsViaActualTypealias_oldLanguageVersion.kt")
public void testMethodDefaultArgsViaActualTypealias_oldLanguageVersion() throws Exception {
runTest("compiler/testData/diagnostics/tests/multiplatform/defaultArguments/methodDefaultArgsViaActualTypealias_oldLanguageVersion.kt");
}
} }
@Nested @Nested