Lift Assignment: process lambda assignments in when correctly
So #KT-23346 Fixed
This commit is contained in:
committed by
Mikhail Glukhikh
parent
7438d12ad7
commit
89981ecbbb
+8
-2
@@ -162,12 +162,18 @@ object BranchedFoldingUtils {
|
|||||||
fun foldToAssignment(expression: KtExpression) {
|
fun foldToAssignment(expression: KtExpression) {
|
||||||
var lhs: KtExpression? = null
|
var lhs: KtExpression? = null
|
||||||
var op: String? = null
|
var op: String? = null
|
||||||
|
val psiFactory = KtPsiFactory(expression)
|
||||||
fun KtBinaryExpression.replaceWithRHS() {
|
fun KtBinaryExpression.replaceWithRHS() {
|
||||||
if (lhs == null || op == null) {
|
if (lhs == null || op == null) {
|
||||||
lhs = left!!.copy() as KtExpression
|
lhs = left!!.copy() as KtExpression
|
||||||
op = operationReference.text
|
op = operationReference.text
|
||||||
}
|
}
|
||||||
replace(right!!)
|
val rhs = right!!
|
||||||
|
if (rhs is KtLambdaExpression && this.parent !is KtBlockExpression) {
|
||||||
|
replace(psiFactory.createExpressionByPattern("{ $0 }", rhs))
|
||||||
|
} else {
|
||||||
|
replace(rhs)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
fun lift(e: KtExpression?) {
|
fun lift(e: KtExpression?) {
|
||||||
when (e) {
|
when (e) {
|
||||||
@@ -183,7 +189,7 @@ object BranchedFoldingUtils {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
lift(expression)
|
lift(expression)
|
||||||
expression.replace(KtPsiFactory(expression).createExpressionByPattern("$0 $1 $2", lhs!!, op!!, expression))
|
expression.replace(psiFactory.createExpressionByPattern("$0 $1 $2", lhs!!, op!!, expression))
|
||||||
}
|
}
|
||||||
|
|
||||||
fun foldToReturn(expression: KtExpression) {
|
fun foldToReturn(expression: KtExpression) {
|
||||||
|
|||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fun test(i: Int) {
|
||||||
|
var fn: () -> String
|
||||||
|
|
||||||
|
<caret>if (i == 1) {
|
||||||
|
fn = { "foo" }
|
||||||
|
} else if (i == 2) {
|
||||||
|
fn = { "bar" }
|
||||||
|
} else {
|
||||||
|
fn = { "baz" }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fun test(i: Int) {
|
||||||
|
var fn: () -> String
|
||||||
|
|
||||||
|
<caret>fn = if (i == 1) {
|
||||||
|
{ "foo" }
|
||||||
|
} else if (i == 2) {
|
||||||
|
{ "bar" }
|
||||||
|
} else {
|
||||||
|
{ "baz" }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,10 @@
|
|||||||
|
fun test(i: Int) {
|
||||||
|
var fn: () -> String
|
||||||
|
|
||||||
|
<caret>if (i == 1)
|
||||||
|
fn = { "foo" }
|
||||||
|
else if (i == 2)
|
||||||
|
fn = { "bar" }
|
||||||
|
else
|
||||||
|
fn = { "baz" }
|
||||||
|
}
|
||||||
@@ -0,0 +1,11 @@
|
|||||||
|
fun test(i: Int) {
|
||||||
|
var fn: () -> String
|
||||||
|
|
||||||
|
<caret>fn = if (i == 1) {
|
||||||
|
{ "foo" }
|
||||||
|
} else if (i == 2) {
|
||||||
|
{ "bar" }
|
||||||
|
} else {
|
||||||
|
{ "baz" }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
fun test(b: Boolean) {
|
||||||
|
var fn: () -> String
|
||||||
|
|
||||||
|
<caret>try {
|
||||||
|
fn = { "foo" }
|
||||||
|
} catch (e: Exception) {
|
||||||
|
fn = { "bar" }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
fun test(b: Boolean) {
|
||||||
|
var fn: () -> String
|
||||||
|
|
||||||
|
<caret>fn = try {
|
||||||
|
{ "foo" }
|
||||||
|
} catch (e: Exception) {
|
||||||
|
{ "bar" }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
fun test(b: Boolean) {
|
||||||
|
var fn: () -> String
|
||||||
|
|
||||||
|
<caret>when (b) {
|
||||||
|
true -> {
|
||||||
|
fn = { "foo" }
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
fn = { "bar" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
fun test(b: Boolean) {
|
||||||
|
var fn: () -> String
|
||||||
|
|
||||||
|
<caret>fn = when (b) {
|
||||||
|
true -> {
|
||||||
|
{ "foo" }
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
{ "bar" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
fun test(b: Boolean) {
|
||||||
|
var fn: () -> String
|
||||||
|
|
||||||
|
<caret>when (b) {
|
||||||
|
true -> fn = { "foo" }
|
||||||
|
else -> fn = { "bar" }
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
fun test(b: Boolean) {
|
||||||
|
var fn: () -> String
|
||||||
|
|
||||||
|
<caret>fn = when (b) {
|
||||||
|
true -> {
|
||||||
|
{ "foo" }
|
||||||
|
}
|
||||||
|
else -> {
|
||||||
|
{ "bar" }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
+25
@@ -1795,6 +1795,16 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
|||||||
runTest("idea/testData/inspectionsLocal/liftOut/ifToAssignment/innerIfTransformed.kt");
|
runTest("idea/testData/inspectionsLocal/liftOut/ifToAssignment/innerIfTransformed.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("lambda.kt")
|
||||||
|
public void testLambda() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/liftOut/ifToAssignment/lambda.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("lambda2.kt")
|
||||||
|
public void testLambda2() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/liftOut/ifToAssignment/lambda2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("multipleAssignments.kt")
|
@TestMetadata("multipleAssignments.kt")
|
||||||
public void testMultipleAssignments() throws Exception {
|
public void testMultipleAssignments() throws Exception {
|
||||||
runTest("idea/testData/inspectionsLocal/liftOut/ifToAssignment/multipleAssignments.kt");
|
runTest("idea/testData/inspectionsLocal/liftOut/ifToAssignment/multipleAssignments.kt");
|
||||||
@@ -1951,6 +1961,11 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
|||||||
runTest("idea/testData/inspectionsLocal/liftOut/tryToAssignment/inner.kt");
|
runTest("idea/testData/inspectionsLocal/liftOut/tryToAssignment/inner.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("lambda.kt")
|
||||||
|
public void testLambda() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/liftOut/tryToAssignment/lambda.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("withUnmatchedAssignments.kt")
|
@TestMetadata("withUnmatchedAssignments.kt")
|
||||||
public void testWithUnmatchedAssignments() throws Exception {
|
public void testWithUnmatchedAssignments() throws Exception {
|
||||||
runTest("idea/testData/inspectionsLocal/liftOut/tryToAssignment/withUnmatchedAssignments.kt");
|
runTest("idea/testData/inspectionsLocal/liftOut/tryToAssignment/withUnmatchedAssignments.kt");
|
||||||
@@ -2042,6 +2057,16 @@ public class LocalInspectionTestGenerated extends AbstractLocalInspectionTest {
|
|||||||
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/insideLoop.kt");
|
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/insideLoop.kt");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@TestMetadata("lambda.kt")
|
||||||
|
public void testLambda() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/lambda.kt");
|
||||||
|
}
|
||||||
|
|
||||||
|
@TestMetadata("lambda2.kt")
|
||||||
|
public void testLambda2() throws Exception {
|
||||||
|
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/lambda2.kt");
|
||||||
|
}
|
||||||
|
|
||||||
@TestMetadata("simpleWhen.kt")
|
@TestMetadata("simpleWhen.kt")
|
||||||
public void testSimpleWhen() throws Exception {
|
public void testSimpleWhen() throws Exception {
|
||||||
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/simpleWhen.kt");
|
runTest("idea/testData/inspectionsLocal/liftOut/whenToAssignment/simpleWhen.kt");
|
||||||
|
|||||||
Reference in New Issue
Block a user