Contention on getInstance() for quite a few services relaxed.

This commit is contained in:
Maxim Shafirov
2009-11-04 22:47:50 +03:00
parent be003f732f
commit 35846cc462
9 changed files with 31 additions and 42 deletions
@@ -30,7 +30,6 @@ import com.intellij.openapi.util.NotNullLazyKey;
import com.intellij.psi.PsiElement;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.util.ConcurrencyUtil;
import com.intellij.util.NotNullFunction;
import com.intellij.util.containers.ConcurrentWeakHashMap;
import com.intellij.util.containers.ContainerUtil;
import org.jetbrains.annotations.NotNull;
@@ -44,12 +43,7 @@ public class ControlFlowFactory {
// psiElements hold weakly, controlFlows softly
private final ConcurrentMap<PsiElement, Reference<CopyOnWriteArrayList<ControlFlowContext>>> cachedFlows = new ConcurrentWeakHashMap<PsiElement, Reference<CopyOnWriteArrayList<ControlFlowContext>>>();
private static final NotNullLazyKey<ControlFlowFactory, Project> INSTANCE_KEY = NotNullLazyKey.create("ControlFlowFactory.Instance.Cache", new NotNullFunction<Project, ControlFlowFactory>() {
@NotNull
public ControlFlowFactory fun(final Project project) {
return ServiceManager.getService(project, ControlFlowFactory.class);
}
});
private static final NotNullLazyKey<ControlFlowFactory, Project> INSTANCE_KEY = ServiceManager.createLazyKey(ControlFlowFactory.class);
public static ControlFlowFactory getInstance(Project project) {
return INSTANCE_KEY.getValue(project);
@@ -31,7 +31,6 @@ import com.intellij.psi.PsiVariable;
import com.intellij.psi.impl.PsiManagerEx;
import com.intellij.util.ConcurrencyUtil;
import com.intellij.util.Function;
import com.intellij.util.NotNullFunction;
import com.intellij.util.containers.ConcurrentWeakHashMap;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
@@ -44,12 +43,7 @@ import java.util.concurrent.ConcurrentMap;
public class JavaResolveCache {
private static final Logger LOG = Logger.getInstance("#com.intellij.psi.impl.source.resolve.JavaResolveCache");
private static final NotNullLazyKey<JavaResolveCache, Project> INSTANCE_KEY = NotNullLazyKey.create("JavaResolveCache.Instance.Cache", new NotNullFunction<Project, JavaResolveCache>() {
@NotNull
public JavaResolveCache fun(final Project project) {
return ServiceManager.getService(project, JavaResolveCache.class);
}
});
private static final NotNullLazyKey<JavaResolveCache, Project> INSTANCE_KEY = ServiceManager.createLazyKey(JavaResolveCache.class);
public static JavaResolveCache getInstance(Project project) {
return INSTANCE_KEY.getValue(project);