NestedIfJoinLinesHandler: fix polyadic case.

Fixes IDEA-190660 ClassCastException after code reformatting using 'Join Lines'
Fixes EA-119515 - CCE: NestedIfJoinLinesHandler.tryJoinLines
This commit is contained in:
Tagir Valeev
2018-04-21 18:10:13 +07:00
parent c54070c74f
commit 2590753b28
6 changed files with 17 additions and 4 deletions

View File

@@ -57,8 +57,8 @@ public class NestedIfJoinLinesHandler implements JoinLinesHandlerDelegate {
String childConditionText = ParenthesesUtils.getText(ct.markUnchanged(innerCondition), ParenthesesUtils.OR_PRECEDENCE);
String parentConditionText = ParenthesesUtils.getText(ct.markUnchanged(outerCondition), ParenthesesUtils.OR_PRECEDENCE);
PsiBinaryExpression newCondition = (PsiBinaryExpression)ct.replace(outerCondition, parentConditionText + "&&" + childConditionText);
PsiElement newCondition = ct.replace(outerCondition, parentConditionText + "&&" + childConditionText);
ct.replaceAndRestoreComments(outerIf.getThenBranch(), innerIf.getThenBranch());
return newCondition.getOperationSign().getTextRange().getStartOffset();
return newCondition.getTextRange().getStartOffset() + parentConditionText.length() + 1;
}
}

View File

@@ -1,5 +1,5 @@
class Foo {
void test(int a, int b) {
if(a > 0 && b < 0) System.out.println(a + b);
if(a > 0 <caret>&& b < 0) System.out.println(a + b);
}
}

View File

@@ -0,0 +1,7 @@
class Foo {
void test(int a, int b) {
<caret>if(a > 0 && a < 10) {
if (b > 0 && b < 10) System.out.println(a + b);
}
}
}

View File

@@ -0,0 +1,5 @@
class Foo {
void test(int a, int b) {
if(a > 0 && a < 10 <caret>&& b > 0 && b < 10) System.out.println(a + b);
}
}

View File

@@ -1,6 +1,6 @@
class Foo {
void test(int a, int b) {
if(a > 0 && b < 0) {
if(a > 0 <caret>&& b < 0) {
System.out.println(a+b);
}
}

View File

@@ -51,6 +51,7 @@ public class JoinLinesTest extends LightCodeInsightTestCase {
public void testAssignmentAndReassignmentWithCall() { doTest(); }
public void testIfChain() { doTest(); }
public void testIfChainPolyadic() { doTest(); }
public void testIfChainNoBraces() { doTest(); }
public void testIfChainElse() { doTest(); }