mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Contention on getInstance() for quite a few services relaxed.
This commit is contained in:
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
+5
-2
@@ -21,6 +21,7 @@ import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.progress.ProgressManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.NotNullLazyKey;
|
||||
import com.intellij.openapi.util.Trinity;
|
||||
import com.intellij.patterns.*;
|
||||
import com.intellij.pom.references.PomReferenceProvider;
|
||||
@@ -58,8 +59,10 @@ public class ReferenceProvidersRegistry extends PsiReferenceRegistrar {
|
||||
};
|
||||
private final Project myProject;
|
||||
|
||||
public static ReferenceProvidersRegistry getInstance(@NotNull Project project) {
|
||||
return ServiceManager.getService(project, ReferenceProvidersRegistry.class);
|
||||
private final static NotNullLazyKey<ReferenceProvidersRegistry, Project> INSTANCE_CACHE = ServiceManager.createLazyKey(ReferenceProvidersRegistry.class);
|
||||
|
||||
public static ReferenceProvidersRegistry getInstance(Project project) {
|
||||
return INSTANCE_CACHE.getValue(project);
|
||||
}
|
||||
|
||||
public ReferenceProvidersRegistry(Project project) {
|
||||
|
||||
@@ -18,6 +18,9 @@ package com.intellij.openapi.components;
|
||||
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.NotNullLazyKey;
|
||||
import com.intellij.util.NotNullFunction;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
|
||||
/**
|
||||
@@ -36,5 +39,13 @@ public class ServiceManager {
|
||||
public static <T> T getService(Project project, Class<T> serviceClass) {
|
||||
return (T)project.getPicoContainer().getComponentInstance(serviceClass.getName());
|
||||
}
|
||||
|
||||
|
||||
public static <T> NotNullLazyKey<T, Project> createLazyKey(final Class<T> serviceClass) {
|
||||
return NotNullLazyKey.create("Service: " + serviceClass.getName(), new NotNullFunction<Project, T>() {
|
||||
@NotNull
|
||||
public T fun(Project project) {
|
||||
return getService(project, serviceClass);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,7 +22,6 @@ import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.components.ServiceManager;
|
||||
import com.intellij.openapi.ui.popup.BalloonHandler;
|
||||
import com.intellij.openapi.util.NotNullLazyKey;
|
||||
import com.intellij.util.NotNullFunction;
|
||||
import com.intellij.util.concurrency.Semaphore;
|
||||
import com.intellij.util.messages.Topic;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -95,12 +94,7 @@ public abstract class DumbService {
|
||||
}, modalityState);
|
||||
}
|
||||
|
||||
private static final NotNullLazyKey<DumbService, Project> INSTANCE_KEY = NotNullLazyKey.create("DumbService.Cache", new NotNullFunction<Project, DumbService>() {
|
||||
@NotNull
|
||||
public DumbService fun(final Project project) {
|
||||
return ServiceManager.getService(project, DumbService.class);
|
||||
}
|
||||
});
|
||||
private static final NotNullLazyKey<DumbService, Project> INSTANCE_KEY = ServiceManager.createLazyKey(DumbService.class);
|
||||
|
||||
public static DumbService getInstance(@NotNull Project project) {
|
||||
return INSTANCE_KEY.getValue(project);
|
||||
|
||||
@@ -22,6 +22,7 @@ import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Factory;
|
||||
import com.intellij.openapi.util.Key;
|
||||
import com.intellij.openapi.util.ModificationTracker;
|
||||
import com.intellij.openapi.util.NotNullLazyKey;
|
||||
import com.intellij.psi.PsiReferenceFactory;
|
||||
import com.intellij.psi.xml.XmlAttribute;
|
||||
import com.intellij.psi.xml.XmlFile;
|
||||
@@ -40,8 +41,10 @@ import java.lang.reflect.Type;
|
||||
public abstract class DomManager implements ModificationTracker {
|
||||
public static final Key<Module> MOCK_ELEMENT_MODULE = Key.create("MockElementModule");
|
||||
|
||||
private final static NotNullLazyKey<DomManager, Project> INSTANCE_CACHE = ServiceManager.createLazyKey(DomManager.class);
|
||||
|
||||
public static DomManager getDomManager(Project project) {
|
||||
return ServiceManager.getService(project, DomManager.class);
|
||||
return INSTANCE_CACHE.getValue(project);
|
||||
}
|
||||
|
||||
public abstract Project getProject();
|
||||
|
||||
@@ -381,8 +381,11 @@ public class ExternalResourceManagerImpl extends ExternalResourceManagerEx imple
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
private final static NotNullLazyKey<ProjectResources, Project> INSTANCE_CACHE = ServiceManager.createLazyKey(ProjectResources.class);
|
||||
|
||||
private static ExternalResourceManagerImpl getProjectResources(Project project) {
|
||||
return ServiceManager.getService(project, ProjectResources.class);
|
||||
return INSTANCE_CACHE.getValue(project);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user