package org.dlangplugin.run; import com.intellij.openapi.vfs.VfsUtilCore; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileVisitor; import org.jetbrains.annotations.NotNull; import java.io.File; import java.util.ArrayList; import java.util.List; public class DLangVirtualFileVisitor extends VirtualFileVisitor { private List<String> dLangSources; private VirtualFile sourcesRoot; private VirtualFile[] excludedRoots; private final char separator = File.separatorChar; public DLangVirtualFileVisitor(VirtualFile sourcesRoot, VirtualFile[] excludedRoots) { dLangSources = new ArrayList<String>(); this.sourcesRoot = sourcesRoot; this.excludedRoots = excludedRoots; } @Override public boolean visitFile(@NotNull VirtualFile file) { if(!file.isDirectory() && "d".equals(file.getExtension()) && !isExcluded(file)) { dLangSources.add(VfsUtilCore.getRelativePath(file, sourcesRoot, separator)); } return super.visitFile(file); } private boolean isExcluded(VirtualFile srcFile) { for(VirtualFile excludeDir : excludedRoots) { if(VfsUtilCore.isAncestor(excludeDir, srcFile, false)) { return true; } } return false; } public List<String> getdLangSources() { return dLangSources; } }