PathUtil class
Пакет: com.hypixel.hytale.common.util
Файл: com/hypixel/hytale/common/util/PathUtil.java
Поля (31)
| Модификаторы | Тип | Имя |
|---|---|---|
final |
Pattern |
PATH_PATTERN |
|
|
var0 |
|
Path |
var1 |
|
Path |
var1 |
|
|
var1 |
|
String[] |
var1 |
|
String |
var1 |
|
int |
var1 |
|
|
var1 |
|
Path |
var2 |
|
Path |
var2 |
|
Path |
var2 |
|
Path |
var2 |
|
String |
var2 |
|
String |
var2 |
|
int |
var2 |
|
int |
var2 |
|
Path |
var3 |
|
Path |
var3 |
|
Path |
var3 |
|
|
var3 |
|
|
var3 |
|
Path |
var3 |
|
|
var3 |
|
Path |
var4 |
|
String |
var4 |
|
Path |
var5 |
|
String |
var5 |
|
String |
var5 |
|
Path |
var6 |
|
Path |
var8 |
Методы (19)
| Модификаторы | Возврат | Сигнатура |
|---|---|---|
static |
void |
addTrustedRootvoid addTrustedRoot(@Nonnull Path var0) |
static |
boolean |
agnosticEqualsboolean agnosticEquals(@Nullable Path var0, @Nullable Path var1) |
static |
int |
agnosticHashCodeint agnosticHashCode(@Nullable Path var0) |
|
public boolean |
equalspublic boolean equals(@Nullable Path var1, @Nullable Path var2) |
|
|
for for(Path var3 : TRUSTED_PATH_ROOTS) |
|
|
for for(int var3 = 0; var3 < var2; var3++) |
abstract |
|
for for(int var4 = 0; var4 < var1.getNameCount() |
abstract |
|
for for(int var2 = 0; var2 < var0.getNameCount() |
static |
void |
forEachParentvoid forEachParent(@Nonnull Path var0, @Nullable Path var1, @Nonnull Consumer<Path> var2) |
static |
String |
getFileNameString getFileName(@Nonnull URL var0) |
|
public int |
hashCodepublic int hashCode(@Nullable Path var1) |
|
|
if if(var3 != null) |
|
|
if if(var0 == null) |
|
|
if if(var0 == var1) |
|
|
if if(var0 == null) |
|
|
if if(var1 == null) |
static |
boolean |
isChildOfboolean isChildOf(@Nonnull Path var0, @Nonnull Path var1) |
static |
boolean |
isInTrustedRootboolean isInTrustedRoot(@Nonnull Path var0) |
static |
boolean |
isValidNameboolean isValidName(@Nonnull String var0) |
Исходный код
Показать/скрыть
class="kw">package com.hypixel.hytale.common.util;
class="kw">import it.unimi.dsi.fastutil.Hash.Strategy;
class="kw">import java.net.URL;
class="kw">import java.nio.file.Files;
class="kw">import java.nio.file.Path;
class="kw">import java.nio.file.Paths;
class="kw">import java.util.Objects;
class="kw">import java.util.Set;
class="kw">import java.util.concurrent.ConcurrentHashMap;
class="kw">import java.util.function.Consumer;
class="kw">import java.util.regex.Pattern;
class="kw">import javax.annotation.Nonnull;
class="kw">import javax.annotation.Nullable;
class="kw">public class PathUtil {
class="kw">private class="kw">static class="kw">final Pattern PATH_PATTERN = Pattern.compile("[\\\\/]");
class="kw">private class="kw">static class="kw">final Set<Path> TRUSTED_PATH_ROOTS = ConcurrentHashMap.newKeySet();
class="kw">public class="kw">static class="kw">final Strategy<Path> AGNOSTIC_HASH_STRATEGY = new Strategy<Path>() {
class="kw">public int hashCode(@Nullable Path var1) {
class="kw">return PathUtil.agnosticHashCode(var1);
}
class="kw">public boolean equals(@Nullable Path var1, @Nullable Path var2) {
class="kw">return PathUtil.agnosticEquals(var1, var2);
}
};
class="kw">public PathUtil() {
}
class="kw">public class="kw">static void addTrustedRoot(@Nonnull Path var0) {
TRUSTED_PATH_ROOTS.add(var0.toAbsolutePath().normalize());
}
class="kw">public class="kw">static boolean isInTrustedRoot(@Nonnull Path var0) {
Path var1 = var0.toAbsolutePath().normalize();
for (Path var3 : TRUSTED_PATH_ROOTS) {
if (isChildOf(var3, var1)) {
class="kw">return true;
}
}
class="kw">return false;
}
@Nonnull
class="kw">public class="kw">static Path getParent(@Nonnull Path var0) {
if (var0.isAbsolute()) {
class="kw">return var0.getParent().normalize();
}
Path var1 = var0.toAbsolutePath().getParent();
Path var2 = var0.resolve(relativize(var0, var1));
class="kw">return var2.normalize();
}
@Nonnull
class="kw">public class="kw">static Path relativize(@Nonnull Path var0, @Nonnull Path var1) {
Path var2 = var0.toAbsolutePath();
Path var3 = var1.toAbsolutePath();
class="kw">return Objects.equals(var2.getRoot(), var3.getRoot()) ? var2.normalize().relativize(var3.normalize()).normalize() : var3.normalize();
}
@Nonnull
class="kw">public class="kw">static Path relativizePretty(@Nonnull Path var0, @Nonnull Path var1) {
Path var2 = var0.toAbsolutePath().normalize();
Path var3 = var1.toAbsolutePath().normalize();
Path var4 = getUserHome().toAbsolutePath();
if (Objects.equals(var4.getRoot(), var3.getRoot())) {
Path var5 = var4.relativize(var3).normalize();
if (Objects.equals(var2.getRoot(), var3.getRoot())) {
Path var6 = var2.relativize(var3).normalize();
class="kw">return var5.getNameCount() < var6.getNameCount() ? Paths.get("~").resolve(var5) : var6;
} else {
class="kw">return var5.getNameCount() < var3.getNameCount() ? Paths.get("~").resolve(var5) : var3;
}
} else {
class="kw">return Objects.equals(var2.getRoot(), var3.getRoot()) ? var2.relativize(var3).normalize() : var3;
}
}
class="kw">public class="kw">static boolean isValidName(@Nonnull String var0) {
class="kw">return !var0.isBlank() && var0.indexOf(47) < 0 && var0.indexOf(92) < 0 && !".".equals(var0) && !"..".equals(var0);
}
@Nullable
class="kw">public class="kw">static Path resolvePathWithinDir(@Nonnull Path var0, @Nonnull String var1) {
Path var2 = var0.resolve(var1).normalize();
class="kw">return !isChildOf(var0, var2) ? null : var2;
}
@Nullable
class="kw">public class="kw">static Path resolvePathWithinDir(@Nonnull Path var0, @Nonnull Path var1) {
var0 = var0.normalize();
var1 = var1.normalize();
if (var1.isAbsolute()) {
class="kw">return !isChildOf(var0, var1) ? null : var1;
}
if (var1.getFileSystem() == var0.getFileSystem()) {
Path var8 = var0.resolve(var1).normalize();
class="kw">return !isChildOf(var0, var8) ? null : var8;
}
String var2 = var0.getFileSystem().getSeparator();
Path var3 = var0;
for (int var4 = 0; var4 < var1.getNameCount(); var4++) {
String var5 = var1.getName(var4).toString();
if (!var2.isEmpty() && var5.contains(var2)) {
class="kw">return null;
}
var3 = var3.resolve(var5);
}
var3 = var3.normalize();
class="kw">return !isChildOf(var0, var3) ? null : var3;
}
@Nullable
class="kw">public class="kw">static Path relativizeWithinDir(@Nonnull Path var0, @Nonnull Path var1) {
class="kw">return !isChildOf(var0, var1) ? null : var0.toAbsolutePath().normalize().relativize(var1.toAbsolutePath().normalize());
}
@Nullable
class="kw">public class="kw">static Path resolveName(@Nonnull Path var0, @Nonnull String var1) {
class="kw">return !isValidName(var1) ? null : var0.resolve(var1);
}
@Nonnull
class="kw">public class="kw">static Path get(@Nonnull String var0) {
class="kw">return get(Paths.get(var0));
}
@Nonnull
class="kw">public class="kw">static Path get(@Nonnull Path var0) {
class="kw">return var0.toString().charAt(0) == '~' ? getUserHome().resolve(var0.subpath(1, var0.getNameCount())).normalize() : var0.normalize();
}
@Nonnull
class="kw">public class="kw">static Path getUserHome() {
class="kw">return Paths.get(System.getProperty("user.home"));
}
class="kw">public class="kw">static String getFileName(@Nonnull URL var0) {
String[] var1 = PATH_PATTERN.split(var0.getPath(), -1);
String var2 = var1[var1.length - 1];
class="kw">return var2.isEmpty() && var1.length > 1 ? var1[var1.length - 2] : var2;
}
class="kw">public class="kw">static boolean isChildOf(@Nonnull Path var0, @Nonnull Path var1) {
class="kw">return var0.getFileSystem() == var1.getFileSystem() && var1.toAbsolutePath().normalize().startsWith(var0.toAbsolutePath().normalize());
}
class="kw">public class="kw">static void forEachParent(@Nonnull Path var0, @Nullable Path var1, @Nonnull Consumer<Path> var2) {
Path var3 = var0.toAbsolutePath();
if (Files.isRegularFile(var3)) {
var3 = var3.getParent();
}
if (var3 != null) {
do {
var2.accept(var3);
} while ((var3 = var3.getParent()) != null && (var1 == null || isChildOf(var1, var3)));
}
}
@Nonnull
class="kw">public class="kw">static String getFileExtension(@Nonnull Path var0) {
String var1 = var0.getFileName().toString();
int var2 = var1.lastIndexOf(46);
class="kw">return var2 == -1 ? "" : var1.substring(var2);
}
@Nonnull
class="kw">public class="kw">static String toUnixPathString(@Nonnull Path var0) {
class="kw">return "\\".equals(var0.getFileSystem().getSeparator()) ? var0.toString().replace("\\", "/") : var0.toString();
}
class="kw">public class="kw">static int agnosticHashCode(@Nullable Path var0) {
if (var0 == null) {
class="kw">return 0;
}
int var1 = 31;
for (int var2 = 0; var2 < var0.getNameCount(); var2++) {
var1 = 31 * var1 + var0.getName(var2).toString().hashCode();
}
class="kw">return var1;
}
class="kw">public class="kw">static boolean agnosticEquals(@Nullable Path var0, @Nullable Path var1) {
if (var0 == var1) {
class="kw">return true;
}
if (var0 == null) {
class="kw">return false;
}
if (var1 == null) {
class="kw">return false;
}
int var2 = var0.getNameCount();
if (var2 != var1.getNameCount()) {
class="kw">return false;
}
for (int var3 = 0; var3 < var2; var3++) {
String var4 = var0.getName(var3).toString();
String var5 = var1.getName(var3).toString();
if (!var4.equals(var5)) {
class="kw">return false;
}
}
class="kw">return true;
}
class="kw">static {
TRUSTED_PATH_ROOTS.add(Path.of("").toAbsolutePath().normalize());
TRUSTED_PATH_ROOTS.add(Path.of(System.getProperty("java.io.tmpdir")).toAbsolutePath().normalize());
}
}