Replace ApplicationManager.getApplication().runReadAction() to ApplicationManager.getApplication().acquireReadActionLock().

This commit is contained in:
Sergey Evdokimov
2012-02-02 19:06:16 +04:00
parent 3a290433fb
commit 0e68af47b7
8 changed files with 103 additions and 83 deletions
@@ -20,12 +20,9 @@ import com.intellij.codeInsight.completion.CompletionContributor;
import com.intellij.codeInsight.completion.CompletionParameters;
import com.intellij.codeInsight.completion.CompletionResultSet;
import com.intellij.codeInsight.completion.CompletionType;
import com.intellij.codeInsight.lookup.LookupElement;
import com.intellij.codeInsight.lookup.LookupElementBuilder;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.util.Computable;
import com.intellij.psi.PsiElement;
import com.intellij.psi.PsiNamedElement;
import com.intellij.psi.PsiReference;
import com.intellij.psi.impl.source.xml.TagNameReference;
import com.intellij.psi.xml.XmlText;
@@ -46,12 +43,16 @@ public class MavenSmartCompletionContributor extends CompletionContributor {
public void fillCompletionVariants(final CompletionParameters parameters, CompletionResultSet result) {
if (parameters.getCompletionType() != CompletionType.SMART) return;
Collection<?> variants = ApplicationManager.getApplication().runReadAction(new Computable<Collection<?>>() {
@Override
public Collection<?> compute() {
return getVariants(parameters);
}
});
Collection<?> variants;
AccessToken accessToken = ApplicationManager.getApplication().acquireReadActionLock();
try {
variants = getVariants(parameters);
}
finally {
accessToken.finish();
}
MavenPropertyCompletionContributor.addVariants(variants, result);
}
@@ -16,6 +16,7 @@
package org.jetbrains.idea.maven.indices;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.extensions.Extensions;
@@ -283,14 +284,15 @@ public class MavenIndicesManager {
private static MavenGeneralSettings getMavenSettings(@NotNull final Project project, @NotNull MavenProgressIndicator indicator)
throws MavenProcessCanceledException {
MavenGeneralSettings settings;
MavenGeneralSettings settings = ApplicationManager.getApplication().runReadAction(new Computable<MavenGeneralSettings>() {
@Override
public MavenGeneralSettings compute() {
if (project.isDisposed()) return null;
return MavenProjectsManager.getInstance(project).getGeneralSettings();
}
});
AccessToken accessToken = ApplicationManager.getApplication().acquireReadActionLock();
try {
settings = project.isDisposed() ? null : MavenProjectsManager.getInstance(project).getGeneralSettings();
}
finally {
accessToken.finish();
}
if (settings == null) {
// project was closed
@@ -16,6 +16,7 @@
package org.jetbrains.idea.maven.project;
import com.intellij.ide.startup.StartupManagerEx;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.components.PersistentStateComponent;
import com.intellij.openapi.components.SettingsSavingComponent;
@@ -403,11 +404,13 @@ public class MavenProjectsManager extends MavenSimpleProjectComponent
}
public boolean isMavenizedModule(final Module m) {
return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
public Boolean compute() {
return "true".equals(m.getOptionValue(getMavenizedModuleOptionName()));
}
});
AccessToken accessToken = ApplicationManager.getApplication().acquireReadActionLock();
try {
return "true".equals(m.getOptionValue(getMavenizedModuleOptionName()));
}
finally {
accessToken.finish();
}
}
public void setMavenizedModules(Collection<Module> modules, boolean mavenized) {
@@ -15,10 +15,10 @@
*/
package org.jetbrains.idea.maven.project;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Comparing;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Key;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.io.FileUtil;
@@ -645,27 +645,29 @@ public class MavenProjectsTree {
private MavenProjectTimestamp calculateTimestamp(final MavenProject mavenProject,
final Collection<String> explicitProfiles,
final MavenGeneralSettings generalSettings) {
return ApplicationManager.getApplication().runReadAction(new Computable<MavenProjectTimestamp>() {
public MavenProjectTimestamp compute() {
long pomTimestamp = getFileTimestamp(mavenProject.getFile());
MavenProject parent = findParent(mavenProject);
long parentLastReadStamp = parent == null ? -1 : parent.getLastReadStamp();
VirtualFile profilesXmlFile = mavenProject.getProfilesXmlFile();
long profilesTimestamp = getFileTimestamp(profilesXmlFile);
AccessToken accessToken = ApplicationManager.getApplication().acquireReadActionLock();
try {
long pomTimestamp = getFileTimestamp(mavenProject.getFile());
MavenProject parent = findParent(mavenProject);
long parentLastReadStamp = parent == null ? -1 : parent.getLastReadStamp();
VirtualFile profilesXmlFile = mavenProject.getProfilesXmlFile();
long profilesTimestamp = getFileTimestamp(profilesXmlFile);
long userSettingsTimestamp = getFileTimestamp(generalSettings.getEffectiveUserSettingsFile());
long globalSettingsTimestamp = getFileTimestamp(generalSettings.getEffectiveGlobalSettingsFile());
long userSettingsTimestamp = getFileTimestamp(generalSettings.getEffectiveUserSettingsFile());
long globalSettingsTimestamp = getFileTimestamp(generalSettings.getEffectiveGlobalSettingsFile());
int profilesHashCode = explicitProfiles.hashCode();
int profilesHashCode = explicitProfiles.hashCode();
return new MavenProjectTimestamp(pomTimestamp,
parentLastReadStamp,
profilesTimestamp,
userSettingsTimestamp,
globalSettingsTimestamp,
profilesHashCode);
}
});
return new MavenProjectTimestamp(pomTimestamp,
parentLastReadStamp,
profilesTimestamp,
userSettingsTimestamp,
globalSettingsTimestamp,
profilesHashCode);
}
finally {
accessToken.finish();
}
}
private static long getFileTimestamp(VirtualFile file) {
@@ -15,8 +15,8 @@
*/
package org.jetbrains.idea.maven.utils;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.JDOMUtil;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.openapi.vfs.CharsetToolkit;
@@ -38,19 +38,24 @@ import static com.intellij.openapi.util.text.StringUtil.isEmptyOrSpaces;
public class MavenJDOMUtil {
@Nullable
public static Element read(final VirtualFile file, @Nullable final ErrorHandler handler) {
String text = ApplicationManager.getApplication().runReadAction(new Computable<String>() {
public String compute() {
if (!file.isValid()) return null;
try {
return VfsUtil.loadText(file);
}
catch (IOException e) {
if (handler != null) handler.onReadError(e);
return null;
}
String text;
AccessToken accessToken = ApplicationManager.getApplication().acquireReadActionLock();
try {
if (!file.isValid()) return null;
try {
text = VfsUtil.loadText(file);
}
});
if (text == null) return null;
catch (IOException e) {
if (handler != null) handler.onReadError(e);
return null;
}
}
finally {
accessToken.finish();
}
return doRead(text, handler);
}
@@ -15,9 +15,9 @@
*/
package org.jetbrains.idea.maven.utils;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.util.Condition;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.psi.PsiFile;
@@ -32,11 +32,13 @@ public class MavenProblemFileHighlighter implements Condition<VirtualFile> {
}
public boolean value(final VirtualFile file) {
return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
public Boolean compute() {
PsiFile psiFile = PsiManager.getInstance(myProject).findFile(file);
return psiFile != null && MavenDomUtil.isMavenFile(psiFile);
}
});
AccessToken accessToken = ApplicationManager.getApplication().acquireReadActionLock();
try {
PsiFile psiFile = PsiManager.getInstance(myProject).findFile(file);
return psiFile != null && MavenDomUtil.isMavenFile(psiFile);
}
finally {
accessToken.finish();
}
}
}
@@ -15,6 +15,7 @@
*/
package org.jetbrains.idea.maven.wizards;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.module.ModifiableModuleModel;
import com.intellij.openapi.module.Module;
@@ -25,7 +26,6 @@ import com.intellij.openapi.projectRoots.JavaSdk;
import com.intellij.openapi.projectRoots.Sdk;
import com.intellij.openapi.roots.ui.configuration.ModulesConfigurator;
import com.intellij.openapi.roots.ui.configuration.ModulesProvider;
import com.intellij.openapi.util.Computable;
import com.intellij.openapi.vfs.LocalFileSystem;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packaging.artifacts.ModifiableArtifactModel;
@@ -236,24 +236,26 @@ public class MavenProjectBuilder extends ProjectImportBuilder<MavenProject> {
}
private MavenWorkspaceSettings getDirectProjectsSettings() {
return ApplicationManager.getApplication().runReadAction(new Computable<MavenWorkspaceSettings>() {
@Override
public MavenWorkspaceSettings compute() {
return MavenWorkspaceSettingsComponent.getInstance(getProject()).getState();
}
});
AccessToken accessToken = ApplicationManager.getApplication().acquireReadActionLock();
try {
return MavenWorkspaceSettingsComponent.getInstance(getProject()).getState();
}
finally {
accessToken.finish();
}
}
@NotNull
private Project getProject() {
return ApplicationManager.getApplication().runReadAction(new Computable<Project>() {
@Override
public Project compute() {
Project result = isUpdate() ? getProjectToUpdate() : null;
if (result == null || result.isDisposed()) result = ProjectManager.getInstance().getDefaultProject();
return result;
}
});
AccessToken accessToken = ApplicationManager.getApplication().acquireReadActionLock();
try {
Project result = isUpdate() ? getProjectToUpdate() : null;
if (result == null || result.isDisposed()) result = ProjectManager.getInstance().getDefaultProject();
return result;
}
finally {
accessToken.finish();
}
}
public void setFiles(List<VirtualFile> files) {
@@ -20,6 +20,7 @@ import com.intellij.compiler.CompilerManagerImpl;
import com.intellij.compiler.CompilerWorkspaceConfiguration;
import com.intellij.compiler.impl.ModuleCompileScope;
import com.intellij.compiler.impl.TranslatingCompilerFilesMonitor;
import com.intellij.openapi.application.AccessToken;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.compiler.*;
import com.intellij.openapi.module.Module;
@@ -291,13 +292,15 @@ public abstract class MavenImportingTestCase extends MavenTestCase {
}
protected Module getModule(final String name) {
Module m = ApplicationManager.getApplication().runReadAction(new Computable<Module>() {
public Module compute() {
return ModuleManager.getInstance(myProject).findModuleByName(name);
}
});
assertNotNull("Module " + name + " not found", m);
return m;
AccessToken accessToken = ApplicationManager.getApplication().acquireReadActionLock();
try {
Module m = ModuleManager.getInstance(myProject).findModuleByName(name);
assertNotNull("Module " + name + " not found", m);
return m;
}
finally {
accessToken.finish();
}
}
private ContentEntry getContentRoot(String moduleName) {