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