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 9e4a2603dd [NETBEANS-5659] Collection.forEach is always a read from
the collection.
new 43693c87d7 Merge pull request #6646 from lahodaj/NETBEANS-5659
9e4a2603dd is described below
commit 9e4a2603dd3416b3e68e23ad5b53084a143c4367
Author: Jan Lahoda <[email protected]>
AuthorDate: Tue Oct 31 16:42:33 2023 +0100
[NETBEANS-5659] Collection.forEach is always a read from the collection.
---
.../modules/java/hints/bugs/Unbalanced.java | 9 +++-
.../modules/java/hints/bugs/UnbalancedTest.java | 49 ++++++++++++++++++++++
2 files changed, 56 insertions(+), 2 deletions(-)
diff --git
a/java/java.hints/src/org/netbeans/modules/java/hints/bugs/Unbalanced.java
b/java/java.hints/src/org/netbeans/modules/java/hints/bugs/Unbalanced.java
index 01f969084f..126b3a218b 100644
--- a/java/java.hints/src/org/netbeans/modules/java/hints/bugs/Unbalanced.java
+++ b/java/java.hints/src/org/netbeans/modules/java/hints/bugs/Unbalanced.java
@@ -199,8 +199,10 @@ public class Unbalanced {
private static final Set<String> READ_METHODS = new
HashSet<>(Arrays.asList(
"get", "getOrDefault", "contains", "remove", "containsAll",
"removeAll", "removeIf", "retain", "retainAll", "containsKey",
"containsValue", "iterator", "listIterator", "isEmpty",
"size", "toArray", "entrySet", "keySet", "values", "indexOf", "lastIndexOf",
- "stream", "parallelStream", "spliterator", "forEach"));
- private static final Set<String> WRITE_METHODS = new
HashSet<>(Arrays.asList("add", "addAll", "set", "put", "putAll",
"putIfAbsent"));
+ "stream", "parallelStream", "spliterator", "reversed",
"getFirst", "getLast", "removeFirst", "removeLast"));
+ private static final Set<String> STANDALONE_READ_METHODS = new
HashSet<>(Arrays.asList(
+ "forEach"));
+ private static final Set<String> WRITE_METHODS = new
HashSet<>(Arrays.asList("add", "addAll", "set", "put", "putAll", "putIfAbsent",
"addFirst", "addLast"));
private static boolean testType(CompilationInfo info, TypeMirror
actualType, String superClass) {
TypeElement juCollection =
info.getElements().getTypeElement(superClass);
@@ -244,6 +246,9 @@ public class Unbalanced {
record(ctx.getInfo(), var, State.READ);
}
return null;
+ } else if (STANDALONE_READ_METHODS.contains(methodName)) {
+ record(ctx.getInfo(), var, State.READ);
+ return null;
} else if (WRITE_METHODS.contains(methodName)) {
if
(tp.getParentPath().getParentPath().getParentPath().getLeaf().getKind() !=
Kind.EXPRESSION_STATEMENT) {
record(ctx.getInfo(), var, State.WRITE, State.READ);
diff --git
a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/bugs/UnbalancedTest.java
b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/bugs/UnbalancedTest.java
index fbd11e3255..8df9338bbf 100644
---
a/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/bugs/UnbalancedTest.java
+++
b/java/java.hints/test/unit/src/org/netbeans/modules/java/hints/bugs/UnbalancedTest.java
@@ -527,4 +527,53 @@ com.sun.tools.javac.tree.JCTree$JCCompilationUnit@1b5a415
.run(Unbalanced.Collection.class)
.assertWarnings();
}
+
+ public void testListForEach() throws Exception {
+ HintTest
+ .create()
+ .input("package test;\n" +
+ "public class Test {\n" +
+ " public void t() {\n" +
+ " java.util.List<String> coll = new
java.util.ArrayList<String>();\n" +
+ " coll.add(\"\");\n" +
+ " coll.forEach(e -> {});\n" +
+ " }\n" +
+ "}\n")
+ .run(Unbalanced.Collection.class)
+ .assertWarnings();
+ }
+
+ public void testSequencedCollection1() throws Exception {
+ HintTest
+ .create()
+ .input("package test;\n" +
+ "public class Test {\n" +
+ " public void t() {\n" +
+ " java.util.List<String> coll = new
java.util.ArrayList<String>();\n" +
+ " coll.addFirst(\"\");\n" +
+ " coll.addLast(\"\");\n" +
+ " }\n" +
+ "}\n", false)
+ .run(Unbalanced.Collection.class)
+
.assertWarnings("3:31-3:35:verifier:ERR_UnbalancedCollectionWRITE coll");
+ }
+
+ public void testSequencedCollection2() throws Exception {
+ HintTest
+ .create()
+ .input("package test;\n" +
+ "public class Test {\n" +
+ " public void t() {\n" +
+ " java.util.List<String> coll = new
java.util.ArrayList<String>();\n" +
+ " Object sink;\n" +
+ " sink = coll.reversed();\n" +
+ " sink = coll.getFirst();\n" +
+ " sink = coll.getLast();\n" +
+ " sink = coll.removeFirst();\n" +
+ " sink = coll.removeLast();\n" +
+ " }\n" +
+ "}\n", false)
+ .run(Unbalanced.Collection.class)
+
.assertWarnings("3:31-3:35:verifier:ERR_UnbalancedCollectionREAD coll");
+ }
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]
For further information about the NetBeans mailing lists, visit:
https://cwiki.apache.org/confluence/display/NETBEANS/Mailing+lists