You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ne...@apache.org on 2019/07/03 09:35:48 UTC
[netbeans] branch master updated: [NETBEANS-2745]:Fixed Convert
Switch to Switch Expression hint for default case without break (#1323)
This is an automated email from the ASF dual-hosted git repository.
neilcsmith pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/netbeans.git
The following commit(s) were added to refs/heads/master by this push:
new f3b166f [NETBEANS-2745]:Fixed Convert Switch to Switch Expression hint for default case without break (#1323)
f3b166f is described below
commit f3b166ff0e7c7e84cd49581b62e35b6fa9fa24a5
Author: Arunava Sinha <ar...@oracle.com>
AuthorDate: Wed Jul 3 15:05:41 2019 +0530
[NETBEANS-2745]:Fixed Convert Switch to Switch Expression hint for default case without break (#1323)
---
.../modules/java/hints/errors/Utilities.java | 48 ++++++++++---
.../hints/jdk/ConvertSwitchToRuleSwitchTest.java | 81 +++++++++++++++++++---
2 files changed, 108 insertions(+), 21 deletions(-)
diff --git a/java/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java b/java/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java
index 1113c9b..b436b55 100644
--- a/java/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java
+++ b/java/java.hints/src/org/netbeans/modules/java/hints/errors/Utilities.java
@@ -3114,7 +3114,11 @@ public class Utilities {
public static boolean isCompatibleWithSwitchExpression(SwitchTree st) {
boolean firstCase = true;
Name leftTreeName = null;
- for (CaseTree ct : st.getCases()) {
+ int caseCount = 0;
+ List<? extends CaseTree> cases = st.getCases();
+
+ for (CaseTree ct : cases) {
+ caseCount++;
List<StatementTree> statements = new ArrayList<>(ct.getStatements());
switch (statements.size()) {
case 0:
@@ -3122,22 +3126,33 @@ public class Utilities {
case 1:
if (firstCase && leftTreeName == null && statements.get(0).getKind() == Tree.Kind.RETURN) {
break;
+ } else if (caseCount == cases.size() && statements.get(0).getKind() == Tree.Kind.EXPRESSION_STATEMENT) {
+ if (firstCase) {
+ leftTreeName = getLeftTreeName(statements.get(0));
+ if (leftTreeName == null) {
+ return false;
+ }
+ break;
+ } else {
+ if (leftTreeName != null && leftTreeName.contentEquals(getLeftTreeName(statements.get(0)))) {
+ break;
+ } else {
+ return false;
+ }
+ }
} else {
return false;
}
case 2:
if (statements.get(0).getKind() == Tree.Kind.EXPRESSION_STATEMENT && statements.get(1).getKind() == Tree.Kind.BREAK) {
- StatementTree statementTree = statements.get(0);
- JCTree.JCExpressionStatement jceTree = (JCTree.JCExpressionStatement) statementTree;
- if (!(jceTree.expr instanceof JCTree.JCAssign)) {
- return false;
- }
- JCTree.JCAssign assignTree = (JCTree.JCAssign) jceTree.expr;
if (firstCase) {
- leftTreeName = ((JCTree.JCIdent) assignTree.lhs).name;
+ leftTreeName = getLeftTreeName(statements.get(0));
+ if (leftTreeName == null) {
+ return false;
+ }
firstCase = false;
- break;
- } else if (leftTreeName != null && leftTreeName.contentEquals(((JCTree.JCIdent) assignTree.lhs).name)) {
+ }
+ if (leftTreeName != null && leftTreeName.contentEquals(getLeftTreeName(statements.get(0)))) {
break;
} else {
return false;
@@ -3287,5 +3302,16 @@ public class Utilities {
return null;
}
}
-
+
+ private static Name getLeftTreeName(StatementTree statement) {
+ if (statement.getKind() != Kind.EXPRESSION_STATEMENT) {
+ return null;
+ }
+ JCTree.JCExpressionStatement jceTree = (JCTree.JCExpressionStatement) statement;
+ if (jceTree.expr.getKind() != Kind.ASSIGNMENT) {
+ return null;
+ }
+ JCTree.JCAssign assignTree = (JCTree.JCAssign) jceTree.expr;
+ return ((JCTree.JCIdent) assignTree.lhs).name;
+ }
}
diff --git a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertSwitchToRuleSwitchTest.java b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertSwitchToRuleSwitchTest.java
index b800860..754a8e7 100644
--- a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertSwitchToRuleSwitchTest.java
+++ b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/jdk/ConvertSwitchToRuleSwitchTest.java
@@ -497,20 +497,20 @@ public class ConvertSwitchToRuleSwitchTest extends NbTestCase {
HintTest.create()
.input("package test;" +
"public class Test {\n" +
- " private void test(int p) {\n" +
- " String result;\n" +
- " switch (p) {\n" +
- " case 1:\n" +
- " case 2: result = \"2\"; break;\n" +
- " case 3: result = \"3\"; break;\n" +
- " default: result = \"default\"; break;\n" +
- " }\n" +
- " }\n" +
+ " private void test(int p) {\n" +
+ " String result;\n" +
+ " switch (p) {\n" +
+ " case 1:\n" +
+ " case 2: result = \"2\"; break;\n" +
+ " case 3: result = \"3\"; break;\n" +
+ " default: result = \"default\"; break;\n" +
+ " }\n" +
+ " }\n" +
"}\n")
.sourceLevel(SourceVersion.latest().name())
.options("--enable-preview")
.run(ConvertSwitchToRuleSwitch.class)
- .findWarning("3:9-3:15:verifier:" + Bundle.ERR_ConvertSwitchToSwitchExpression())
+ .findWarning("3:8-3:14:verifier:" + Bundle.ERR_ConvertSwitchToSwitchExpression())
.applyFix()
.assertCompilable()
.assertOutput("package test;" +
@@ -526,6 +526,67 @@ public class ConvertSwitchToRuleSwitchTest extends NbTestCase {
"}\n");
}
+ public void testSwitch2SwitchExpressionMultiCase2() throws Exception {
+ HintTest.create()
+ .input("package test;" +
+ "public class Test {\n" +
+ " private void test(int p) {\n" +
+ " String result;\n" +
+ " switch (p) {\n" +
+ " case 1:\n" +
+ " case 2: result = \"2\"; break;\n" +
+ " case 3: result = \"3\"; break;\n" +
+ " default: result = \"default\";\n" +
+ " }\n" +
+ " }\n" +
+ "}\n")
+ .sourceLevel(SourceVersion.latest().name())
+ .options("--enable-preview")
+ .run(ConvertSwitchToRuleSwitch.class)
+ .findWarning("3:8-3:14:verifier:" + Bundle.ERR_ConvertSwitchToSwitchExpression())
+ .applyFix()
+ .assertCompilable()
+ .assertOutput("package test;" +
+ "public class Test {\n" +
+ " private void test(int p) {\n" +
+ " String result;\n" +
+ " result = switch (p) {\n" +
+ " case 1, 2 -> \"2\";\n" +
+ " case 3 -> \"3\";\n" +
+ " default -> \"default\";\n" +
+ " };\n" +
+ " }\n" +
+ "}\n");
+ }
+
+ public void testSwitch2SwitchExpressionOnlyDefault() throws Exception {
+ HintTest.create()
+ .input("package test;" +
+ "public class Test {\n" +
+ " private void test(int p) {\n" +
+ " String result;\n" +
+ " switch (p) {\n" +
+ " default: result = \"default\";\n" +
+ " }\n" +
+ " }\n" +
+ "}\n")
+ .sourceLevel(SourceVersion.latest().name())
+ .options("--enable-preview")
+ .run(ConvertSwitchToRuleSwitch.class)
+ .findWarning("3:8-3:14:verifier:" + Bundle.ERR_ConvertSwitchToSwitchExpression())
+ .applyFix()
+ .assertCompilable()
+ .assertOutput("package test;" +
+ "public class Test {\n" +
+ " private void test(int p) {\n" +
+ " String result;\n" +
+ " result = switch (p) {\n" +
+ " default -> \"default\";\n" +
+ " };\n" +
+ " }\n" +
+ "}\n");
+ }
+
public void testSwitch2SwitchExpressionNestedInnerSwitchExpression() throws Exception {
HintTest.create()
.input("package test;" +
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@netbeans.apache.org
For additional commands, e-mail: commits-help@netbeans.apache.org
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists