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);
@@ -27,9 +27,7 @@ import com.intellij.psi.PsiAnnotation;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiFile;
import com.intellij.psi.PsiModifierListOwner;
import com.intellij.util.NotNullFunction;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public abstract class ExternalAnnotationsManager {
@@ -41,12 +39,7 @@ public abstract class ExternalAnnotationsManager {
NOWHERE
}
private static final NotNullLazyKey<ExternalAnnotationsManager, Project> INSTANCE_KEY = NotNullLazyKey.create("ExternalAnnotationsManager.Instance.Cache", new NotNullFunction<Project, ExternalAnnotationsManager>() {
@NotNull
public ExternalAnnotationsManager fun(final Project project) {
return ServiceManager.getService(project, ExternalAnnotationsManager.class);
}
});
private static final NotNullLazyKey<ExternalAnnotationsManager, Project> INSTANCE_KEY = ServiceManager.createLazyKey(ExternalAnnotationsManager.class);
public static ExternalAnnotationsManager getInstance(Project project) {
return INSTANCE_KEY.getValue(project);
@@ -25,18 +25,12 @@ import com.intellij.openapi.util.NotNullLazyKey;
import com.intellij.psi.javadoc.JavadocManager;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.psi.search.PsiShortNamesCache;
import com.intellij.util.NotNullFunction;
import org.jetbrains.annotations.NonNls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
public abstract class JavaPsiFacade {
private static final NotNullLazyKey<JavaPsiFacade, Project> INSTANCE_KEY = NotNullLazyKey.create("JavaPsiFacade.Instance.Cache", new NotNullFunction<Project, JavaPsiFacade>() {
@NotNull
public JavaPsiFacade fun(final Project project) {
return ServiceManager.getService(project, JavaPsiFacade.class);
}
});
private static final NotNullLazyKey<JavaPsiFacade, Project> INSTANCE_KEY = ServiceManager.createLazyKey(JavaPsiFacade.class);
public static JavaPsiFacade getInstance(Project project) {
return INSTANCE_KEY.getValue(project);
@@ -199,4 +193,4 @@ public abstract class JavaPsiFacade {
public abstract boolean arePackagesTheSame(@NotNull PsiElement element1, @NotNull PsiElement element2);
public abstract Project getProject();
}
}