From 73308378e580f815fbb2f557139b1653e187d439 Mon Sep 17 00:00:00 2001 From: Nikolay Krasko Date: Wed, 14 Aug 2013 14:20:56 +0400 Subject: [PATCH] Add ability to test jet file is in scope --- .../cli/jvm/compiler/CliJetFilesProvider.java | 12 +++-- .../lang/resolve/java/JetFilesProvider.java | 4 +- .../project/PluginJetFilesProvider.java | 46 ++++++++++++------- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliJetFilesProvider.java b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliJetFilesProvider.java index 300bacba7cb..3aa4a5f7ae7 100644 --- a/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliJetFilesProvider.java +++ b/compiler/cli/src/org/jetbrains/jet/cli/jvm/compiler/CliJetFilesProvider.java @@ -18,6 +18,7 @@ package org.jetbrains.jet.cli.jvm.compiler; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.Function; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.java.JetFilesProvider; @@ -27,7 +28,7 @@ import java.util.List; public class CliJetFilesProvider extends JetFilesProvider { private final JetCoreEnvironment environment; - private Function> all_files = new Function>() { + private final Function> allFiles = new Function>() { @Override public Collection fun(JetFile file) { return environment.getSourceFiles(); @@ -41,11 +42,11 @@ public class CliJetFilesProvider extends JetFilesProvider { @Override public Function> sampleToAllFilesInModule() { - return all_files; + return allFiles; } @Override - public List allInScope(GlobalSearchScope scope) { + public List allInScope(@NotNull GlobalSearchScope scope) { List answer = new ArrayList(); for (JetFile file : environment.getSourceFiles()) { if (scope.contains(file.getVirtualFile())) { @@ -54,4 +55,9 @@ public class CliJetFilesProvider extends JetFilesProvider { } return answer; } + + @Override + public boolean isFileInScope(@NotNull JetFile file, @NotNull GlobalSearchScope scope) { + return scope.contains(file.getVirtualFile()) && environment.getSourceFiles().contains(file); + } } diff --git a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetFilesProvider.java b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetFilesProvider.java index ce9538a3aab..7bafdcbf32f 100644 --- a/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetFilesProvider.java +++ b/compiler/frontend.java/src/org/jetbrains/jet/lang/resolve/java/JetFilesProvider.java @@ -22,6 +22,7 @@ import com.intellij.openapi.project.Project; import com.intellij.psi.PsiFile; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.Function; +import org.jetbrains.annotations.NotNull; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.psi.JetPsiUtil; import org.jetbrains.jet.lang.resolve.name.FqName; @@ -45,7 +46,8 @@ public abstract class JetFilesProvider { } public abstract Function> sampleToAllFilesInModule(); - public abstract Collection allInScope(GlobalSearchScope scope); + public abstract Collection allInScope(@NotNull GlobalSearchScope scope); + public abstract boolean isFileInScope(@NotNull JetFile file, @NotNull GlobalSearchScope scope); public static class SameJetFilePredicate implements Predicate { private final FqName name; diff --git a/idea/src/org/jetbrains/jet/plugin/project/PluginJetFilesProvider.java b/idea/src/org/jetbrains/jet/plugin/project/PluginJetFilesProvider.java index 195939f8fae..00c99f027d4 100644 --- a/idea/src/org/jetbrains/jet/plugin/project/PluginJetFilesProvider.java +++ b/idea/src/org/jetbrains/jet/plugin/project/PluginJetFilesProvider.java @@ -34,6 +34,8 @@ import com.intellij.psi.PsiManager; import com.intellij.psi.search.FileTypeIndex; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.Function; +import com.intellij.util.containers.ContainerUtil; +import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import org.jetbrains.jet.lang.psi.JetFile; import org.jetbrains.jet.lang.resolve.java.JetFilesProvider; @@ -96,29 +98,39 @@ public class PluginJetFilesProvider extends JetFilesProvider { return WHOLE_PROJECT_DECLARATION_PROVIDER; } + private boolean isKotlinSourceVirtualFile(@NotNull VirtualFile virtualFile) { + return ProjectFileIndex.SERVICE.getInstance(project).isInSourceContent(virtualFile) && + !JetPluginUtil.isKtFileInGradleProjectInWrongFolder(virtualFile, project); + } + @Override - public Collection allInScope(GlobalSearchScope scope) { + public Collection allInScope(@NotNull GlobalSearchScope scope) { final PsiManager manager = PsiManager.getInstance(project); - Collection jetFiles = Collections2.transform(FileTypeIndex.getFiles(JetFileType.INSTANCE, scope), - new com.google.common.base.Function() { - @Override - public JetFile apply(@Nullable VirtualFile file) { - if (file == null || - !ProjectFileIndex.SERVICE.getInstance(project).isInSourceContent(file) || - JetPluginUtil.isKtFileInGradleProjectInWrongFolder(file, project)) { - return null; - } + Collection jetFiles = ContainerUtil.map( + FileTypeIndex.getFiles(JetFileType.INSTANCE, scope), + new Function() { + @Override + public JetFile fun(@Nullable VirtualFile file) { + if (file == null || !isKotlinSourceVirtualFile(file)) { + return null; + } - PsiFile psiFile = manager.findFile(file); - if (!(psiFile instanceof JetFile)) { - return null; - } + PsiFile psiFile = manager.findFile(file); + if (!(psiFile instanceof JetFile)) { + return null; + } - return ((JetFile) psiFile); - } - }); + return ((JetFile) psiFile); + } + }); return Sets.newHashSet(Collections2.filter(jetFiles, Predicates.notNull())); } + + @Override + public boolean isFileInScope(@NotNull JetFile file, @NotNull GlobalSearchScope scope) { + VirtualFile virtualFile = file.getVirtualFile(); + return virtualFile != null && scope.contains(virtualFile) && isKotlinSourceVirtualFile(virtualFile); + } }