Migration: make header/impl/expect/actual contradictory to each other

This commit is contained in:
Mikhail Glukhikh
2017-09-15 13:45:38 +03:00
parent fc4ff3b760
commit fcc84d00c3
7 changed files with 41 additions and 7 deletions
@@ -129,10 +129,10 @@ private val MODIFIERS_TO_REPLACE = mapOf(
PROTECTED_KEYWORD to listOf(PUBLIC_KEYWORD, PRIVATE_KEYWORD, INTERNAL_KEYWORD),
PRIVATE_KEYWORD to listOf(PUBLIC_KEYWORD, PROTECTED_KEYWORD, INTERNAL_KEYWORD),
INTERNAL_KEYWORD to listOf(PUBLIC_KEYWORD, PROTECTED_KEYWORD, PRIVATE_KEYWORD),
HEADER_KEYWORD to listOf(IMPL_KEYWORD, ACTUAL_KEYWORD),
IMPL_KEYWORD to listOf(HEADER_KEYWORD, EXPECT_KEYWORD),
EXPECT_KEYWORD to listOf(IMPL_KEYWORD, ACTUAL_KEYWORD),
ACTUAL_KEYWORD to listOf(HEADER_KEYWORD, EXPECT_KEYWORD)
HEADER_KEYWORD to listOf(IMPL_KEYWORD, ACTUAL_KEYWORD, EXPECT_KEYWORD),
IMPL_KEYWORD to listOf(HEADER_KEYWORD, EXPECT_KEYWORD, ACTUAL_KEYWORD),
EXPECT_KEYWORD to listOf(IMPL_KEYWORD, ACTUAL_KEYWORD, HEADER_KEYWORD),
ACTUAL_KEYWORD to listOf(HEADER_KEYWORD, EXPECT_KEYWORD, IMPL_KEYWORD)
)
private val MODIFIERS_ORDER = listOf(PUBLIC_KEYWORD, PROTECTED_KEYWORD, PRIVATE_KEYWORD, INTERNAL_KEYWORD,
@@ -189,9 +189,12 @@ object ModifierCheckerCore {
// (see the KEEP https://github.com/Kotlin/KEEP/blob/master/proposals/sealed-class-inheritance.md)
result += incompatibilityRegister(SEALED_KEYWORD, INNER_KEYWORD)
// lateinit is incompatible with header
// lateinit is incompatible with header / expect
result += incompatibilityRegister(LATEINIT_KEYWORD, HEADER_KEYWORD, EXPECT_KEYWORD)
// header / expect / impl / actual are all incompatible
result += incompatibilityRegister(HEADER_KEYWORD, EXPECT_KEYWORD, IMPL_KEYWORD, ACTUAL_KEYWORD)
return result
}
@@ -0,0 +1,13 @@
// !LANGUAGE: +MultiPlatformProjects
<!DEPRECATED_MODIFIER_FOR_TARGET, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>impl<!> class <!NO_ACTUAL_FOR_EXPECT!>First<!>
<!DEPRECATED_MODIFIER_FOR_TARGET, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>expect<!> class <!NO_ACTUAL_FOR_EXPECT!>Second<!>
<!DEPRECATED_MODIFIER_FOR_TARGET, INCOMPATIBLE_MODIFIERS!>header<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class <!NO_ACTUAL_FOR_EXPECT!>Third<!>
<!DEPRECATED_MODIFIER_FOR_TARGET, INCOMPATIBLE_MODIFIERS!>impl<!> <!INCOMPATIBLE_MODIFIERS!>expect<!> class <!NO_ACTUAL_FOR_EXPECT!>Fourth<!>
<!DEPRECATED_MODIFIER_FOR_TARGET, INCOMPATIBLE_MODIFIERS!>impl<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class <!ACTUAL_WITHOUT_EXPECT!>Fifth<!>
<!INCOMPATIBLE_MODIFIERS!>expect<!> <!INCOMPATIBLE_MODIFIERS!>actual<!> class <!NO_ACTUAL_FOR_EXPECT!>Sixth<!>
@@ -0,0 +1,8 @@
package
public final actual class Fifth {
public constructor Fifth()
public open override /*1*/ /*fake_override*/ fun equals(/*0*/ other: kotlin.Any?): kotlin.Boolean
public open override /*1*/ /*fake_override*/ fun hashCode(): kotlin.Int
public open override /*1*/ /*fake_override*/ fun toString(): kotlin.String
}
@@ -13843,6 +13843,12 @@ public class DiagnosticsTestGenerated extends AbstractDiagnosticsTest {
doTest(fileName);
}
@TestMetadata("incompatibles.kt")
public void testIncompatibles() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/multiplatform/incompatibles.kt");
doTest(fileName);
}
@TestMetadata("modifierApplicability.kt")
public void testModifierApplicability() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.kt");
@@ -13843,6 +13843,12 @@ public class DiagnosticsUsingJavacTestGenerated extends AbstractDiagnosticsUsing
doTest(fileName);
}
@TestMetadata("incompatibles.kt")
public void testIncompatibles() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/multiplatform/incompatibles.kt");
doTest(fileName);
}
@TestMetadata("modifierApplicability.kt")
public void testModifierApplicability() throws Exception {
String fileName = KotlinTestUtils.navigationMetadata("compiler/testData/diagnostics/tests/multiplatform/modifierApplicability.kt");
@@ -47,11 +47,9 @@ class ReplaceModifierFix(
when (modifier) {
KtTokens.HEADER_KEYWORD -> {
element.addModifier(KtTokens.EXPECT_KEYWORD)
element.removeModifier(KtTokens.HEADER_KEYWORD)
}
KtTokens.IMPL_KEYWORD -> {
element.addModifier(KtTokens.ACTUAL_KEYWORD)
element.removeModifier(KtTokens.IMPL_KEYWORD)
}
}
}