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:
+6
@@ -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
|
||||||
|
|||||||
+6
@@ -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
|
||||||
|
|||||||
+1
@@ -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
|
||||||
|
|||||||
+4
-3
@@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+17
@@ -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
|
||||||
Generated
+6
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user