Use ConcurrentHashMap for increasing performance of PythonPathCache.get()
authorAndrey Vlasovskikh <andrey.vlasovskikh@jetbrains.com>
Tue, 28 Oct 2014 12:29:17 +0000 (15:29 +0300)
committerAndrey Vlasovskikh <andrey.vlasovskikh@jetbrains.com>
Tue, 28 Oct 2014 12:29:17 +0000 (15:29 +0300)
python/src/com/jetbrains/python/psi/resolve/PythonPathCache.java

index d2c0aa684fcd5aa12412941f9913d300dc46ed60..5eeeea844998b2ff91b7cb1607abcab0b60b098c 100644 (file)
@@ -18,9 +18,9 @@ package com.jetbrains.python.psi.resolve;
 import com.intellij.openapi.vfs.*;
 import com.intellij.psi.PsiElement;
 import com.intellij.psi.util.QualifiedName;
+import com.intellij.util.containers.ConcurrentHashMap;
 import org.jetbrains.annotations.NotNull;
 
-import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
@@ -28,27 +28,27 @@ import java.util.Map;
  * @author yole
  */
 public abstract class PythonPathCache {
-  private final Map<QualifiedName, List<PsiElement>> myCache = new HashMap<QualifiedName, List<PsiElement>>();
-  private final Map<VirtualFile, List<QualifiedName>> myQNameCache = new HashMap<VirtualFile, List<QualifiedName>>();
+  private final Map<QualifiedName, List<PsiElement>> myCache = new ConcurrentHashMap<QualifiedName, List<PsiElement>>();
+  private final Map<VirtualFile, List<QualifiedName>> myQNameCache = new ConcurrentHashMap<VirtualFile, List<QualifiedName>>();
 
   protected void clearCache() {
     myCache.clear();
     myQNameCache.clear();
   }
 
-  public synchronized List<PsiElement> get(QualifiedName qualifiedName) {
+  public List<PsiElement> get(QualifiedName qualifiedName) {
     return myCache.get(qualifiedName);
   }
 
-  public synchronized void put(QualifiedName qualifiedName, List<PsiElement> results) {
+  public void put(QualifiedName qualifiedName, List<PsiElement> results) {
     myCache.put(qualifiedName, results);
   }
 
-  public synchronized List<QualifiedName> getNames(VirtualFile vFile) {
+  public List<QualifiedName> getNames(VirtualFile vFile) {
     return myQNameCache.get(vFile);
   }
   
-  public synchronized void putNames(VirtualFile vFile, List<QualifiedName> qNames) {
+  public void putNames(VirtualFile vFile, List<QualifiedName> qNames) {
     myQNameCache.put(vFile, qNames);
   }