aboutsummaryrefslogtreecommitdiffstats
path: root/javaparser-core/src/main/java/com
diff options
context:
space:
mode:
authorDanny van Bruggen <hexagonaal@gmail.com>2017-12-14 19:53:10 +0100
committerDanny van Bruggen <hexagonaal@gmail.com>2017-12-14 19:53:10 +0100
commitcae523690100b579414893fd057cd385fb5440ea (patch)
treea8c0884a21a952a3029b1da6639f1af43acae4be /javaparser-core/src/main/java/com
parentf2fb810f9def9a6395187b6de57fcbbb108c9182 (diff)
downloadplatform_external_javaparser-cae523690100b579414893fd057cd385fb5440ea.tar.gz
platform_external_javaparser-cae523690100b579414893fd057cd385fb5440ea.tar.bz2
platform_external_javaparser-cae523690100b579414893fd057cd385fb5440ea.zip
Make global cache thread safe
Diffstat (limited to 'javaparser-core/src/main/java/com')
-rw-r--r--javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/PhantomNodeLogic.java15
1 files changed, 9 insertions, 6 deletions
diff --git a/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/PhantomNodeLogic.java b/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/PhantomNodeLogic.java
index a56662e05..5dfe79933 100644
--- a/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/PhantomNodeLogic.java
+++ b/javaparser-core/src/main/java/com/github/javaparser/printer/lexicalpreservation/PhantomNodeLogic.java
@@ -27,6 +27,9 @@ import com.github.javaparser.ast.observer.AstObserverAdapter;
import com.github.javaparser.ast.type.UnknownType;
import java.util.IdentityHashMap;
+import java.util.Map;
+
+import static java.util.Collections.synchronizedMap;
/**
* We want to recognize and ignore "phantom" nodes, like the fake type of variable in FieldDeclaration
@@ -35,7 +38,7 @@ class PhantomNodeLogic {
private static final int LEVELS_TO_EXPLORE = 3;
- private static final IdentityHashMap<Node, Boolean> isPhantomNodeCache = new IdentityHashMap<>();
+ private static final Map<Object, Boolean> isPhantomNodeCache = synchronizedMap(new IdentityHashMap<>());
private static final AstObserver cacheCleaner = new AstObserverAdapter() {
@Override
@@ -45,19 +48,19 @@ class PhantomNodeLogic {
};
static boolean isPhantomNode(Node node) {
- boolean res;
if (isPhantomNodeCache.containsKey(node)) {
- res = isPhantomNodeCache.get(node);
+ return isPhantomNodeCache.get(node);
} else {
if (node instanceof UnknownType) {
return true;
}
- res = (node.getParentNode().isPresent() && !node.getParentNode().get().getRange().get().contains(
- node.getRange().get()) || inPhantomNode(node, LEVELS_TO_EXPLORE));
+ boolean res = (node.getParentNode().isPresent() &&
+ !node.getParentNode().get().getRange().get().contains(node.getRange().get())
+ || inPhantomNode(node, LEVELS_TO_EXPLORE));
isPhantomNodeCache.put(node, res);
node.register(cacheCleaner);
+ return res;
}
- return res;
}
/**