Class FastPathResolver

java.lang.Object
nonapi.io.github.classgraph.utils.FastPathResolver

public final class FastPathResolver extends Object
Resolve relative paths and URLs/URIs against a base path in a way that is faster than Java's URL/URI parser (and much faster than Path), while aiming for cross-platform compatibility, and hopefully in particular being robust to the many forms of Windows path weirdness.
  • Field Details

    • percentMatcher

      private static final Pattern percentMatcher
      Match %-encoded characters in URLs.
    • schemeTwoSlashMatcher

      private static final Pattern schemeTwoSlashMatcher
      Match custom URLs that are followed by two slashes.
    • schemeOneSlashMatcher

      private static final Pattern schemeOneSlashMatcher
      Match custom URLs that are followed by one slash.
  • Constructor Details

    • FastPathResolver

      private FastPathResolver()
      Constructor.
  • Method Details

    • translateSeparator

      private static void translateSeparator(String path, int startIdx, int endIdx, boolean stripFinalSeparator, StringBuilder buf)
      Translate backslashes to forward slashes, optionally removing trailing separator.
      Parameters:
      path - the path
      startIdx - the start index
      endIdx - the end index
      stripFinalSeparator - if true, strip the final separator
      buf - the buf
    • hexCharToInt

      private static int hexCharToInt(char c)
      Hex char to int.
      Parameters:
      c - the character
      Returns:
      the integer value of the character
    • unescapePercentEncoding

      private static void unescapePercentEncoding(String path, int startIdx, int endIdx, StringBuilder buf)
      Unescape runs of percent encoding, e.g. "%20%43%20" -> " + "
      Parameters:
      path - the path
      startIdx - the start index
      endIdx - the end index
      buf - the buf
    • normalizePath

      public static String normalizePath(String path, boolean isFileOrJarURL)
      Parse percent encoding, e.g. "%20" -> " "; convert '/' or '\\' to SEP; remove trailing separator char if present.
      Parameters:
      path - The path to normalize.
      isFileOrJarURL - True if this is a "file:" or "jar:" URL.
      Returns:
      The normalized path.
    • resolve

      public static String resolve(String resolveBasePath, String relativePath)
      Strip away any "jar:" prefix from a filename URI, and convert it to a file path, handling possibly-broken mixes of filesystem and URI conventions; resolve relative paths relative to resolveBasePath.
      Parameters:
      resolveBasePath - The base path.
      relativePath - The path to resolve relative to the base path.
      Returns:
      The resolved path.
    • resolve

      public static String resolve(String pathStr)
      Strip away any "jar:" prefix from a filename URI, and convert it to a file path, handling possibly-broken mixes of filesystem and URI conventions. Returns null if relativePathStr is an "http(s):" path.
      Parameters:
      pathStr - The path to resolve.
      Returns:
      The resolved path.