From 0e68af47b794d796ec5337b47d9cf6c28d80bcd3 Mon Sep 17 00:00:00 2001 From: Sergey Evdokimov Date: Thu, 2 Feb 2012 19:05:53 +0400 Subject: [PATCH] Replace ApplicationManager.getApplication().runReadAction() to ApplicationManager.getApplication().acquireReadActionLock(). --- .../MavenSmartCompletionContributor.java | 21 +++++----- .../maven/indices/MavenIndicesManager.java | 16 ++++---- .../maven/project/MavenProjectsManager.java | 13 +++--- .../idea/maven/project/MavenProjectsTree.java | 40 ++++++++++--------- .../idea/maven/utils/MavenJDOMUtil.java | 31 ++++++++------ .../utils/MavenProblemFileHighlighter.java | 16 ++++---- .../maven/wizards/MavenProjectBuilder.java | 32 ++++++++------- .../idea/maven/MavenImportingTestCase.java | 17 ++++---- 8 files changed, 103 insertions(+), 83 deletions(-) diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenSmartCompletionContributor.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenSmartCompletionContributor.java index 52c2b2616f71..46b3838f9cf9 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenSmartCompletionContributor.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/model/completion/MavenSmartCompletionContributor.java @@ -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>() { - @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); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndicesManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndicesManager.java index 4d06f837f9a1..383ac1124ea9 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndicesManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/indices/MavenIndicesManager.java @@ -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() { - @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 diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java index 8ed52326939a..4dfb559d7484 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsManager.java @@ -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() { - 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 modules, boolean mavenized) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java index 7a2b61135328..2cd984935388 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/project/MavenProjectsTree.java @@ -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 explicitProfiles, final MavenGeneralSettings generalSettings) { - return ApplicationManager.getApplication().runReadAction(new Computable() { - 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) { diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenJDOMUtil.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenJDOMUtil.java index a7162adf0e72..707fae5105a6 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenJDOMUtil.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenJDOMUtil.java @@ -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() { - 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); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenProblemFileHighlighter.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenProblemFileHighlighter.java index 49eb62bdcaff..20b2b3293c0b 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenProblemFileHighlighter.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenProblemFileHighlighter.java @@ -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 { } public boolean value(final VirtualFile file) { - return ApplicationManager.getApplication().runReadAction(new Computable() { - 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(); + } } } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectBuilder.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectBuilder.java index b531f5382496..613dc2789961 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectBuilder.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/wizards/MavenProjectBuilder.java @@ -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 { } private MavenWorkspaceSettings getDirectProjectsSettings() { - return ApplicationManager.getApplication().runReadAction(new Computable() { - @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() { - @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 files) { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java index 8f4550408c9b..13b1770f6776 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/MavenImportingTestCase.java @@ -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() { - 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) {