From 48b9dcf5ae11adfe9438bce310f2e83e04516be6 Mon Sep 17 00:00:00 2001 From: kuity Date: Sat, 8 Feb 2014 15:44:39 -0800 Subject: [PATCH] Added KT-4549 SwapBinaryExpression Intention --- .../jet/generators/tests/GenerateTests.kt | 1 + .../SwapBinaryExpression/after.kt.template | 1 + .../SwapBinaryExpression/before.kt.template | 1 + .../SwapBinaryExpression/description.html | 5 ++ idea/src/META-INF/plugin.xml | 5 ++ .../jetbrains/jet/plugin/JetBundle.properties | 2 + .../plugin/intentions/SwapBinaryExpression.kt | 84 +++++++++++++++++++ .../swapBinaryExpression/compareTo.kt | 4 + .../swapBinaryExpression/conjunction.kt | 3 + .../swapBinaryExpression/conjunction.kt.after | 3 + .../conjunctionLiteral.kt | 3 + .../conjunctionLiteral.kt.after | 3 + .../swapBinaryExpression/disjunction.kt | 3 + .../swapBinaryExpression/disjunction.kt.after | 3 + .../disjunctionLiteral.kt | 3 + .../disjunctionLiteral.kt.after | 3 + .../intentions/swapBinaryExpression/divide.kt | 4 + .../swapBinaryExpression/divideAssign.kt | 6 ++ .../swapBinaryExpression/divideLiteral.kt | 4 + .../swapBinaryExpression/doubleEquals.kt | 3 + .../doubleEquals.kt.after | 3 + .../intentions/swapBinaryExpression/equals.kt | 5 ++ .../swapBinaryExpression/equalsLiteral.kt | 3 + .../equalsLiteral.kt.after | 3 + .../swapBinaryExpression/greaterThan.kt | 3 + .../swapBinaryExpression/greaterThan.kt.after | 3 + .../swapBinaryExpression/greaterThanEquals.kt | 4 + .../greaterThanEquals.kt.after | 4 + .../intentions/swapBinaryExpression/in.kt | 6 ++ .../swapBinaryExpression/infixFunction.kt | 8 ++ .../intentions/swapBinaryExpression/is.kt | 6 ++ .../swapBinaryExpression/lessThan.kt | 3 + .../swapBinaryExpression/lessThan.kt.after | 3 + .../swapBinaryExpression/lessThanEquals.kt | 4 + .../lessThanEquals.kt.after | 4 + .../intentions/swapBinaryExpression/minus.kt | 4 + .../swapBinaryExpression/minusAssign.kt | 6 ++ .../swapBinaryExpression/minusLiteral.kt | 4 + .../swapBinaryExpression/multipleOperands.kt | 3 + .../multipleOperands.kt.after | 3 + .../swapBinaryExpression/multiply.kt | 3 + .../swapBinaryExpression/multiply.kt.after | 3 + .../swapBinaryExpression/multiplyAssign.kt | 6 ++ .../swapBinaryExpression/nonBinaryExpr.kt | 5 ++ .../swapBinaryExpression/notDoubleEquals.kt | 4 + .../swapBinaryExpression/notEquals.kt | 5 ++ .../swapBinaryExpression/notEquals.kt.after | 5 ++ .../intentions/swapBinaryExpression/notIn.kt | 6 ++ .../intentions/swapBinaryExpression/notIs.kt | 6 ++ .../swapBinaryExpression/nullOperand.kt | 4 + .../intentions/swapBinaryExpression/plus.kt | 3 + .../swapBinaryExpression/plus.kt.after | 3 + .../swapBinaryExpression/plusAssign.kt | 6 ++ .../swapBinaryExpression/plusInt.kt | 3 + .../swapBinaryExpression/plusInt.kt.after | 3 + .../swapBinaryExpression/plusLiteral.kt | 3 + .../swapBinaryExpression/plusLiteral.kt.after | 3 + .../swapBinaryExpression/rangeTo.kt | 6 ++ .../swapBinaryExpression/rangeToLiteral.kt | 6 ++ .../swapBinaryExpression/remainder.kt | 4 + .../swapBinaryExpression/remainderAssign.kt | 6 ++ .../intentions/swapBinaryExpression/times.kt | 3 + .../swapBinaryExpression/times.kt.after | 3 + .../swapBinaryExpression/timesAssign.kt | 6 ++ .../swapBinaryExpression/timesLiteral.kt | 3 + .../timesLiteral.kt.after | 3 + .../intentions/swapBinaryExpression/xor.kt | 3 + .../swapBinaryExpression/xor.kt.after | 3 + .../AbstractCodeTransformationTest.java | 5 +- 69 files changed, 346 insertions(+), 2 deletions(-) create mode 100644 idea/resources/intentionDescriptions/SwapBinaryExpression/after.kt.template create mode 100644 idea/resources/intentionDescriptions/SwapBinaryExpression/before.kt.template create mode 100644 idea/resources/intentionDescriptions/SwapBinaryExpression/description.html create mode 100644 idea/src/org/jetbrains/jet/plugin/intentions/SwapBinaryExpression.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/compareTo.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/conjunction.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/conjunction.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/conjunctionLiteral.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/conjunctionLiteral.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/disjunction.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/disjunction.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/disjunctionLiteral.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/disjunctionLiteral.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/divide.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/divideAssign.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/divideLiteral.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/doubleEquals.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/doubleEquals.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/equals.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/equalsLiteral.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/equalsLiteral.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/greaterThan.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/greaterThan.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/greaterThanEquals.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/greaterThanEquals.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/in.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/infixFunction.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/is.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/lessThan.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/lessThan.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/lessThanEquals.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/lessThanEquals.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/minus.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/minusAssign.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/minusLiteral.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/multipleOperands.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/multipleOperands.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/multiply.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/multiply.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/multiplyAssign.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/nonBinaryExpr.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/notDoubleEquals.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/notEquals.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/notEquals.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/notIn.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/notIs.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/nullOperand.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/plus.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/plus.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/plusAssign.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/plusInt.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/plusInt.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/plusLiteral.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/plusLiteral.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/rangeTo.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/rangeToLiteral.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/remainder.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/remainderAssign.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/times.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/times.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/timesAssign.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/timesLiteral.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/timesLiteral.kt.after create mode 100644 idea/testData/intentions/swapBinaryExpression/xor.kt create mode 100644 idea/testData/intentions/swapBinaryExpression/xor.kt.after diff --git a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt index 0750c914f66..f1e3925e7ec 100644 --- a/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt +++ b/generators/src/org/jetbrains/jet/generators/tests/GenerateTests.kt @@ -381,6 +381,7 @@ fun main(args: Array) { model("intentions/simplifyNegatedBinaryExpressionIntention", testMethod = "doTestSimplifyNegatedBinaryExpressionIntention") model("intentions/convertNegatedBooleanSequence", testMethod="doTestConvertNegatedBooleanSequence") model("intentions/convertNegatedExpressionWithDemorgansLaw", testMethod = "doTestConvertNegatedExpressionWithDemorgansLaw") + model("intentions/swapBinaryExpression", testMethod = "doTestSwapBinaryExpression") } testClass(javaClass()) { diff --git a/idea/resources/intentionDescriptions/SwapBinaryExpression/after.kt.template b/idea/resources/intentionDescriptions/SwapBinaryExpression/after.kt.template new file mode 100644 index 00000000000..dc3b757bb2e --- /dev/null +++ b/idea/resources/intentionDescriptions/SwapBinaryExpression/after.kt.template @@ -0,0 +1 @@ +val n = y + x \ No newline at end of file diff --git a/idea/resources/intentionDescriptions/SwapBinaryExpression/before.kt.template b/idea/resources/intentionDescriptions/SwapBinaryExpression/before.kt.template new file mode 100644 index 00000000000..2486a46bb8a --- /dev/null +++ b/idea/resources/intentionDescriptions/SwapBinaryExpression/before.kt.template @@ -0,0 +1 @@ +val n = x + y \ No newline at end of file diff --git a/idea/resources/intentionDescriptions/SwapBinaryExpression/description.html b/idea/resources/intentionDescriptions/SwapBinaryExpression/description.html new file mode 100644 index 00000000000..0f92bc59ca9 --- /dev/null +++ b/idea/resources/intentionDescriptions/SwapBinaryExpression/description.html @@ -0,0 +1,5 @@ + + +This intention swaps the operands of a binary expression. + + \ No newline at end of file diff --git a/idea/src/META-INF/plugin.xml b/idea/src/META-INF/plugin.xml index 088ee37c4f5..ce8ccfcb0cb 100644 --- a/idea/src/META-INF/plugin.xml +++ b/idea/src/META-INF/plugin.xml @@ -624,6 +624,11 @@ Kotlin + + org.jetbrains.jet.plugin.intentions.SwapBinaryExpression + Kotlin + + diff --git a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties index 06a9775b328..921cc97a64d 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetBundle.properties +++ b/idea/src/org/jetbrains/jet/plugin/JetBundle.properties @@ -258,6 +258,8 @@ remove.unnecessary.curly.brackets.from.string.template=Remove curly braces from remove.unnecessary.curly.brackets.from.string.template.family=Remove curly braces from variable insert.curly.brackets.to.string.template=Insert curly braces around variable insert.curly.brackets.to.string.template.family=Insert curly braces around variable +swap.binary.expression=Flip Binary Expression +swap.binary.expression.family=Flip Binary Expression add.name.to.argument.family=Add Name to Argument add.name.to.argument.single=Add name to argument\: ''{0}'' add.name.to.argument.multiple=Add name to argument... diff --git a/idea/src/org/jetbrains/jet/plugin/intentions/SwapBinaryExpression.kt b/idea/src/org/jetbrains/jet/plugin/intentions/SwapBinaryExpression.kt new file mode 100644 index 00000000000..c927b810a37 --- /dev/null +++ b/idea/src/org/jetbrains/jet/plugin/intentions/SwapBinaryExpression.kt @@ -0,0 +1,84 @@ +/* + * Copyright 2010-2014 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.jet.plugin.intentions + +import com.intellij.openapi.editor.Editor +import org.jetbrains.jet.lang.psi.JetBinaryExpression +import org.jetbrains.jet.lang.psi.JetPsiFactory +import org.jetbrains.jet.lang.psi.JetExpression +import org.jetbrains.jet.plugin.intentions.SwapBinaryExpression.Position.* + +public class SwapBinaryExpression : JetSelfTargetingIntention( + "swap.binary.expression", javaClass() +) { + enum class Position { + FIRST_LEFT + FIRST_RIGHT + NEXT_LEFT + NEXT_RIGHT + } + + fun getInnermostOperand(element: JetBinaryExpression, position: Position): JetExpression? { + val left = element.getLeft() + val right = element.getRight() + + if (left == null || right == null) { + return null + } + + return when (position) { + FIRST_LEFT -> if (left is JetBinaryExpression) getInnermostOperand(left, NEXT_RIGHT) else left as JetExpression + FIRST_RIGHT -> if (right is JetBinaryExpression) getInnermostOperand(right, NEXT_LEFT) else right as JetExpression + NEXT_LEFT -> if (left is JetBinaryExpression) getInnermostOperand(left, NEXT_LEFT) else left as JetExpression + NEXT_RIGHT -> if (right is JetBinaryExpression) getInnermostOperand(right, NEXT_RIGHT) else right as JetExpression + } + } + + override fun isApplicableTo(element: JetBinaryExpression): Boolean { + if (getInnermostOperand(element, FIRST_LEFT) == null || getInnermostOperand(element, FIRST_RIGHT) == null) { + return false + } + + val operatorTextLiteral = element.getOperationReference().getText() + val approvedOperators = setOf("+", "plus", "*", "times", "||", "or", "and", + "&&", "==", "!=", "xor", ">", "<", ">=", "<=", "equals") + + if (approvedOperators.contains(operatorTextLiteral)) { + setText("Flip '$operatorTextLiteral'") + return true + } + return false + } + + override fun applyTo(element: JetBinaryExpression, editor: Editor) { + val operator = element.getOperationReference().getText()!! + val convertedOperator = when (operator) { + ">" -> "<" + "<" -> ">" + "<=" -> ">=" + ">=" -> "<=" + else -> operator + } + val left = getInnermostOperand(element, FIRST_LEFT)!! + val right = getInnermostOperand(element, FIRST_RIGHT)!! + val newRight = JetPsiFactory.createExpression(element.getProject(), left.getText()) + val newLeft = JetPsiFactory.createExpression(element.getProject(), right.getText()) + left.replace(newLeft) + right.replace(newRight) + element.replace(JetPsiFactory.createBinaryExpression(element.getProject(), element.getLeft(), convertedOperator, element.getRight())) + } +} diff --git a/idea/testData/intentions/swapBinaryExpression/compareTo.kt b/idea/testData/intentions/swapBinaryExpression/compareTo.kt new file mode 100644 index 00000000000..931f70c49d4 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/compareTo.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +fun main() { + val testing = 5 compareTo 10 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/conjunction.kt b/idea/testData/intentions/swapBinaryExpression/conjunction.kt new file mode 100644 index 00000000000..cb896742a64 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/conjunction.kt @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (a && b) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/conjunction.kt.after b/idea/testData/intentions/swapBinaryExpression/conjunction.kt.after new file mode 100644 index 00000000000..6ae31548aae --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/conjunction.kt.after @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (b && a) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/conjunctionLiteral.kt b/idea/testData/intentions/swapBinaryExpression/conjunctionLiteral.kt new file mode 100644 index 00000000000..283e10c4edc --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/conjunctionLiteral.kt @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (a and b) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/conjunctionLiteral.kt.after b/idea/testData/intentions/swapBinaryExpression/conjunctionLiteral.kt.after new file mode 100644 index 00000000000..19646609f4a --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/conjunctionLiteral.kt.after @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (b and a) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/disjunction.kt b/idea/testData/intentions/swapBinaryExpression/disjunction.kt new file mode 100644 index 00000000000..1ccfce8fa35 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/disjunction.kt @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (a || b) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/disjunction.kt.after b/idea/testData/intentions/swapBinaryExpression/disjunction.kt.after new file mode 100644 index 00000000000..072df5b287e --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/disjunction.kt.after @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (b || a) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/disjunctionLiteral.kt b/idea/testData/intentions/swapBinaryExpression/disjunctionLiteral.kt new file mode 100644 index 00000000000..ecca5d4b229 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/disjunctionLiteral.kt @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (a or b) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/disjunctionLiteral.kt.after b/idea/testData/intentions/swapBinaryExpression/disjunctionLiteral.kt.after new file mode 100644 index 00000000000..655cb872c91 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/disjunctionLiteral.kt.after @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (b or a) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/divide.kt b/idea/testData/intentions/swapBinaryExpression/divide.kt new file mode 100644 index 00000000000..168839f73a1 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/divide.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +fun main() { + val test = 5/2 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/divideAssign.kt b/idea/testData/intentions/swapBinaryExpression/divideAssign.kt new file mode 100644 index 00000000000..e3795516cf5 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/divideAssign.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun new(x: Int, y: Int): Int { + var c = 5 + c /= 10 + return 1 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/divideLiteral.kt b/idea/testData/intentions/swapBinaryExpression/divideLiteral.kt new file mode 100644 index 00000000000..d640b4c2f57 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/divideLiteral.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +fun main() { + val test = 5 div 2 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/doubleEquals.kt b/idea/testData/intentions/swapBinaryExpression/doubleEquals.kt new file mode 100644 index 00000000000..ee7e7625155 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/doubleEquals.kt @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (a == b) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/doubleEquals.kt.after b/idea/testData/intentions/swapBinaryExpression/doubleEquals.kt.after new file mode 100644 index 00000000000..250111beca7 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/doubleEquals.kt.after @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (b == a) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/equals.kt b/idea/testData/intentions/swapBinaryExpression/equals.kt new file mode 100644 index 00000000000..cb47f15183f --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/equals.kt @@ -0,0 +1,5 @@ +// IS_APPLICABLE: false +fun main() { + var mutablevar = 20 + mutablevar = 10 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/equalsLiteral.kt b/idea/testData/intentions/swapBinaryExpression/equalsLiteral.kt new file mode 100644 index 00000000000..930623054b6 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/equalsLiteral.kt @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (a equals b) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/equalsLiteral.kt.after b/idea/testData/intentions/swapBinaryExpression/equalsLiteral.kt.after new file mode 100644 index 00000000000..2407d8ec4ed --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/equalsLiteral.kt.after @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (b equals a) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/greaterThan.kt b/idea/testData/intentions/swapBinaryExpression/greaterThan.kt new file mode 100644 index 00000000000..1f430cc85d3 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/greaterThan.kt @@ -0,0 +1,3 @@ +fun main() { + val ex = 4 > 5 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/greaterThan.kt.after b/idea/testData/intentions/swapBinaryExpression/greaterThan.kt.after new file mode 100644 index 00000000000..a494189a08c --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/greaterThan.kt.after @@ -0,0 +1,3 @@ +fun main() { + val ex = 5 < 4 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/greaterThanEquals.kt b/idea/testData/intentions/swapBinaryExpression/greaterThanEquals.kt new file mode 100644 index 00000000000..632d8ac6aae --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/greaterThanEquals.kt @@ -0,0 +1,4 @@ +fun main() { + val y = 20 + val ex = 5 >= y +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/greaterThanEquals.kt.after b/idea/testData/intentions/swapBinaryExpression/greaterThanEquals.kt.after new file mode 100644 index 00000000000..fe6a27e985d --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/greaterThanEquals.kt.after @@ -0,0 +1,4 @@ +fun main() { + val y = 20 + val ex = y <= 5 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/in.kt b/idea/testData/intentions/swapBinaryExpression/in.kt new file mode 100644 index 00000000000..cf9e6ed4c02 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/in.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun main() { + for (elt in array(1, 2, 3)) { + println("Hello") + } +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/infixFunction.kt b/idea/testData/intentions/swapBinaryExpression/infixFunction.kt new file mode 100644 index 00000000000..67fef9d2456 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/infixFunction.kt @@ -0,0 +1,8 @@ +// IS_APPLICABLE: false +class Foo() { + fun cat(x: Int): Int {return x} +} + +fun main() { + val catter = Foo() cat 5 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/is.kt b/idea/testData/intentions/swapBinaryExpression/is.kt new file mode 100644 index 00000000000..8f230f64bef --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/is.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun main() { + if "test" is String { + println("Hello") + } +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/lessThan.kt b/idea/testData/intentions/swapBinaryExpression/lessThan.kt new file mode 100644 index 00000000000..ee7bd214a81 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/lessThan.kt @@ -0,0 +1,3 @@ +fun main() { + val ex = 4 < 5 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/lessThan.kt.after b/idea/testData/intentions/swapBinaryExpression/lessThan.kt.after new file mode 100644 index 00000000000..2c1d4d66899 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/lessThan.kt.after @@ -0,0 +1,3 @@ +fun main() { + val ex = 5 > 4 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/lessThanEquals.kt b/idea/testData/intentions/swapBinaryExpression/lessThanEquals.kt new file mode 100644 index 00000000000..1a0595b8273 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/lessThanEquals.kt @@ -0,0 +1,4 @@ +fun main() { + val y = 20 + val ex = 5 <= y +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/lessThanEquals.kt.after b/idea/testData/intentions/swapBinaryExpression/lessThanEquals.kt.after new file mode 100644 index 00000000000..be8a3f76187 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/lessThanEquals.kt.after @@ -0,0 +1,4 @@ +fun main() { + val y = 20 + val ex = y >= 5 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/minus.kt b/idea/testData/intentions/swapBinaryExpression/minus.kt new file mode 100644 index 00000000000..ee04003a616 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/minus.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +fun new(x: Int, y: Int): Int { + return y - x +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/minusAssign.kt b/idea/testData/intentions/swapBinaryExpression/minusAssign.kt new file mode 100644 index 00000000000..f830b3a859a --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/minusAssign.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun new(x: Int, y: Int): Int { + var c = 5 + c -= 10 + return 1 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/minusLiteral.kt b/idea/testData/intentions/swapBinaryExpression/minusLiteral.kt new file mode 100644 index 00000000000..7dd7beb055e --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/minusLiteral.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +fun new(x: Int, y: Int): Int { + return y minus x +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/multipleOperands.kt b/idea/testData/intentions/swapBinaryExpression/multipleOperands.kt new file mode 100644 index 00000000000..1c2e72e2d40 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/multipleOperands.kt @@ -0,0 +1,3 @@ +fun main() { + return a + b + c + d + e +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/multipleOperands.kt.after b/idea/testData/intentions/swapBinaryExpression/multipleOperands.kt.after new file mode 100644 index 00000000000..6043804d2fe --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/multipleOperands.kt.after @@ -0,0 +1,3 @@ +fun main() { + return a + c + b + d + e +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/multiply.kt b/idea/testData/intentions/swapBinaryExpression/multiply.kt new file mode 100644 index 00000000000..bffa4c4278d --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/multiply.kt @@ -0,0 +1,3 @@ +fun new(x: Int, y: Int): Int { + return y * x +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/multiply.kt.after b/idea/testData/intentions/swapBinaryExpression/multiply.kt.after new file mode 100644 index 00000000000..15ad996393a --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/multiply.kt.after @@ -0,0 +1,3 @@ +fun new(x: Int, y: Int): Int { + return x * y +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/multiplyAssign.kt b/idea/testData/intentions/swapBinaryExpression/multiplyAssign.kt new file mode 100644 index 00000000000..0055f07d57f --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/multiplyAssign.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun new(x: Int, y: Int): Int { + var c = 5 + c *= 10 + return 1 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/nonBinaryExpr.kt b/idea/testData/intentions/swapBinaryExpression/nonBinaryExpr.kt new file mode 100644 index 00000000000..7b05d4881f8 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/nonBinaryExpr.kt @@ -0,0 +1,5 @@ +// IS_APPLICABLE: false +fun main() { + val c = 500 + println("Today is Friday") +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/notDoubleEquals.kt b/idea/testData/intentions/swapBinaryExpression/notDoubleEquals.kt new file mode 100644 index 00000000000..a03f7db86f7 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/notDoubleEquals.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +fun neq(a: Int, b: Int) { + if (a !== b) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/notEquals.kt b/idea/testData/intentions/swapBinaryExpression/notEquals.kt new file mode 100644 index 00000000000..758d8fcb573 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/notEquals.kt @@ -0,0 +1,5 @@ +fun main(): Boolean { + if (5 != 20) { + return false + } +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/notEquals.kt.after b/idea/testData/intentions/swapBinaryExpression/notEquals.kt.after new file mode 100644 index 00000000000..4780f3f5a8d --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/notEquals.kt.after @@ -0,0 +1,5 @@ +fun main(): Boolean { + if (20 != 5) { + return false + } +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/notIn.kt b/idea/testData/intentions/swapBinaryExpression/notIn.kt new file mode 100644 index 00000000000..4f758d78850 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/notIn.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun main() { + if (x !in 5..6) { + println("test") + } +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/notIs.kt b/idea/testData/intentions/swapBinaryExpression/notIs.kt new file mode 100644 index 00000000000..4201d9a3155 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/notIs.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun main() { + if (x !is Int) { + println("test") + } +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/nullOperand.kt b/idea/testData/intentions/swapBinaryExpression/nullOperand.kt new file mode 100644 index 00000000000..c1d5d1383b9 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/nullOperand.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +fun new(x: Int, y: Int): Int { + return y - +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/plus.kt b/idea/testData/intentions/swapBinaryExpression/plus.kt new file mode 100644 index 00000000000..f42ce3f0db3 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/plus.kt @@ -0,0 +1,3 @@ +fun main() { + return a + b +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/plus.kt.after b/idea/testData/intentions/swapBinaryExpression/plus.kt.after new file mode 100644 index 00000000000..01684c97401 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/plus.kt.after @@ -0,0 +1,3 @@ +fun main() { + return b + a +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/plusAssign.kt b/idea/testData/intentions/swapBinaryExpression/plusAssign.kt new file mode 100644 index 00000000000..ea5774f56ed --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/plusAssign.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun new(x: Int, y: Int): Int { + var c = 5 + c += 10 + return 1 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/plusInt.kt b/idea/testData/intentions/swapBinaryExpression/plusInt.kt new file mode 100644 index 00000000000..f42ce3f0db3 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/plusInt.kt @@ -0,0 +1,3 @@ +fun main() { + return a + b +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/plusInt.kt.after b/idea/testData/intentions/swapBinaryExpression/plusInt.kt.after new file mode 100644 index 00000000000..01684c97401 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/plusInt.kt.after @@ -0,0 +1,3 @@ +fun main() { + return b + a +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/plusLiteral.kt b/idea/testData/intentions/swapBinaryExpression/plusLiteral.kt new file mode 100644 index 00000000000..b58ef6ef374 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/plusLiteral.kt @@ -0,0 +1,3 @@ +fun main() { + return a plus b +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/plusLiteral.kt.after b/idea/testData/intentions/swapBinaryExpression/plusLiteral.kt.after new file mode 100644 index 00000000000..b58681725a9 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/plusLiteral.kt.after @@ -0,0 +1,3 @@ +fun main() { + return b plus a +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/rangeTo.kt b/idea/testData/intentions/swapBinaryExpression/rangeTo.kt new file mode 100644 index 00000000000..73f46d81856 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/rangeTo.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun main() { + for (i in 1..10) { + println("Hello World") + } +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/rangeToLiteral.kt b/idea/testData/intentions/swapBinaryExpression/rangeToLiteral.kt new file mode 100644 index 00000000000..f8351ffaa26 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/rangeToLiteral.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun main() { + for (i in 1 rangeTo 10) { + println("Hello World") + } +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/remainder.kt b/idea/testData/intentions/swapBinaryExpression/remainder.kt new file mode 100644 index 00000000000..1ee21253044 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/remainder.kt @@ -0,0 +1,4 @@ +// IS_APPLICABLE: false +fun main() { + val num = 5 % 2 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/remainderAssign.kt b/idea/testData/intentions/swapBinaryExpression/remainderAssign.kt new file mode 100644 index 00000000000..6e8b01d477b --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/remainderAssign.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun new(x: Int, y: Int): Int { + var c = 5 + c %= 10 + return 1 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/times.kt b/idea/testData/intentions/swapBinaryExpression/times.kt new file mode 100644 index 00000000000..bffa4c4278d --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/times.kt @@ -0,0 +1,3 @@ +fun new(x: Int, y: Int): Int { + return y * x +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/times.kt.after b/idea/testData/intentions/swapBinaryExpression/times.kt.after new file mode 100644 index 00000000000..15ad996393a --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/times.kt.after @@ -0,0 +1,3 @@ +fun new(x: Int, y: Int): Int { + return x * y +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/timesAssign.kt b/idea/testData/intentions/swapBinaryExpression/timesAssign.kt new file mode 100644 index 00000000000..0055f07d57f --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/timesAssign.kt @@ -0,0 +1,6 @@ +// IS_APPLICABLE: false +fun new(x: Int, y: Int): Int { + var c = 5 + c *= 10 + return 1 +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/timesLiteral.kt b/idea/testData/intentions/swapBinaryExpression/timesLiteral.kt new file mode 100644 index 00000000000..9f3b64844c8 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/timesLiteral.kt @@ -0,0 +1,3 @@ +fun main() { + return a times b +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/timesLiteral.kt.after b/idea/testData/intentions/swapBinaryExpression/timesLiteral.kt.after new file mode 100644 index 00000000000..d9a431a95b8 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/timesLiteral.kt.after @@ -0,0 +1,3 @@ +fun main() { + return b times a +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/xor.kt b/idea/testData/intentions/swapBinaryExpression/xor.kt new file mode 100644 index 00000000000..54adb0ec71b --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/xor.kt @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (a xor b) {} +} \ No newline at end of file diff --git a/idea/testData/intentions/swapBinaryExpression/xor.kt.after b/idea/testData/intentions/swapBinaryExpression/xor.kt.after new file mode 100644 index 00000000000..4a03d91b0d2 --- /dev/null +++ b/idea/testData/intentions/swapBinaryExpression/xor.kt.after @@ -0,0 +1,3 @@ +fun neq(a: Int, b: Int) { + if (b xor a) {} +} \ No newline at end of file diff --git a/idea/tests/org/jetbrains/jet/plugin/intentions/AbstractCodeTransformationTest.java b/idea/tests/org/jetbrains/jet/plugin/intentions/AbstractCodeTransformationTest.java index 5e3ef6a3800..21ae638af39 100644 --- a/idea/tests/org/jetbrains/jet/plugin/intentions/AbstractCodeTransformationTest.java +++ b/idea/tests/org/jetbrains/jet/plugin/intentions/AbstractCodeTransformationTest.java @@ -138,11 +138,12 @@ public abstract class AbstractCodeTransformationTest extends LightCodeInsightTes public void doTestMoveLambdaInsideParentheses(@NotNull String path) throws Exception { doTestIntention(path, new MoveLambdaInsideParenthesesIntention()); } - public void doTestMoveLambdaOutsideParentheses(@NotNull String path) throws Exception { doTestIntention(path, new MoveLambdaOutsideParenthesesIntention()); } - + public void doTestSwapBinaryExpression(@NotNull String path) throws Exception { + doTestIntention(path, new SwapBinaryExpression()); + } public void doTestConvertMemberToExtension(@NotNull String path) throws Exception { doTestIntention(path, new ConvertMemberToExtension()); }