Java: Support more variants with switch expressions in '.switch' template (IDEA-204010)

This commit is contained in:
Pavel Dolgov
2019-02-07 18:20:56 +03:00
parent dcb9d4a5c3
commit 729f8b1328
10 changed files with 76 additions and 1 deletions
@@ -140,7 +140,10 @@ public class SwitchStatementPostfixTemplate extends SurroundPostfixTemplateBase
if (parent instanceof PsiExpressionStatement) {
result.add(element);
}
else if (isEnhancedSwitchAvailable && (isVariableInitializer(element, parent) || isRightSideOfAssignment(element, parent))) {
else if (isEnhancedSwitchAvailable && (isVariableInitializer(element, parent) ||
isRightSideOfAssignment(element, parent) ||
isReturnValue(element, parent) ||
isArgumentList(parent))) {
result.add(element);
}
}
@@ -165,6 +168,14 @@ public class SwitchStatementPostfixTemplate extends SurroundPostfixTemplateBase
private boolean isRightSideOfAssignment(PsiElement element, PsiElement parent) {
return parent instanceof PsiAssignmentExpression && ((PsiAssignmentExpression)parent).getRExpression() == element;
}
private boolean isReturnValue(PsiElement element, PsiElement parent) {
return parent instanceof PsiReturnStatement && ((PsiReturnStatement)parent).getReturnValue() == element;
}
private boolean isArgumentList(PsiElement parent) {
return parent instanceof PsiExpressionList && parent.getParent() instanceof PsiCall;
}
};
}
}
@@ -0,0 +1,5 @@
public class Foo {
void f(char x) {
System.out.println(x.switch<caret>);
}
}
@@ -0,0 +1,7 @@
public class Foo {
void f(char x) {
System.out.println(switch (x) {
<caret>
});
}
}
@@ -0,0 +1,5 @@
public class Foo {
String f(char x) {
return x.switch<caret>
}
}
@@ -0,0 +1,7 @@
public class Foo {
String f(char x) {
return switch (x) {
<caret>
}
}
}
@@ -0,0 +1,5 @@
public class Foo {
void f(short x) {
System.out.println(1 + x.switch<caret>);
}
}
@@ -0,0 +1,7 @@
public class Foo {
void f(short x) {
System.out.println(switch (1 + x) {
<caret>
});
}
}
@@ -0,0 +1,5 @@
public class Foo {
String f(short x) {
return 1 + x.switch<caret>
}
}
@@ -0,0 +1,7 @@
public class Foo {
String f(short x) {
return switch (1 + x) {
<caret>
}
}
}
@@ -33,6 +33,22 @@ public class SwitchExpressionPostfixTemplateTest extends PostfixTemplateTestCase
doTest();
}
public void testCharExprReturn() {
doTest();
}
public void testCharExprArg() {
doTest();
}
public void testShortExprReturn() {
doTest();
}
public void testShortExprArg() {
doTest();
}
public void testEnumExprInit() {
doTest();
}