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 2022/02/01 15:31:28 UTC

[netbeans] branch delivery updated: [jackpot] DefaultRuleUtilities::referencedIn fix for single variable matching.

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

neilcsmith pushed a commit to branch delivery
in repository https://gitbox.apache.org/repos/asf/netbeans.git


The following commit(s) were added to refs/heads/delivery by this push:
     new 1572a44  [jackpot] DefaultRuleUtilities::referencedIn fix for single variable matching.
     new fd384f0  Merge pull request #3540 from mbien/referencedIn-fix
1572a44 is described below

commit 1572a44fd4b0b22accd8b5de50b527affdb80585
Author: Michael Bien <mb...@gmail.com>
AuthorDate: Sat Jan 29 22:04:23 2022 +0100

    [jackpot] DefaultRuleUtilities::referencedIn fix for single variable matching.
---
 .../hints/declarative/conditionapi/Matcher.java    | 20 +++++-
 .../declarative/conditionapi/isReferencedIn.hint   | 30 +++++++++
 .../declarative/conditionapi/isReferencedIn.test   | 75 ++++++++++++++++++++++
 3 files changed, 122 insertions(+), 3 deletions(-)

diff --git a/java/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/conditionapi/Matcher.java b/java/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/conditionapi/Matcher.java
index 3e2f58a..d87e171 100644
--- a/java/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/conditionapi/Matcher.java
+++ b/java/java.hints.declarative/src/org/netbeans/modules/java/hints/declarative/conditionapi/Matcher.java
@@ -21,6 +21,7 @@ package org.netbeans.modules.java.hints.declarative.conditionapi;
 
 import com.sun.source.tree.Tree;
 import com.sun.source.util.TreePath;
+import com.sun.source.util.Trees;
 import org.netbeans.api.java.source.support.ErrorAwareTreePathScanner;
 import java.util.Collection;
 import java.util.LinkedList;
@@ -90,26 +91,39 @@ public final class Matcher {
         return result[0];
     }
 
+    @SuppressWarnings("BoxedValueEquality")
     public boolean referencedIn(@NonNull Variable variable, @NonNull Variable in) {
-        final Element e = ctx.ctx.getInfo().getTrees().getElement(ctx.getSingleVariable(variable));
+        final Trees trees = ctx.ctx.getInfo().getTrees();
+        final Element e = trees.getElement(ctx.getSingleVariable(variable));
 
         if (e == null) { //TODO: check also error
             return false;
         }
 
         for (TreePath tp : ctx.getVariable(in)) {
+
+            if (e.equals(trees.getElement(tp))) {
+                return true;
+            }
+
             boolean occurs = new ErrorAwareTreePathScanner<Boolean, Void>() {
+                private boolean found = false;
                 @Override
                 public Boolean scan(Tree tree, Void p) {
+                    if (found) {
+                        return true; // fast path
+                    }
+
                     if (tree == null) {
                         return false;
                     }
 
                     TreePath currentPath = new TreePath(getCurrentPath(), tree);
-                    Element currentElement = ctx.ctx.getInfo().getTrees().getElement(currentPath);
+                    Element currentElement = trees.getElement(currentPath);
 
                     if (e.equals(currentElement)) {
-                        return true; //TODO: throwing an exception might be faster...
+                        found = true;
+                        return true;
                     }
 
                     return super.scan(tree, p);
diff --git a/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/conditionapi/isReferencedIn.hint b/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/conditionapi/isReferencedIn.hint
new file mode 100644
index 0000000..41e917e
--- /dev/null
+++ b/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/conditionapi/isReferencedIn.hint
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+int $a = 0;
+int $b = $c; :: !referencedIn($a, $c)
+=>
+int $b = $c;
+;;
+
+int $a = 1;
+java.util.Arrays.asList($args$); :: !referencedIn($a, $args$)
+=>
+java.util.Arrays.asList($args$);
+;;
diff --git a/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/conditionapi/isReferencedIn.test b/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/conditionapi/isReferencedIn.test
new file mode 100644
index 0000000..112b544
--- /dev/null
+++ b/java/java.hints.declarative/test/unit/src/org/netbeans/modules/java/hints/declarative/conditionapi/isReferencedIn.test
@@ -0,0 +1,75 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+%%TestCase is-referenced-1
+package test;
+public class Test {
+    private void t() {
+        int a = 0;
+        int b = 2 + 1;
+    }
+}
+%%=>
+package test;
+public class Test {
+    private void t() {
+        int b = 2 + 1;
+    }
+}
+%%TestCase is-referenced-2
+package test;
+public class Test {
+    private void t() {
+        int a = 0;
+        int b = a;
+    }
+}
+%%TestCase is-referenced-3
+package test;
+public class Test {
+    private void t() {
+        int a = 0;
+        int b = a + 1;
+    }
+}
+%%TestCase is-referenced-4
+package test;
+import java.util.Arrays;
+public class Test {
+    private void t() {
+        int a = 1;
+        Arrays.asList(0, 5, a);
+    }
+}
+%%TestCase is-referenced-5
+package test;
+import java.util.Arrays;
+public class Test {
+    private void t() {
+        int a = 1;
+        Arrays.asList(0, 5, 4);
+    }
+}
+%%=>
+package test;
+import java.util.Arrays;
+public class Test {
+    private void t() {
+        Arrays.asList(0, 5, 4);
+    }
+}

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