mirror of
https://github.com/github/codeql.git
synced 2026-02-12 05:01:06 +01:00
java: add tests for thread safe initialisation
Co-authored-by: Raúl Pardo <raul.pardo@protonmail.com>
This commit is contained in:
@@ -43,3 +43,7 @@
|
||||
| examples/Test.java:60:5:60:10 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/Test.java:60:5:60:10 | this.y | this expression |
|
||||
| examples/Test.java:74:5:74:10 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/Test.java:74:5:74:10 | this.y | this expression |
|
||||
| examples/Test.java:74:14:74:14 | y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/Test.java:74:14:74:14 | y | this expression |
|
||||
| examples/ThreadSafeInitializers.java:29:9:29:16 | sync_map | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/ThreadSafeInitializers.java:29:9:29:16 | sync_map | this expression |
|
||||
| examples/ThreadSafeInitializers.java:37:9:37:12 | cmap | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/ThreadSafeInitializers.java:37:9:37:12 | cmap | this expression |
|
||||
| examples/ThreadSafeInitializers.java:45:9:45:14 | this.y | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/ThreadSafeInitializers.java:45:9:45:14 | this.y | this expression |
|
||||
| examples/ThreadSafeInitializers.java:49:9:49:11 | set | This field access (publicly accessible via $@) is not protected by any monitor, but the class is annotated as @ThreadSafe. | examples/ThreadSafeInitializers.java:49:9:49:11 | set | this expression |
|
||||
|
||||
@@ -0,0 +1,55 @@
|
||||
package examples;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
import java.util.HashMap;
|
||||
import java.util.Collections;
|
||||
import java.util.concurrent.ConcurrentHashMap;
|
||||
|
||||
@ThreadSafe
|
||||
public class ThreadSafeInitializers {
|
||||
|
||||
private int y;
|
||||
private final Map<Integer, Integer> sync_map;
|
||||
private final Map<Integer, Integer> sync_map_initialised = Collections.synchronizedMap(new HashMap<Integer, Integer>());
|
||||
|
||||
|
||||
private final Map<String, String> cmap;
|
||||
private final Map<String, String> cmap_initialised = new ConcurrentHashMap();
|
||||
private final Set<Integer> set;
|
||||
private final Set<Integer> set_initialised = ConcurrentHashMap.newKeySet();
|
||||
|
||||
public ThreadSafeInitializers() {
|
||||
sync_map = Collections.synchronizedMap(new HashMap<Integer, Integer>());
|
||||
cmap = new ConcurrentHashMap();
|
||||
set = ConcurrentHashMap.newKeySet();
|
||||
}
|
||||
|
||||
public void sync_map_put(Integer i, Integer v) {
|
||||
sync_map.put(i,v); // $ SPURIOUS: Alert
|
||||
}
|
||||
|
||||
public void sync_map_initialised_put(Integer i, Integer v) {
|
||||
sync_map_initialised.put(i,v);
|
||||
}
|
||||
|
||||
public void cmap_put(String s1, String s2) {
|
||||
cmap.put(s1, s2); // $ SPURIOUS: Alert
|
||||
}
|
||||
|
||||
public void cmap_initialised_put(String s1, String s2) {
|
||||
cmap_initialised.put(s1, s2);
|
||||
}
|
||||
|
||||
public void setY(int y) {
|
||||
this.y = y; // $ Alert
|
||||
}
|
||||
|
||||
public void set_add(Integer i) {
|
||||
set.add(i); // $ SPURIOUS: Alert
|
||||
}
|
||||
|
||||
public void set_initialised_add(Integer i) {
|
||||
set_initialised.add(i);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user