Skip to content

Commit 0ed724e

Browse files
committed
Java: Make a flow summary for Set.clear using WithoutElement and introduce appropriate tests.
1 parent d3eb9c1 commit 0ed724e

File tree

3 files changed

+13
-2
lines changed

3 files changed

+13
-2
lines changed

java/ql/lib/ext/java.util.model.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,6 +314,7 @@ extensions:
314314
- ["java.util", "Scanner", True, "useLocale", "", "", "Argument[this]", "ReturnValue", "value", "manual"]
315315
- ["java.util", "Scanner", True, "useRadix", "", "", "Argument[this]", "ReturnValue", "value", "manual"]
316316
- ["java.util", "Set", False, "copyOf", "(Collection)", "", "Argument[0].Element", "ReturnValue.Element", "value", "manual"]
317+
- ["java.util", "Set", False, "clear", "()", "", "Argument[this].WithoutElement", "Argument[this]", "value", "manual"]
317318
- ["java.util", "Set", False, "of", "(Object)", "", "Argument[0]", "ReturnValue.Element", "value", "manual"]
318319
- ["java.util", "Set", False, "of", "(Object,Object)", "", "Argument[0..1]", "ReturnValue.Element", "value", "manual"]
319320
- ["java.util", "Set", False, "of", "(Object,Object,Object)", "", "Argument[0..2]", "ReturnValue.Element", "value", "manual"]
@@ -427,7 +428,6 @@ extensions:
427428
- ["java.util", "Iterator", "remove", "()", "summary", "manual"]
428429
- ["java.util", "List", "remove", "(Object)", "summary", "manual"]
429430
- ["java.util", "Map", "clear", "()", "summary", "manual"]
430-
- ["java.util", "Set", "clear", "()", "summary", "manual"]
431431
- ["java.util", "Set", "remove", "(Object)", "summary", "manual"]
432432
- ["java.util", "Set", "removeAll", "(Collection)", "summary", "manual"]
433433

java/ql/test/library-tests/dataflow/collections/B.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ public class B {
99
static void sink(Object obj) { }
1010

1111
static Object[] storeArrayElement(Object obj) { return new Object[] {obj}; }
12+
static Set storeSetElement(Object obj) { return Set.of(obj); }
1213

1314
static Object readArrayElement(Object[] obj) { return obj[0]; }
1415
static boolean readArrayElement(boolean[] obj) { return obj[0]; }
@@ -1232,6 +1233,16 @@ void foo() throws InterruptedException {
12321233
Map out = null;
12331234
Object[] in = storeArrayElement(storeMapValue(source())); out = Map.ofEntries((Map.Entry[])in); sink(readMapValue(out)); // $ hasValueFlow
12341235
}
1236+
{
1237+
// "java.util;Set;true;clear;;;Argument[this].WithoutElement;Argument[this];value;manual"
1238+
Set out = null;
1239+
Set in = storeSetElement(source()); out = in; out.clear(); sink(readElement(out)); // No flow
1240+
}
1241+
{
1242+
// "java.util;Set;true;clear;;;Argument[this].WithoutElement;Argument[this];value;manual"
1243+
Set out = null;
1244+
Set in = (Set)source(); out = in; out.clear(); sink(out); // $ hasValueFlow
1245+
}
12351246
{
12361247
// "java.util;Set;false;copyOf;(Collection);;Argument[0].Element;ReturnValue.Element;value;manual",
12371248
Set out = null;

java/ql/test/query-tests/Metrics/GeneratedVsManualCoverage/TopJdkApisTest/TopJdkApisTest.expected

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
| java.time | 0 | 0 | 0 | 17 | 17 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 |
1414
| java.time.chrono | 0 | 0 | 0 | 1 | 1 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 |
1515
| java.time.format | 0 | 0 | 0 | 2 | 2 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 |
16-
| java.util | 0 | 0 | 85 | 67 | 152 | 0.5592105263157895 | 0.0 | 0.5592105263157895 | 0.0 | NaN | 0.4407894736842105 |
16+
| java.util | 0 | 0 | 86 | 66 | 152 | 0.5657894736842105 | 0.0 | 0.5657894736842105 | 0.0 | NaN | 0.4342105263157895 |
1717
| java.util.concurrent | 0 | 0 | 9 | 9 | 18 | 0.5 | 0.0 | 0.5 | 0.0 | NaN | 0.5 |
1818
| java.util.concurrent.atomic | 0 | 0 | 2 | 11 | 13 | 0.15384615384615385 | 0.0 | 0.15384615384615385 | 0.0 | NaN | 0.8461538461538461 |
1919
| java.util.concurrent.locks | 0 | 0 | 0 | 2 | 2 | 0.0 | 0.0 | 0.0 | NaN | NaN | 1.0 |

0 commit comments

Comments
 (0)