package fr.adrienbrault.idea.symfony2plugin.stubs; import com.intellij.openapi.project.Project; import com.intellij.psi.search.GlobalSearchScope; import com.intellij.util.Processor; import com.intellij.util.indexing.FileBasedIndex; import com.intellij.util.indexing.ID; import java.util.Collection; import java.util.HashSet; import java.util.Set; import java.util.stream.Collectors; /** * @author Daniel Espendiller <daniel@espendiller.net> */ public class SymfonyProcessors { public static class CollectProjectUniqueKeys implements Processor<String> { final Project project; final ID id; final Set<String> stringSet; public CollectProjectUniqueKeys(Project project, ID id) { this.project = project; this.id = id; this.stringSet = new HashSet<>(); } @Override public boolean process(String s) { this.stringSet.add(s); return true; } public Set<String> getResult() { return stringSet.stream() .filter( s -> FileBasedIndex.getInstance().getContainingFiles(id, s, GlobalSearchScope.allScope(project)).size() > 0) .collect(Collectors.toSet() ); } } public static class CollectProjectUniqueKeysStrong implements Processor<String> { final Project project; final ID id; final Set<String> stringSet; final Collection<String> strongKeys; public CollectProjectUniqueKeysStrong(Project project, ID id, Collection<String> strongKeys) { this.project = project; this.id = id; this.strongKeys = strongKeys; this.stringSet = new HashSet<>(); } @Override public boolean process(String s) { if(!strongKeys.contains(s)) { this.stringSet.add(s); } return true; } public Set<String> getResult() { return stringSet.stream() .filter( s -> FileBasedIndex.getInstance().getContainingFiles(id, s, GlobalSearchScope.allScope(project)).size() > 0 ) .collect(Collectors.toSet() ); } } }