[vcs] IDEA-131106 Fix read action in pre-commit code analysis

This commit is contained in:
Kirill Likhodedov
2014-10-10 14:54:31 +04:00
parent 880fda665f
commit e69981a75e
@@ -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<PsiFile>() {
@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<CodeSmellInfo> findCodeSmells(@NotNull PsiFile psiFile, final ProgressIndicator progress, @NotNull Document document) {
private List<CodeSmellInfo> findCodeSmells(@NotNull final PsiFile psiFile, final ProgressIndicator progress, @NotNull final Document document) {
final List<CodeSmellInfo> result = new ArrayList<CodeSmellInfo>();
DaemonCodeAnalyzerImpl codeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(myProject);
List<HighlightInfo> infos = codeAnalyzer.runMainPasses(psiFile, document, progress);
final DaemonCodeAnalyzerImpl codeAnalyzer = (DaemonCodeAnalyzerImpl)DaemonCodeAnalyzer.getInstance(myProject);
List<HighlightInfo> infos = ApplicationManager.getApplication().runReadAction(new Computable<List<HighlightInfo>>() {
@Override
public List<HighlightInfo> compute() {
return codeAnalyzer.runMainPasses(psiFile, document, progress);
}
});
collectErrorsAndWarnings(infos, result, document);
return result;