getContainingFile() and getProject() have to be executed under read lock
This commit is contained in:
@@ -16,12 +16,13 @@
|
|||||||
|
|
||||||
package org.jetbrains.jet.plugin;
|
package org.jetbrains.jet.plugin;
|
||||||
|
|
||||||
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.roots.ProjectFileIndex;
|
import com.intellij.openapi.roots.ProjectFileIndex;
|
||||||
|
import com.intellij.openapi.util.Computable;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
import org.jetbrains.jet.lang.psi.JetCodeFragment;
|
|
||||||
import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager;
|
import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager;
|
||||||
|
|
||||||
public class ProjectRootsUtil {
|
public class ProjectRootsUtil {
|
||||||
@@ -29,17 +30,22 @@ public class ProjectRootsUtil {
|
|||||||
return isInSource(element, true);
|
return isInSource(element, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isInSource(@NotNull PsiElement element, boolean includeLibrarySources) {
|
public static boolean isInSource(@NotNull final PsiElement element, final boolean includeLibrarySources) {
|
||||||
PsiFile containingFile = element.getContainingFile();
|
return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
|
||||||
if (containingFile == null) {
|
@Override
|
||||||
return false;
|
public Boolean compute() {
|
||||||
}
|
PsiFile containingFile = element.getContainingFile();
|
||||||
VirtualFile virtualFile = containingFile.getVirtualFile();
|
if (containingFile == null) {
|
||||||
if (virtualFile == null) {
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
VirtualFile virtualFile = containingFile.getVirtualFile();
|
||||||
ProjectFileIndex index = ProjectFileIndex.SERVICE.getInstance(element.getProject());
|
if (virtualFile == null) {
|
||||||
return includeLibrarySources ? index.isInSource(virtualFile) : index.isInSourceContent(virtualFile);
|
return false;
|
||||||
|
}
|
||||||
|
ProjectFileIndex index = ProjectFileIndex.SERVICE.getInstance(element.getProject());
|
||||||
|
return includeLibrarySources ? index.isInSource(virtualFile) : index.isInSourceContent(virtualFile);
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static boolean isInSourceWithGradleCheck(@NotNull PsiElement element) {
|
public static boolean isInSourceWithGradleCheck(@NotNull PsiElement element) {
|
||||||
|
|||||||
@@ -18,10 +18,12 @@ package org.jetbrains.jet.plugin;
|
|||||||
|
|
||||||
import com.intellij.facet.Facet;
|
import com.intellij.facet.Facet;
|
||||||
import com.intellij.facet.FacetManager;
|
import com.intellij.facet.FacetManager;
|
||||||
|
import com.intellij.openapi.application.ApplicationManager;
|
||||||
import com.intellij.openapi.module.Module;
|
import com.intellij.openapi.module.Module;
|
||||||
import com.intellij.openapi.module.ModuleUtilCore;
|
import com.intellij.openapi.module.ModuleUtilCore;
|
||||||
import com.intellij.openapi.project.Project;
|
import com.intellij.openapi.project.Project;
|
||||||
import com.intellij.openapi.roots.ProjectRootManager;
|
import com.intellij.openapi.roots.ProjectRootManager;
|
||||||
|
import com.intellij.openapi.util.Computable;
|
||||||
import com.intellij.openapi.vfs.VirtualFile;
|
import com.intellij.openapi.vfs.VirtualFile;
|
||||||
import com.intellij.psi.PsiElement;
|
import com.intellij.psi.PsiElement;
|
||||||
import com.intellij.psi.PsiFile;
|
import com.intellij.psi.PsiFile;
|
||||||
@@ -30,20 +32,25 @@ import org.jetbrains.jet.plugin.configuration.JetModuleTypeManager;
|
|||||||
|
|
||||||
public class JetModuleTypeManagerImpl extends JetModuleTypeManager {
|
public class JetModuleTypeManagerImpl extends JetModuleTypeManager {
|
||||||
@Override
|
@Override
|
||||||
public boolean isKtFileInGradleProjectInWrongFolder(@NotNull PsiElement element) {
|
public boolean isKtFileInGradleProjectInWrongFolder(@NotNull final PsiElement element) {
|
||||||
PsiFile containingFile = element.getContainingFile();
|
return ApplicationManager.getApplication().runReadAction(new Computable<Boolean>() {
|
||||||
if (containingFile == null) {
|
@Override
|
||||||
return false;
|
public Boolean compute() {
|
||||||
}
|
PsiFile containingFile = element.getContainingFile();
|
||||||
VirtualFile virtualFile = containingFile.getVirtualFile();
|
if (containingFile == null) {
|
||||||
if (virtualFile == null) {
|
return false;
|
||||||
return false;
|
}
|
||||||
}
|
VirtualFile virtualFile = containingFile.getVirtualFile();
|
||||||
return isKtFileInGradleProjectInWrongFolder(virtualFile, element.getProject());
|
if (virtualFile == null) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return isKtFileInGradleProjectInWrongFolder(virtualFile, element.getProject());
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@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);
|
Module module = ModuleUtilCore.findModuleForFile(virtualFile, project);
|
||||||
if (module == null) return false;
|
if (module == null) return false;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user