You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@netbeans.apache.org by ak...@apache.org on 2022/10/19 04:24:21 UTC

[netbeans] branch master updated: add semantic highlight for when keyword (#4671)

This is an automated email from the ASF dual-hosted git repository.

akhileshsingh 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 8b15150be2 add semantic highlight for when keyword (#4671)
8b15150be2 is described below

commit 8b15150be29cf545157b7bcaafd87a0bb7b23d14
Author: Meghna Jayan <me...@oracle.com>
AuthorDate: Wed Oct 19 09:54:14 2022 +0530

    add semantic highlight for when keyword (#4671)
    
    * add semantic highlight for when keyword
---
 .../base/semantic/SemanticHighlighterBase.java     | 21 ++++++++
 .../java/editor/base/semantic/DetectorTest.java    | 59 ++++++++++++++++++----
 2 files changed, 69 insertions(+), 11 deletions(-)

diff --git a/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/SemanticHighlighterBase.java b/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/SemanticHighlighterBase.java
index 2bc7bf8f8b..22cc9b2e62 100644
--- a/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/SemanticHighlighterBase.java
+++ b/java/java.editor.base/src/org/netbeans/modules/java/editor/base/semantic/SemanticHighlighterBase.java
@@ -18,6 +18,9 @@
  */
 package org.netbeans.modules.java.editor.base.semantic;
 
+import com.sun.source.tree.BindingPatternTree;
+import com.sun.source.tree.CaseLabelTree;
+import com.sun.source.tree.CaseTree;
 import com.sun.source.tree.ClassTree;
 import com.sun.source.tree.CompilationUnitTree;
 import com.sun.source.tree.ExportsTree;
@@ -32,6 +35,7 @@ import com.sun.source.tree.ModuleTree;
 import com.sun.source.tree.NewClassTree;
 import com.sun.source.tree.OpensTree;
 import com.sun.source.tree.ParameterizedTypeTree;
+import com.sun.source.tree.PatternCaseLabelTree;
 import com.sun.source.tree.ProvidesTree;
 import com.sun.source.tree.RequiresTree;
 import com.sun.source.tree.Tree;
@@ -657,6 +661,23 @@ public abstract class SemanticHighlighterBase extends JavaParserResultTask {
             return super.visitRequires(tree, p);
         }
 
+        @Override
+        public Void visitCase(CaseTree node, Void p) {
+            tl.moveToOffset(sourcePositions.getStartPosition(info.getCompilationUnit(), node));
+            List<? extends CaseLabelTree> labels = node.getLabels();
+            for (CaseLabelTree labelTree : labels) {
+                if (labelTree.getKind().equals(Tree.Kind.PATTERN_CASE_LABEL)) {
+                    PatternCaseLabelTree patternLabel = (PatternCaseLabelTree) labelTree;
+                    tl.moveToOffset(sourcePositions.getEndPosition(info.getCompilationUnit(), patternLabel.getPattern()));
+                    tl.moveNext();
+                    if (tl.currentToken() != null && TokenUtilities.equals(tl.currentToken().text(), "when")) {      //NOI18N
+                        contextKeywords.add(tl.currentToken());
+                    }
+                }
+            }
+            return super.visitCase(node, p);
+        }
+
         @Override
         public Void visitUses(UsesTree tree, Void p) {
             tl.moveToOffset(sourcePositions.getStartPosition(info.getCompilationUnit(), tree));
diff --git a/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/DetectorTest.java b/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/DetectorTest.java
index 5440841b83..d765eec572 100644
--- a/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/DetectorTest.java
+++ b/java/java.editor.base/test/unit/src/org/netbeans/modules/java/editor/base/semantic/DetectorTest.java
@@ -618,9 +618,9 @@ public class DetectorTest extends TestBase {
 
     public void testSwitchPattern() throws Exception {
         try {
-            SourceVersion.valueOf("RELEASE_17"); //NOI18N
+            SourceVersion.valueOf("RELEASE_19"); //NOI18N
         } catch (IllegalArgumentException ex) {
-            //OK, no RELEASE_17, skip tests
+            //OK, no RELEASE_19, skip tests
             return;
         }
         enablePreview();
@@ -630,7 +630,7 @@ public class DetectorTest extends TestBase {
                 + "    void m1() {\n"
                 + "        Object obj = \"test\";\n"
                 + "        switch (obj) {\n"
-                + "            case String s && s.equals(strColor) -> System.out.println(\"same\");\n"
+                + "            case String s when s.equals(strColor) -> System.out.println(\"same\");\n"
                 + "            case default -> System.out.println(\"default\");\n"
                 + "        }\n"
                 + "    }\n"
@@ -642,14 +642,51 @@ public class DetectorTest extends TestBase {
                 + "[PUBLIC, CLASS], 3:8-3:14\n"
                 + "[LOCAL_VARIABLE, DECLARATION], 3:15-3:18\n"
                 + "[LOCAL_VARIABLE], 4:16-4:19\n"
-                + "[PUBLIC, CLASS], 5:17-5:23\n"
-                + "[LOCAL_VARIABLE, DECLARATION], 5:24-5:25\n"
-                + "[LOCAL_VARIABLE], 5:29-5:30\n"
-                + "[PUBLIC, METHOD], 5:31-5:37\n"
-                + "[PACKAGE_PRIVATE, FIELD], 5:38-5:46\n"
-                + "[PUBLIC, CLASS], 5:51-5:57\n"
-                + "[STATIC, PUBLIC, FIELD], 5:58-5:61\n"
-                + "[PUBLIC, METHOD], 5:62-5:69\n"
+                + "[KEYWORD], 5:26-5:30\n"
+                + "[LOCAL_VARIABLE], 5:31-5:32\n"
+                + "[PUBLIC, METHOD], 5:33-5:39\n"
+                + "[PACKAGE_PRIVATE, FIELD], 5:40-5:48\n"
+                + "[PUBLIC, CLASS], 5:53-5:59\n"
+                + "[STATIC, PUBLIC, FIELD], 5:60-5:63\n"
+                + "[PUBLIC, METHOD], 5:64-5:71\n"
+                + "[PUBLIC, CLASS], 6:28-6:34\n"
+                + "[STATIC, PUBLIC, FIELD], 6:35-6:38\n"
+                + "[PUBLIC, METHOD], 6:39-6:46\n");
+    }
+
+    public void testRecordPattern() throws Exception {
+        try {
+            SourceVersion.valueOf("RELEASE_19"); //NOI18N
+        } catch (IllegalArgumentException ex) {
+            //OK, no RELEASE_19, skip tests
+            return;
+        }
+        enablePreview();
+        performTest("TestRecordPattern.java",
+                "public class TestRecordPattern {\n"
+                + "    record Person(int name, int a){}\n"
+                + "    void m1() {\n"
+                + "        Person obj = new Person(1,2);\n"
+                + "        switch (obj) {\n"
+                + "            case Person(int x, int y) when x > 0 -> System.out.println(\"x greater than 0\");\n"
+                + "            case default -> System.out.println(\"default\");\n"
+                + "        }\n"
+                + "    }\n"
+                + "}",
+                "[PUBLIC, CLASS, DECLARATION], 0:13-0:30\n"
+                + "[KEYWORD], 1:4-1:10\n"
+                + "[STATIC, PACKAGE_PRIVATE, RECORD, DECLARATION], 1:11-1:17\n"
+                + "[PUBLIC, RECORD_COMPONENT, DECLARATION], 1:22-1:26\n"
+                + "[PUBLIC, RECORD_COMPONENT, DECLARATION], 1:32-1:33\n"
+                + "[PACKAGE_PRIVATE, METHOD, UNUSED, DECLARATION], 2:9-2:11\n"
+                + "[STATIC, PACKAGE_PRIVATE, RECORD], 3:8-3:14\n"
+                + "[LOCAL_VARIABLE, DECLARATION], 3:15-3:18\n"
+                + "[PACKAGE_PRIVATE, CONSTRUCTOR], 3:25-3:31\n"
+                + "[LOCAL_VARIABLE], 4:16-4:19\n"
+                + "[KEYWORD], 5:38-5:42\n"
+                + "[PUBLIC, CLASS], 5:52-5:58\n"
+                + "[STATIC, PUBLIC, FIELD], 5:59-5:62\n"
+                + "[PUBLIC, METHOD], 5:63-5:70\n"
                 + "[PUBLIC, CLASS], 6:28-6:34\n"
                 + "[STATIC, PUBLIC, FIELD], 6:35-6:38\n"
                 + "[PUBLIC, METHOD], 6:39-6:46\n");


---------------------------------------------------------------------
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