From c80cdb47908be9ac4646a63638261f397e30455b Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Thu, 2 Oct 2014 18:35:03 +0400 Subject: [PATCH] getContainingFile() and getProject() have to be executed under read lock --- .../jet/plugin/ProjectRootsUtil.java | 30 +++++++++++-------- .../jet/plugin/JetModuleTypeManagerImpl.java | 29 +++++++++++------- 2 files changed, 36 insertions(+), 23 deletions(-) diff --git a/idea/idea-analysis/src/org/jetbrains/jet/plugin/ProjectRootsUtil.java b/idea/idea-analysis/src/org/jetbrains/jet/plugin/ProjectRootsUtil.java index 0bfaed5953f..18ee5d554fb 100644 --- a/idea/idea-analysis/src/org/jetbrains/jet/plugin/ProjectRootsUtil.java +++ b/idea/idea-analysis/src/org/jetbrains/jet/plugin/ProjectRootsUtil.java @@ -16,12 +16,13 @@ package org.jetbrains.jet.plugin; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.roots.ProjectFileIndex; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; import org.jetbrains.annotations.NotNull; -import org.jetbrains.jet.lang.psi.JetCodeFragment; import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager; public class ProjectRootsUtil { @@ -29,17 +30,22 @@ public class ProjectRootsUtil { return isInSource(element, true); } - public static boolean isInSource(@NotNull PsiElement element, boolean includeLibrarySources) { - PsiFile containingFile = element.getContainingFile(); - if (containingFile == null) { - return false; - } - VirtualFile virtualFile = containingFile.getVirtualFile(); - if (virtualFile == null) { - return false; - } - ProjectFileIndex index = ProjectFileIndex.SERVICE.getInstance(element.getProject()); - return includeLibrarySources ? index.isInSource(virtualFile) : index.isInSourceContent(virtualFile); + public static boolean isInSource(@NotNull final PsiElement element, final boolean includeLibrarySources) { + return ApplicationManager.getApplication().runReadAction(new Computable() { + @Override + public Boolean compute() { + PsiFile containingFile = element.getContainingFile(); + if (containingFile == null) { + return false; + } + VirtualFile virtualFile = containingFile.getVirtualFile(); + if (virtualFile == null) { + return false; + } + ProjectFileIndex index = ProjectFileIndex.SERVICE.getInstance(element.getProject()); + return includeLibrarySources ? index.isInSource(virtualFile) : index.isInSourceContent(virtualFile); + } + }); } public static boolean isInSourceWithGradleCheck(@NotNull PsiElement element) { diff --git a/idea/src/org/jetbrains/jet/plugin/JetModuleTypeManagerImpl.java b/idea/src/org/jetbrains/jet/plugin/JetModuleTypeManagerImpl.java index e558adf3438..5209ac1cd88 100644 --- a/idea/src/org/jetbrains/jet/plugin/JetModuleTypeManagerImpl.java +++ b/idea/src/org/jetbrains/jet/plugin/JetModuleTypeManagerImpl.java @@ -18,10 +18,12 @@ package org.jetbrains.jet.plugin; import com.intellij.facet.Facet; import com.intellij.facet.FacetManager; +import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.module.Module; import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.project.Project; import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.util.Computable; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; import com.intellij.psi.PsiFile; @@ -30,20 +32,25 @@ import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager; public class JetModuleTypeManagerImpl extends JetModuleTypeManager { @Override - public boolean isKtFileInGradleProjectInWrongFolder(@NotNull PsiElement element) { - PsiFile containingFile = element.getContainingFile(); - if (containingFile == null) { - return false; - } - VirtualFile virtualFile = containingFile.getVirtualFile(); - if (virtualFile == null) { - return false; - } - return isKtFileInGradleProjectInWrongFolder(virtualFile, element.getProject()); + public boolean isKtFileInGradleProjectInWrongFolder(@NotNull final PsiElement element) { + return ApplicationManager.getApplication().runReadAction(new Computable() { + @Override + public Boolean compute() { + PsiFile containingFile = element.getContainingFile(); + if (containingFile == null) { + return false; + } + VirtualFile virtualFile = containingFile.getVirtualFile(); + if (virtualFile == null) { + return false; + } + return isKtFileInGradleProjectInWrongFolder(virtualFile, element.getProject()); + } + }); } @Override - public boolean isKtFileInGradleProjectInWrongFolder(@NotNull VirtualFile virtualFile, @NotNull Project project ) { + public boolean isKtFileInGradleProjectInWrongFolder(@NotNull VirtualFile virtualFile, @NotNull Project project) { Module module = ModuleUtilCore.findModuleForFile(virtualFile, project); if (module == null) return false;