Class FastPathResolver
- java.lang.Object
-
- nonapi.io.github.classgraph.utils.FastPathResolver
-
public final class FastPathResolver extends java.lang.ObjectResolve 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 Summary
Fields Modifier and Type Field Description private static java.util.regex.PatternpercentMatcherMatch %-encoded characters in URLs.private static java.util.regex.PatternschemeOneOrTwoSlashMatcherMatch custom URLs that are followed by one or two slashes.
-
Constructor Summary
Constructors Modifier Constructor Description privateFastPathResolver()Constructor.
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description private static inthexCharToInt(char c)Hex char to int.static java.lang.StringnormalizePath(java.lang.String path, boolean isFileOrJarURL)Parse percent encoding, e.g.static java.lang.Stringresolve(java.lang.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.static java.lang.Stringresolve(java.lang.String resolveBasePath, java.lang.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.private static voidtranslateSeparator(java.lang.String path, int startIdx, int endIdx, boolean stripFinalSeparator, java.lang.StringBuilder buf)Translate backslashes to forward slashes, optionally removing trailing separator.private static voidunescapePercentEncoding(java.lang.String path, int startIdx, int endIdx, java.lang.StringBuilder buf)Unescape runs of percent encoding, e.g.
-
-
-
Method Detail
-
translateSeparator
private static void translateSeparator(java.lang.String path, int startIdx, int endIdx, boolean stripFinalSeparator, java.lang.StringBuilder buf)Translate backslashes to forward slashes, optionally removing trailing separator.- Parameters:
path- the pathstartIdx- the start indexendIdx- the end indexstripFinalSeparator- if true, strip the final separatorbuf- 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(java.lang.String path, int startIdx, int endIdx, java.lang.StringBuilder buf)Unescape runs of percent encoding, e.g. "%20%43%20" -> " + "- Parameters:
path- the pathstartIdx- the start indexendIdx- the end indexbuf- the buf
-
normalizePath
public static java.lang.String normalizePath(java.lang.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 java.lang.String resolve(java.lang.String resolveBasePath, java.lang.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 java.lang.String resolve(java.lang.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.
-
-