From 07207949babea8c84798178ff522ec14fa5e0da2 Mon Sep 17 00:00:00 2001 From: Valentin Kipyatkov Date: Thu, 5 May 2016 12:53:09 +0300 Subject: [PATCH] Support of KT-11255 Support Move Element Left/Right actions for Kotlin (except for enum entries) #KT-11255 Fixed --- .../kotlin/generators/tests/GenerateTests.kt | 5 + idea/src/META-INF/plugin.xml | 2 + .../codeInsight/KotlinMoveLeftRightHandler.kt | 37 ++++++ .../moveLeftRight/annotationParams.kt | 4 + .../moveLeftRight/annotationParams.kt.after | 4 + .../codeInsight/moveLeftRight/basesList.kt | 6 + .../moveLeftRight/basesList.kt.after | 6 + .../codeInsight/moveLeftRight/callArgs1.kt | 4 + .../moveLeftRight/callArgs1.kt.after | 4 + .../codeInsight/moveLeftRight/callArgs2.kt | 4 + .../moveLeftRight/callArgs2.kt.after | 4 + .../codeInsight/moveLeftRight/callArgs3.kt | 4 + .../moveLeftRight/callArgs3.kt.after | 4 + .../codeInsight/moveLeftRight/callArgs4.kt | 4 + .../moveLeftRight/callArgs4.kt.after | 4 + .../codeInsight/moveLeftRight/callArgs5.kt | 4 + .../moveLeftRight/callArgs5.kt.after | 4 + .../moveLeftRight/enumMembers1.kt.after | 4 + .../moveLeftRight/enumMembers1.kt.todo | 4 + .../moveLeftRight/enumMembers2.kt.after | 4 + .../moveLeftRight/enumMembers2.kt.todo | 4 + .../moveLeftRight/enumMembers3.kt.after | 4 + .../moveLeftRight/enumMembers3.kt.todo | 4 + .../moveLeftRight/enumMembers4.kt.after | 6 + .../moveLeftRight/enumMembers4.kt.todo | 6 + .../moveLeftRight/enumMembers5.kt.after | 8 ++ .../moveLeftRight/enumMembers5.kt.todo | 8 ++ .../codeInsight/moveLeftRight/funParams1.kt | 5 + .../moveLeftRight/funParams1.kt.after | 5 + .../codeInsight/moveLeftRight/funParams2.kt | 5 + .../moveLeftRight/funParams2.kt.after | 5 + .../codeInsight/moveLeftRight/funParams3.kt | 5 + .../moveLeftRight/funParams3.kt.after | 5 + .../codeInsight/moveLeftRight/funParams4.kt | 5 + .../moveLeftRight/funParams4.kt.after | 5 + .../codeInsight/moveLeftRight/indexArgs.kt | 4 + .../moveLeftRight/indexArgs.kt.after | 4 + .../codeInsight/moveLeftRight/lambdaParams.kt | 4 + .../moveLeftRight/lambdaParams.kt.after | 4 + .../codeInsight/moveLeftRight/typeArgs.kt | 3 + .../moveLeftRight/typeArgs.kt.after | 3 + .../moveUpDown/AbstractCodeMoverTest.kt | 44 ++++--- .../MoveLeftRightTestGenerated.java | 121 ++++++++++++++++++ 43 files changed, 367 insertions(+), 16 deletions(-) create mode 100644 idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinMoveLeftRightHandler.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/annotationParams.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/annotationParams.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/basesList.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/basesList.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/callArgs1.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/callArgs1.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/callArgs2.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/callArgs2.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/callArgs3.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/callArgs3.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/callArgs4.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/callArgs4.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/callArgs5.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/callArgs5.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/enumMembers1.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/enumMembers1.kt.todo create mode 100644 idea/testData/codeInsight/moveLeftRight/enumMembers2.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/enumMembers2.kt.todo create mode 100644 idea/testData/codeInsight/moveLeftRight/enumMembers3.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/enumMembers3.kt.todo create mode 100644 idea/testData/codeInsight/moveLeftRight/enumMembers4.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/enumMembers4.kt.todo create mode 100644 idea/testData/codeInsight/moveLeftRight/enumMembers5.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/enumMembers5.kt.todo create mode 100644 idea/testData/codeInsight/moveLeftRight/funParams1.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/funParams1.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/funParams2.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/funParams2.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/funParams3.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/funParams3.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/funParams4.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/funParams4.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/indexArgs.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/indexArgs.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/lambdaParams.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/lambdaParams.kt.after create mode 100644 idea/testData/codeInsight/moveLeftRight/typeArgs.kt create mode 100644 idea/testData/codeInsight/moveLeftRight/typeArgs.kt.after create mode 100644 idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/MoveLeftRightTestGenerated.java diff --git a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt index bea23af05d3..8803fe7472d 100644 --- a/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/kotlin/generators/tests/GenerateTests.kt @@ -47,6 +47,7 @@ import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractCodeInsightActionT import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractGenerateHashCodeAndEqualsActionTest import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractGenerateTestSupportMethodActionTest import org.jetbrains.kotlin.idea.codeInsight.generate.AbstractGenerateToStringActionTest +import org.jetbrains.kotlin.idea.codeInsight.moveUpDown.AbstractMoveLeftRightTest import org.jetbrains.kotlin.idea.codeInsight.moveUpDown.AbstractMoveStatementTest import org.jetbrains.kotlin.idea.codeInsight.surroundWith.AbstractSurroundWithTest import org.jetbrains.kotlin.idea.codeInsight.unwrap.AbstractUnwrapRemoveTest @@ -511,6 +512,10 @@ fun main(args: Array) { model("codeInsight/moveUpDown/parametersAndArguments", testMethod = "doTestExpression") } + testClass() { + model("codeInsight/moveLeftRight") + } + testClass() { model("refactoring/inline", pattern = "^(\\w+)\\.kt$") } diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 9d387285287..ad45d726a5e 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -618,6 +618,8 @@ implementation="org.jetbrains.kotlin.idea.codeInsight.upDownMover.KotlinDeclarationMover" order="before jetExpression" /> + + diff --git a/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinMoveLeftRightHandler.kt b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinMoveLeftRightHandler.kt new file mode 100644 index 00000000000..90f6defbce3 --- /dev/null +++ b/idea/src/org/jetbrains/kotlin/idea/codeInsight/KotlinMoveLeftRightHandler.kt @@ -0,0 +1,37 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.codeInsight + +import com.intellij.codeInsight.editorActions.moveLeftRight.MoveElementLeftRightHandler +import com.intellij.psi.PsiElement +import org.jetbrains.kotlin.psi.* + +class KotlinMoveLeftRightHandler : MoveElementLeftRightHandler() { + override fun getMovableSubElements(element: PsiElement): Array { + when (element) { + is KtParameterList -> return element.parameters.toTypedArray() + is KtValueArgumentList -> return element.arguments.toTypedArray() + is KtArrayAccessExpression -> return element.indexExpressions.toTypedArray() + is KtTypeParameterList -> return element.parameters.toTypedArray() + is KtSuperTypeList -> return element.entries.toTypedArray() + //TODO +// is KtClass -> if (element.isEnum()) return element.declarations.filterIsInstance().toTypedArray() + } + + return emptyArray() + } +} diff --git a/idea/testData/codeInsight/moveLeftRight/annotationParams.kt b/idea/testData/codeInsight/moveLeftRight/annotationParams.kt new file mode 100644 index 00000000000..5b93d12680f --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/annotationParams.kt @@ -0,0 +1,4 @@ +// MOVE: right +@A(1, 2) +fun foo() { +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/annotationParams.kt.after b/idea/testData/codeInsight/moveLeftRight/annotationParams.kt.after new file mode 100644 index 00000000000..a2429bd1543 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/annotationParams.kt.after @@ -0,0 +1,4 @@ +// MOVE: right +@A(2, 1) +fun foo() { +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/basesList.kt b/idea/testData/codeInsight/moveLeftRight/basesList.kt new file mode 100644 index 00000000000..96061b579d6 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/basesList.kt @@ -0,0 +1,6 @@ +// MOVE: left +interface I + +abstract class Base + +class A : I, Base() \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/basesList.kt.after b/idea/testData/codeInsight/moveLeftRight/basesList.kt.after new file mode 100644 index 00000000000..2381c14276d --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/basesList.kt.after @@ -0,0 +1,6 @@ +// MOVE: left +interface I + +abstract class Base + +class A : Base(), I \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/callArgs1.kt b/idea/testData/codeInsight/moveLeftRight/callArgs1.kt new file mode 100644 index 00000000000..330787c9ca0 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/callArgs1.kt @@ -0,0 +1,4 @@ +// MOVE: right +fun foo() { + bar(1, 2) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/callArgs1.kt.after b/idea/testData/codeInsight/moveLeftRight/callArgs1.kt.after new file mode 100644 index 00000000000..2b09a837384 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/callArgs1.kt.after @@ -0,0 +1,4 @@ +// MOVE: right +fun foo() { + bar(2, 1) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/callArgs2.kt b/idea/testData/codeInsight/moveLeftRight/callArgs2.kt new file mode 100644 index 00000000000..72a311605b2 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/callArgs2.kt @@ -0,0 +1,4 @@ +// MOVE: left +fun foo() { + bar(1, 2) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/callArgs2.kt.after b/idea/testData/codeInsight/moveLeftRight/callArgs2.kt.after new file mode 100644 index 00000000000..f7d97b2c566 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/callArgs2.kt.after @@ -0,0 +1,4 @@ +// MOVE: left +fun foo() { + bar(2, 1) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/callArgs3.kt b/idea/testData/codeInsight/moveLeftRight/callArgs3.kt new file mode 100644 index 00000000000..8f456a431e0 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/callArgs3.kt @@ -0,0 +1,4 @@ +// MOVE: left +fun foo(list: List) { + bar(1, *list) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/callArgs3.kt.after b/idea/testData/codeInsight/moveLeftRight/callArgs3.kt.after new file mode 100644 index 00000000000..980564cb487 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/callArgs3.kt.after @@ -0,0 +1,4 @@ +// MOVE: left +fun foo(list: List) { + bar(*list, 1) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/callArgs4.kt b/idea/testData/codeInsight/moveLeftRight/callArgs4.kt new file mode 100644 index 00000000000..48f7f52816b --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/callArgs4.kt @@ -0,0 +1,4 @@ +// MOVE: right +fun foo() { + bar(a = 1, b = 2) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/callArgs4.kt.after b/idea/testData/codeInsight/moveLeftRight/callArgs4.kt.after new file mode 100644 index 00000000000..c3d32fc359a --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/callArgs4.kt.after @@ -0,0 +1,4 @@ +// MOVE: right +fun foo() { + bar(b = 2, a = 1) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/callArgs5.kt b/idea/testData/codeInsight/moveLeftRight/callArgs5.kt new file mode 100644 index 00000000000..c8811924fc5 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/callArgs5.kt @@ -0,0 +1,4 @@ +// MOVE: right +fun foo() { + bar(1, 2, 3) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/callArgs5.kt.after b/idea/testData/codeInsight/moveLeftRight/callArgs5.kt.after new file mode 100644 index 00000000000..74fcab085f6 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/callArgs5.kt.after @@ -0,0 +1,4 @@ +// MOVE: right +fun foo() { + bar(1, 3, 2) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/enumMembers1.kt.after b/idea/testData/codeInsight/moveLeftRight/enumMembers1.kt.after new file mode 100644 index 00000000000..432b598596f --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/enumMembers1.kt.after @@ -0,0 +1,4 @@ +// MOVE: right +enum class E { + B, A, C +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/enumMembers1.kt.todo b/idea/testData/codeInsight/moveLeftRight/enumMembers1.kt.todo new file mode 100644 index 00000000000..dfe979a2843 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/enumMembers1.kt.todo @@ -0,0 +1,4 @@ +// MOVE: right +enum class E { + A, B, C +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/enumMembers2.kt.after b/idea/testData/codeInsight/moveLeftRight/enumMembers2.kt.after new file mode 100644 index 00000000000..2c4accc164f --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/enumMembers2.kt.after @@ -0,0 +1,4 @@ +// MOVE: right +enum class E { + A, C, B +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/enumMembers2.kt.todo b/idea/testData/codeInsight/moveLeftRight/enumMembers2.kt.todo new file mode 100644 index 00000000000..8a980de2b37 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/enumMembers2.kt.todo @@ -0,0 +1,4 @@ +// MOVE: right +enum class E { + A, B, C +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/enumMembers3.kt.after b/idea/testData/codeInsight/moveLeftRight/enumMembers3.kt.after new file mode 100644 index 00000000000..e0f73ea5940 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/enumMembers3.kt.after @@ -0,0 +1,4 @@ +// MOVE: left +enum class E { + B, A, C +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/enumMembers3.kt.todo b/idea/testData/codeInsight/moveLeftRight/enumMembers3.kt.todo new file mode 100644 index 00000000000..47cc16e48f0 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/enumMembers3.kt.todo @@ -0,0 +1,4 @@ +// MOVE: left +enum class E { + A, B, C +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/enumMembers4.kt.after b/idea/testData/codeInsight/moveLeftRight/enumMembers4.kt.after new file mode 100644 index 00000000000..ae9493da84d --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/enumMembers4.kt.after @@ -0,0 +1,6 @@ +// MOVE: right +enum class E { + A, C, B; + + fun foo(){} +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/enumMembers4.kt.todo b/idea/testData/codeInsight/moveLeftRight/enumMembers4.kt.todo new file mode 100644 index 00000000000..8255a76f446 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/enumMembers4.kt.todo @@ -0,0 +1,6 @@ +// MOVE: right +enum class E { + A, B, C; + + fun foo(){} +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/enumMembers5.kt.after b/idea/testData/codeInsight/moveLeftRight/enumMembers5.kt.after new file mode 100644 index 00000000000..3014f8a4a33 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/enumMembers5.kt.after @@ -0,0 +1,8 @@ +// MOVE: left +enum class E { + A, C, B + + ; + + fun foo(){} +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/enumMembers5.kt.todo b/idea/testData/codeInsight/moveLeftRight/enumMembers5.kt.todo new file mode 100644 index 00000000000..2180ff175ad --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/enumMembers5.kt.todo @@ -0,0 +1,8 @@ +// MOVE: left +enum class E { + A, B, C + + ; + + fun foo(){} +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/funParams1.kt b/idea/testData/codeInsight/moveLeftRight/funParams1.kt new file mode 100644 index 00000000000..38f498483b7 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/funParams1.kt @@ -0,0 +1,5 @@ +// MOVE: left +class A { + fun foo(b: Int, a: Int, c: Int) { + } +} diff --git a/idea/testData/codeInsight/moveLeftRight/funParams1.kt.after b/idea/testData/codeInsight/moveLeftRight/funParams1.kt.after new file mode 100644 index 00000000000..6915308064b --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/funParams1.kt.after @@ -0,0 +1,5 @@ +// MOVE: left +class A { + fun foo(a: Int, b: Int, c: Int) { + } +} diff --git a/idea/testData/codeInsight/moveLeftRight/funParams2.kt b/idea/testData/codeInsight/moveLeftRight/funParams2.kt new file mode 100644 index 00000000000..155f31b86e4 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/funParams2.kt @@ -0,0 +1,5 @@ +// MOVE: right +class A { + fun foo(b: Int, a: Int, c: Int) { + } +} diff --git a/idea/testData/codeInsight/moveLeftRight/funParams2.kt.after b/idea/testData/codeInsight/moveLeftRight/funParams2.kt.after new file mode 100644 index 00000000000..b92d2f61d98 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/funParams2.kt.after @@ -0,0 +1,5 @@ +// MOVE: right +class A { + fun foo(b: Int, c: Int, a: Int) { + } +} diff --git a/idea/testData/codeInsight/moveLeftRight/funParams3.kt b/idea/testData/codeInsight/moveLeftRight/funParams3.kt new file mode 100644 index 00000000000..fbc7ff7206d --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/funParams3.kt @@ -0,0 +1,5 @@ +// MOVE: right +class A { + fun foo(b: Int, a: Int, c: Int) { + } +} diff --git a/idea/testData/codeInsight/moveLeftRight/funParams3.kt.after b/idea/testData/codeInsight/moveLeftRight/funParams3.kt.after new file mode 100644 index 00000000000..d38a485a43f --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/funParams3.kt.after @@ -0,0 +1,5 @@ +// MOVE: right +class A { + fun foo(a: Int, b: Int, c: Int) { + } +} diff --git a/idea/testData/codeInsight/moveLeftRight/funParams4.kt b/idea/testData/codeInsight/moveLeftRight/funParams4.kt new file mode 100644 index 00000000000..6915308064b --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/funParams4.kt @@ -0,0 +1,5 @@ +// MOVE: left +class A { + fun foo(a: Int, b: Int, c: Int) { + } +} diff --git a/idea/testData/codeInsight/moveLeftRight/funParams4.kt.after b/idea/testData/codeInsight/moveLeftRight/funParams4.kt.after new file mode 100644 index 00000000000..6915308064b --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/funParams4.kt.after @@ -0,0 +1,5 @@ +// MOVE: left +class A { + fun foo(a: Int, b: Int, c: Int) { + } +} diff --git a/idea/testData/codeInsight/moveLeftRight/indexArgs.kt b/idea/testData/codeInsight/moveLeftRight/indexArgs.kt new file mode 100644 index 00000000000..f9289b086f3 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/indexArgs.kt @@ -0,0 +1,4 @@ +// MOVE: right +fun foo() { + x[1, 2] +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/indexArgs.kt.after b/idea/testData/codeInsight/moveLeftRight/indexArgs.kt.after new file mode 100644 index 00000000000..ed935e4d994 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/indexArgs.kt.after @@ -0,0 +1,4 @@ +// MOVE: right +fun foo() { + x[2, 1] +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/lambdaParams.kt b/idea/testData/codeInsight/moveLeftRight/lambdaParams.kt new file mode 100644 index 00000000000..49deb90873a --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/lambdaParams.kt @@ -0,0 +1,4 @@ +// MOVE: left +fun foo(list: List) { + list.foldRightIndexed(1, { p1, p2, p3 -> 1 }) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/lambdaParams.kt.after b/idea/testData/codeInsight/moveLeftRight/lambdaParams.kt.after new file mode 100644 index 00000000000..8133744e58d --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/lambdaParams.kt.after @@ -0,0 +1,4 @@ +// MOVE: left +fun foo(list: List) { + list.foldRightIndexed(1, { p2, p1, p3 -> 1 }) +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/typeArgs.kt b/idea/testData/codeInsight/moveLeftRight/typeArgs.kt new file mode 100644 index 00000000000..8ebd8f829a7 --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/typeArgs.kt @@ -0,0 +1,3 @@ +// MOVE: right +fun <T1, T2> foo() { +} \ No newline at end of file diff --git a/idea/testData/codeInsight/moveLeftRight/typeArgs.kt.after b/idea/testData/codeInsight/moveLeftRight/typeArgs.kt.after new file mode 100644 index 00000000000..ae85e1bc63c --- /dev/null +++ b/idea/testData/codeInsight/moveLeftRight/typeArgs.kt.after @@ -0,0 +1,3 @@ +// MOVE: right +fun T1> foo() { +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/AbstractCodeMoverTest.kt b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/AbstractCodeMoverTest.kt index 4940c9ade02..e819df601d9 100644 --- a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/AbstractCodeMoverTest.kt +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/AbstractCodeMoverTest.kt @@ -21,13 +21,15 @@ import com.intellij.codeInsight.editorActions.moveLeftRight.MoveElementRightActi import com.intellij.codeInsight.editorActions.moveUpDown.MoveStatementDownAction import com.intellij.codeInsight.editorActions.moveUpDown.MoveStatementUpAction import com.intellij.codeInsight.editorActions.moveUpDown.StatementUpDownMover -import com.intellij.openapi.application.ApplicationManager +import com.intellij.openapi.actionSystem.Presentation +import com.intellij.openapi.application.runWriteAction import com.intellij.openapi.editor.actionSystem.EditorAction import com.intellij.openapi.extensions.Extensions import com.intellij.openapi.util.io.FileUtil import com.intellij.testFramework.LightCodeInsightTestCase import com.intellij.testFramework.LightPlatformCodeInsightTestCase import junit.framework.ComparisonFailure +import junit.framework.TestCase import org.jetbrains.kotlin.formatter.FormatSettingsUtil import org.jetbrains.kotlin.idea.codeInsight.upDownMover.KotlinDeclarationMover import org.jetbrains.kotlin.idea.codeInsight.upDownMover.KotlinExpressionMover @@ -58,8 +60,14 @@ abstract class AbstractMoveStatementTest : AbstractCodeMoverTest() { } } +abstract class AbstractMoveLeftRightTest : AbstractCodeMoverTest() { + protected fun doTest(path: String) { + doTest(path) { isApplicableExpected, direction -> } + } +} + abstract class AbstractCodeMoverTest : LightCodeInsightTestCase() { - protected fun doTest(path: String, isApplicableChecker: (isApplicableExpected: Boolean, direction: String) -> Unit = { isApplicableExpected, direction -> }) { + protected fun doTest(path: String, isApplicableChecker: (isApplicableExpected: Boolean, direction: String) -> Unit) { configureByFile(path) val fileText = FileUtil.loadFile(File(path), true) @@ -79,29 +87,33 @@ abstract class AbstractCodeMoverTest : LightCodeInsightTestCase() { isApplicableChecker(isApplicableExpected, direction) - if (isApplicableExpected) { - invokeAndCheck(fileText, path, action) - } + invokeAndCheck(fileText, path, action, isApplicableExpected) } - private fun invokeAndCheck(fileText: String, path: String, action: EditorAction) { + private fun invokeAndCheck(fileText: String, path: String, action: EditorAction, isApplicableExpected: Boolean) { val codeStyleSettings = FormatSettingsUtil.getSettings() val configurator = FormatSettingsUtil.createConfigurator(fileText, codeStyleSettings) configurator.configureSettings() try { - ApplicationManager.getApplication().runWriteAction { - action.actionPerformed(LightPlatformCodeInsightTestCase.getEditor(), LightPlatformCodeInsightTestCase.getCurrentEditorDataContext()) - } + val editor = LightPlatformCodeInsightTestCase.getEditor() + val dataContext = LightPlatformCodeInsightTestCase.getCurrentEditorDataContext() - val afterFilePath = path + ".after" - try { - checkResultByFile(afterFilePath) - } - catch (e: ComparisonFailure) { - KotlinTestUtils.assertEqualsToFile(File(afterFilePath), LightPlatformCodeInsightTestCase.getEditor()) - } + val presentation = Presentation() + action.update(editor, presentation, dataContext) + TestCase.assertEquals(isApplicableExpected, presentation.isEnabled) + if (isApplicableExpected) { + runWriteAction { action.actionPerformed(editor, dataContext) } + + val afterFilePath = path + ".after" + try { + checkResultByFile(afterFilePath) + } + catch (e: ComparisonFailure) { + KotlinTestUtils.assertEqualsToFile(File(afterFilePath), editor) + } + } } finally { codeStyleSettings.clearCodeStyleSettings() diff --git a/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/MoveLeftRightTestGenerated.java b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/MoveLeftRightTestGenerated.java new file mode 100644 index 00000000000..02c34d5d77a --- /dev/null +++ b/idea/tests/org/jetbrains/kotlin/idea/codeInsight/moveUpDown/MoveLeftRightTestGenerated.java @@ -0,0 +1,121 @@ +/* + * Copyright 2010-2016 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.jetbrains.kotlin.idea.codeInsight.moveUpDown; + +import com.intellij.testFramework.TestDataPath; +import org.jetbrains.kotlin.test.JUnit3RunnerWithInners; +import org.jetbrains.kotlin.test.KotlinTestUtils; +import org.jetbrains.kotlin.test.TestMetadata; +import org.junit.runner.RunWith; + +import java.io.File; +import java.util.regex.Pattern; + +/** This class is generated by {@link org.jetbrains.kotlin.generators.tests.TestsPackage}. DO NOT MODIFY MANUALLY */ +@SuppressWarnings("all") +@TestMetadata("idea/testData/codeInsight/moveLeftRight") +@TestDataPath("$PROJECT_ROOT") +@RunWith(JUnit3RunnerWithInners.class) +public class MoveLeftRightTestGenerated extends AbstractMoveLeftRightTest { + public void testAllFilesPresentInMoveLeftRight() throws Exception { + KotlinTestUtils.assertAllTestsPresentByMetadata(this.getClass(), new File("idea/testData/codeInsight/moveLeftRight"), Pattern.compile("^(.+)\\.kt$"), true); + } + + @TestMetadata("annotationParams.kt") + public void testAnnotationParams() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/annotationParams.kt"); + doTest(fileName); + } + + @TestMetadata("basesList.kt") + public void testBasesList() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/basesList.kt"); + doTest(fileName); + } + + @TestMetadata("callArgs1.kt") + public void testCallArgs1() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/callArgs1.kt"); + doTest(fileName); + } + + @TestMetadata("callArgs2.kt") + public void testCallArgs2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/callArgs2.kt"); + doTest(fileName); + } + + @TestMetadata("callArgs3.kt") + public void testCallArgs3() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/callArgs3.kt"); + doTest(fileName); + } + + @TestMetadata("callArgs4.kt") + public void testCallArgs4() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/callArgs4.kt"); + doTest(fileName); + } + + @TestMetadata("callArgs5.kt") + public void testCallArgs5() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/callArgs5.kt"); + doTest(fileName); + } + + @TestMetadata("funParams1.kt") + public void testFunParams1() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/funParams1.kt"); + doTest(fileName); + } + + @TestMetadata("funParams2.kt") + public void testFunParams2() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/funParams2.kt"); + doTest(fileName); + } + + @TestMetadata("funParams3.kt") + public void testFunParams3() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/funParams3.kt"); + doTest(fileName); + } + + @TestMetadata("funParams4.kt") + public void testFunParams4() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/funParams4.kt"); + doTest(fileName); + } + + @TestMetadata("indexArgs.kt") + public void testIndexArgs() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/indexArgs.kt"); + doTest(fileName); + } + + @TestMetadata("lambdaParams.kt") + public void testLambdaParams() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/lambdaParams.kt"); + doTest(fileName); + } + + @TestMetadata("typeArgs.kt") + public void testTypeArgs() throws Exception { + String fileName = KotlinTestUtils.navigationMetadata("idea/testData/codeInsight/moveLeftRight/typeArgs.kt"); + doTest(fileName); + } +}