package com.intellij.lang.javascript.flex.library; import com.intellij.lang.javascript.flex.FlexBundle; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.roots.JavadocOrderRootType; import com.intellij.openapi.roots.libraries.ui.RootDetector; 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.util.ArrayList; import java.util.Collection; import java.util.List; /** * @author ksafonov */ class FlexDocsRootDetector extends RootDetector { public FlexDocsRootDetector() { super(JavadocOrderRootType.getInstance(), false, FlexBundle.message("docs.root.detector.name")); } @NotNull @Override public Collection<VirtualFile> detectRoots(@NotNull final VirtualFile rootCandidate, @NotNull final ProgressIndicator progressIndicator) { List<VirtualFile> result = new ArrayList<>(); collectRoots(rootCandidate, result, progressIndicator); return result; } private static void collectRoots(VirtualFile file, final List<VirtualFile> result, final ProgressIndicator progressIndicator) { VfsUtilCore.visitChildrenRecursively(file, new VirtualFileVisitor() { @Override public boolean visitFile(@NotNull VirtualFile file) { progressIndicator.checkCanceled(); if (!file.isDirectory()) return false; progressIndicator.setText2(file.getPresentableUrl()); if (file.findChild("all-classes.html") != null) { result.add(file); return false; } return true; } }); } }