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