From e69981a75e23f98ec4dcb8d6cec329087f8f7983 Mon Sep 17 00:00:00 2001 From: Kirill Likhodedov Date: Fri, 10 Oct 2014 14:44:46 +0400 Subject: [PATCH] [vcs] IDEA-131106 Fix read action in pre-commit code analysis --- .../vcs/impl/CodeSmellDetectorImpl.java | 21 ++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/CodeSmellDetectorImpl.java b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/CodeSmellDetectorImpl.java index 48d72083b7d6..3a52951bcc20 100644 --- a/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/CodeSmellDetectorImpl.java +++ b/platform/vcs-impl/src/com/intellij/openapi/vcs/impl/CodeSmellDetectorImpl.java @@ -30,6 +30,7 @@ import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.util.TextRange; import com.intellij.openapi.vcs.AbstractVcsHelper; import com.intellij.openapi.vcs.CodeSmellDetector; @@ -120,14 +121,19 @@ public class CodeSmellDetectorImpl extends CodeSmellDetector { if (progress != null && progress.isCanceled()) throw new ProcessCanceledException(); - VirtualFile file = filesToCheck.get(i); + final VirtualFile file = filesToCheck.get(i); if (progress != null) { progress.setText(VcsBundle.message("searching.for.code.smells.processing.file.progress.text", file.getPresentableUrl())); progress.setFraction((double)i / (double)filesToCheck.size()); } - final PsiFile psiFile = manager.findFile(file); + final PsiFile psiFile = ApplicationManager.getApplication().runReadAction(new Computable() { + @Override + public PsiFile compute() { + return manager.findFile(file); + } + }); if (psiFile != null) { final Document document = fileManager.getDocument(file); if (document != null) { @@ -156,11 +162,16 @@ public class CodeSmellDetectorImpl extends CodeSmellDetector { } @NotNull - private List findCodeSmells(@NotNull PsiFile psiFile, final ProgressIndicator progress, @NotNull Document document) { + private List findCodeSmells(@NotNull final PsiFile psiFile, final ProgressIndicator progress, @NotNull final Document document) { final List result = new ArrayList(); - DaemonCodeAnalyzerImpl codeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(myProject); - List infos = codeAnalyzer.runMainPasses(psiFile, document, progress); + final DaemonCodeAnalyzerImpl codeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(myProject); + List infos = ApplicationManager.getApplication().runReadAction(new Computable>() { + @Override + public List compute() { + return codeAnalyzer.runMainPasses(psiFile, document, progress); + } + }); collectErrorsAndWarnings(infos, result, document); return result;