All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sourcegraph.scip_semanticdb.SemanticdbWalker Maven / Gradle / Ivy

package com.sourcegraph.scip_semanticdb;

import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.FileVisitResult;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.PathMatcher;
import java.nio.file.SimpleFileVisitor;
import java.nio.file.attribute.BasicFileAttributes;
import java.util.ArrayList;
import java.util.List;

/** A file visitor that recursively collects all SemanticDB files in a given directory. */
public class SemanticdbWalker extends SimpleFileVisitor {
  private final ArrayList result;
  private final ScipSemanticdbOptions options;
  private final PathMatcher semanticdbPattern =
      FileSystems.getDefault().getPathMatcher("glob:**.semanticdb");

  public SemanticdbWalker(ScipSemanticdbOptions options) {
    this.options = options;
    result = new ArrayList<>();
  }

  @Override
  public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
    if (semanticdbPattern.matches(file)) {
      result.add(file);
    }
    return super.visitFile(file, attrs);
  }

  @Override
  public FileVisitResult visitFileFailed(Path file, IOException exc) {
    options.reporter.error(exc);
    return FileVisitResult.CONTINUE;
  }

  public static List findSemanticdbFiles(ScipSemanticdbOptions options) throws IOException {
    SemanticdbWalker walker = new SemanticdbWalker(options);
    PathMatcher jarPattern = FileSystems.getDefault().getPathMatcher("glob:**.jar");
    for (Path root : options.targetroots) {
      if (jarPattern.matches(root)) {
        walker.result.add(root);
      } else {
        Files.walkFileTree(root, walker);
      }
    }
    return walker.result;
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy