breakpoints for multi-file namespaces

This commit is contained in:
Alex Tkachman
2012-06-22 11:55:16 +03:00
parent 1ae1f13821
commit c1802e2360
7 changed files with 132 additions and 31 deletions
@@ -19,13 +19,20 @@
*/
package org.jetbrains.jet.lang.resolve.java;
import com.google.common.base.Predicate;
import com.intellij.openapi.components.ServiceManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.UserDataHolder;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.psi.PsiFile;
import com.intellij.psi.search.GlobalSearchScope;
import com.intellij.util.Function;
import org.jetbrains.jet.lang.psi.JetFile;
import org.jetbrains.jet.lang.psi.JetPsiUtil;
import org.jetbrains.jet.lang.resolve.name.FqName;
import java.util.Collection;
import java.util.LinkedList;
import java.util.List;
public abstract class JetFilesProvider {
@@ -33,6 +40,37 @@ public abstract class JetFilesProvider {
return ServiceManager.getService(project, JetFilesProvider.class);
}
public final Function<JetFile, List<JetFile>> allNamespaceFiles() {
return new Function<JetFile, List<JetFile>>() {
@Override
public List<JetFile> fun(JetFile file) {
return new SameJetFilePredicate(file).filter(sampleToAllFilesInModule().fun(file));
}
};
}
public abstract Function<JetFile, Collection<JetFile>> sampleToAllFilesInModule();
public abstract List<JetFile> allInScope(GlobalSearchScope scope);
public static class SameJetFilePredicate implements Predicate<PsiFile> {
private final FqName name;
public SameJetFilePredicate(JetFile file) {
this.name = JetPsiUtil.getFQName(file);
}
@Override
public boolean apply(PsiFile psiFile) {
return JetPsiUtil.getFQName((JetFile) psiFile).equals(name);
}
public List<JetFile> filter(Collection<JetFile> allFiles) {
LinkedList<JetFile> files = new LinkedList<JetFile>();
for (JetFile aFile : allFiles) {
if(apply(aFile))
files.add(aFile);
}
return files;
}
}
}