they can be shared over multiply threads (by caches) so these can be
altered by threads
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ElementValue.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ElementValue.java
index d0d6c3c..f2438ea 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ElementValue.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ElementValue.java
@@ -18,6 +18,7 @@
import java.util.List;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import org.eclipse.dltk.annotations.Internal;
import org.eclipse.dltk.compiler.problem.IProblemIdentifier;
@@ -356,7 +357,7 @@
static class TypeValue extends ElementValue implements IValue {
- private final Map<String, IValue> children = new HashMap<String, IValue>(
+ private final Map<String, IValue> children = new ConcurrentHashMap<String, IValue>(
4, 0.9f);
private final JSTypeSet types;
diff --git a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ImmutableValue.java b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ImmutableValue.java
index b62ef97..dce162e 100644
--- a/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ImmutableValue.java
+++ b/plugins/org.eclipse.dltk.javascript.core/src/org/eclipse/dltk/internal/javascript/ti/ImmutableValue.java
@@ -6,6 +6,7 @@
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
import org.eclipse.dltk.javascript.typeinference.ReferenceKind;
import org.eclipse.dltk.javascript.typeinference.ReferenceLocation;
@@ -290,16 +291,19 @@
value = ElementValue.findMemberA(declaredType, name, resolve);
if (value != null) {
if (elementValues == null)
- elementValues = new HashMap<String, IValue>(4, 0.9f);
+ elementValues = new ConcurrentHashMap<String, IValue>(
+ 4, 0.9f);
elementValues.put(name, value);
return value;
+
}
}
for (IRType type : types) {
value = ElementValue.findMemberA(type, name, resolve);
if (value != null) {
if (elementValues == null)
- elementValues = new HashMap<String, IValue>(4, 0.9f);
+ elementValues = new ConcurrentHashMap<String, IValue>(
+ 4, 0.9f);
if (resolve && value instanceof ElementValue) {
value = ((ElementValue) value).resolveValue();
}