diff --git a/compiler/frontend/src/org/jetbrains/kotlin/psi/addRemoveModifier.kt b/compiler/frontend/src/org/jetbrains/kotlin/psi/addRemoveModifier.kt index daad4cd1044..b2b013c03f5 100644 --- a/compiler/frontend/src/org/jetbrains/kotlin/psi/addRemoveModifier.kt +++ b/compiler/frontend/src/org/jetbrains/kotlin/psi/addRemoveModifier.kt @@ -83,10 +83,11 @@ internal fun addModifier(modifierList: KtModifierList, modifier: KtModifierKeywo } return } - if (modifierToReplace != null) { + if (modifierToReplace != null && modifierList.firstChild == modifierList.lastChild) { modifierToReplace.replace(newModifier) } else { + modifierToReplace?.delete() val newModifierOrder = MODIFIERS_ORDER.indexOf(modifier) fun placeAfter(child: PsiElement): Boolean { diff --git a/idea/testData/intentions/changeVisibility/private/hasModifier3.kt.after b/idea/testData/intentions/changeVisibility/private/hasModifier3.kt.after index 040074d06f0..67ef26c5e45 100644 --- a/idea/testData/intentions/changeVisibility/private/hasModifier3.kt.after +++ b/idea/testData/intentions/changeVisibility/private/hasModifier3.kt.after @@ -1 +1 @@ -annotation private class Ann \ No newline at end of file +private annotation class Ann \ No newline at end of file diff --git a/idea/testData/intentions/changeVisibility/private/hasModifier4.kt.after b/idea/testData/intentions/changeVisibility/private/hasModifier4.kt.after index ed0d8a50e7d..67ef26c5e45 100644 --- a/idea/testData/intentions/changeVisibility/private/hasModifier4.kt.after +++ b/idea/testData/intentions/changeVisibility/private/hasModifier4.kt.after @@ -1 +1 @@ -annotation private class Ann \ No newline at end of file +private annotation class Ann \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/orderHeader/header/header.kt b/idea/testData/multiModuleQuickFix/orderHeader/header/header.kt new file mode 100644 index 00000000000..4244948c2cf --- /dev/null +++ b/idea/testData/multiModuleQuickFix/orderHeader/header/header.kt @@ -0,0 +1,3 @@ +// "Replace with 'expect'" "true" + +public open header class My \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/orderHeader/header/header.kt.after b/idea/testData/multiModuleQuickFix/orderHeader/header/header.kt.after new file mode 100644 index 00000000000..bed10b818b6 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/orderHeader/header/header.kt.after @@ -0,0 +1,3 @@ +// "Replace with 'expect'" "true" + +public expect open class My \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/orderHeader/jvm/My.kt b/idea/testData/multiModuleQuickFix/orderHeader/jvm/My.kt new file mode 100644 index 00000000000..5d2e6b0aa48 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/orderHeader/jvm/My.kt @@ -0,0 +1 @@ +actual class My \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/orderHeader/jvm/My.kt.after b/idea/testData/multiModuleQuickFix/orderHeader/jvm/My.kt.after new file mode 100644 index 00000000000..5d2e6b0aa48 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/orderHeader/jvm/My.kt.after @@ -0,0 +1 @@ +actual class My \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/orderImpl/header/header.kt b/idea/testData/multiModuleQuickFix/orderImpl/header/header.kt new file mode 100644 index 00000000000..49c7892c751 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/orderImpl/header/header.kt @@ -0,0 +1 @@ +header fun foo(n: Int): Int \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/orderImpl/header/header.kt.after b/idea/testData/multiModuleQuickFix/orderImpl/header/header.kt.after new file mode 100644 index 00000000000..49c7892c751 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/orderImpl/header/header.kt.after @@ -0,0 +1 @@ +header fun foo(n: Int): Int \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/orderImpl/jvm/foo.kt b/idea/testData/multiModuleQuickFix/orderImpl/jvm/foo.kt new file mode 100644 index 00000000000..3534d38efd8 --- /dev/null +++ b/idea/testData/multiModuleQuickFix/orderImpl/jvm/foo.kt @@ -0,0 +1,3 @@ +// "Replace with 'actual'" "true" + +impl public tailrec fun foo(n: Int): Int = if (n < 2) n else foo(n - 1) \ No newline at end of file diff --git a/idea/testData/multiModuleQuickFix/orderImpl/jvm/foo.kt.after b/idea/testData/multiModuleQuickFix/orderImpl/jvm/foo.kt.after new file mode 100644 index 00000000000..b6e390d089c --- /dev/null +++ b/idea/testData/multiModuleQuickFix/orderImpl/jvm/foo.kt.after @@ -0,0 +1,3 @@ +// "Replace with 'actual'" "true" + +public actual tailrec fun foo(n: Int): Int = if (n < 2) n else foo(n - 1) \ No newline at end of file diff --git a/idea/testData/quickfix/override/overridingDelegatedMethod.kt.after b/idea/testData/quickfix/override/overridingDelegatedMethod.kt.after index f3cb4cb20db..0e1e9878075 100644 --- a/idea/testData/quickfix/override/overridingDelegatedMethod.kt.after +++ b/idea/testData/quickfix/override/overridingDelegatedMethod.kt.after @@ -4,7 +4,7 @@ interface X { } interface XX : X { - override open fun foo() { + open override fun foo() { } } diff --git a/idea/testData/quickfix/override/overridingFakeOverride.kt.after b/idea/testData/quickfix/override/overridingFakeOverride.kt.after index fe57956f6ce..d0ac3f68b39 100644 --- a/idea/testData/quickfix/override/overridingFakeOverride.kt.after +++ b/idea/testData/quickfix/override/overridingFakeOverride.kt.after @@ -4,7 +4,7 @@ interface X { } interface XX : X { - override open fun foo() { + open override fun foo() { } } diff --git a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt index cb9d7d4fcba..87c55a40cbc 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/quickfix/QuickFixMultiModuleTest.kt @@ -94,6 +94,16 @@ class QuickFixMultiModuleTest : AbstractQuickFixMultiModuleTest() { doMultiPlatformTest() } + @Test + fun testOrderHeader() { + doMultiPlatformTest() + } + + @Test + fun testOrderImpl() { + doMultiPlatformTest() + } + @Test fun testPackage() { doMultiPlatformTest()