mirror of
https://github.com/Pinball3D/Rabbit-R1.git
synced 2024-12-25 08:32:38 -06:00
412 lines
22 KiB
Java
412 lines
22 KiB
Java
package kotlin.io;
|
|
|
|
import androidx.constraintlayout.widget.ConstraintLayout;
|
|
import java.io.File;
|
|
import java.io.FileInputStream;
|
|
import java.io.FileOutputStream;
|
|
import java.io.IOException;
|
|
import java.util.ArrayList;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import kotlin.Deprecated;
|
|
import kotlin.Metadata;
|
|
import kotlin.Unit;
|
|
import kotlin.collections.CollectionsKt;
|
|
import kotlin.jvm.functions.Function2;
|
|
import kotlin.jvm.internal.Intrinsics;
|
|
import kotlin.text.StringsKt;
|
|
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
/* compiled from: Utils.kt */
|
|
@Metadata(d1 = {"\u0000<\n\u0000\n\u0002\u0010\u000e\n\u0002\u0018\u0002\n\u0002\b\f\n\u0002\u0010\u000b\n\u0002\b\u0003\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\u0018\u0002\n\u0002\b\u0002\n\u0002\u0010\b\n\u0002\b\u0004\n\u0002\u0010 \n\u0000\n\u0002\u0018\u0002\n\u0002\b\f\u001a*\u0010\t\u001a\u00020\u00022\b\b\u0002\u0010\n\u001a\u00020\u00012\n\b\u0002\u0010\u000b\u001a\u0004\u0018\u00010\u00012\n\b\u0002\u0010\f\u001a\u0004\u0018\u00010\u0002H\u0007\u001a*\u0010\r\u001a\u00020\u00022\b\b\u0002\u0010\n\u001a\u00020\u00012\n\b\u0002\u0010\u000b\u001a\u0004\u0018\u00010\u00012\n\b\u0002\u0010\f\u001a\u0004\u0018\u00010\u0002H\u0007\u001a8\u0010\u000e\u001a\u00020\u000f*\u00020\u00022\u0006\u0010\u0010\u001a\u00020\u00022\b\b\u0002\u0010\u0011\u001a\u00020\u000f2\u001a\b\u0002\u0010\u0012\u001a\u0014\u0012\u0004\u0012\u00020\u0002\u0012\u0004\u0012\u00020\u0014\u0012\u0004\u0012\u00020\u00150\u0013\u001a&\u0010\u0016\u001a\u00020\u0002*\u00020\u00022\u0006\u0010\u0010\u001a\u00020\u00022\b\b\u0002\u0010\u0011\u001a\u00020\u000f2\b\b\u0002\u0010\u0017\u001a\u00020\u0018\u001a\n\u0010\u0019\u001a\u00020\u000f*\u00020\u0002\u001a\u0012\u0010\u001a\u001a\u00020\u000f*\u00020\u00022\u0006\u0010\u001b\u001a\u00020\u0002\u001a\u0012\u0010\u001a\u001a\u00020\u000f*\u00020\u00022\u0006\u0010\u001b\u001a\u00020\u0001\u001a\n\u0010\u001c\u001a\u00020\u0002*\u00020\u0002\u001a\u001d\u0010\u001c\u001a\b\u0012\u0004\u0012\u00020\u00020\u001d*\b\u0012\u0004\u0012\u00020\u00020\u001dH\u0002¢\u0006\u0002\b\u001e\u001a\u0011\u0010\u001c\u001a\u00020\u001f*\u00020\u001fH\u0002¢\u0006\u0002\b\u001e\u001a\u0012\u0010 \u001a\u00020\u0002*\u00020\u00022\u0006\u0010!\u001a\u00020\u0002\u001a\u0014\u0010\"\u001a\u0004\u0018\u00010\u0002*\u00020\u00022\u0006\u0010!\u001a\u00020\u0002\u001a\u0012\u0010#\u001a\u00020\u0002*\u00020\u00022\u0006\u0010!\u001a\u00020\u0002\u001a\u0012\u0010$\u001a\u00020\u0002*\u00020\u00022\u0006\u0010%\u001a\u00020\u0002\u001a\u0012\u0010$\u001a\u00020\u0002*\u00020\u00022\u0006\u0010%\u001a\u00020\u0001\u001a\u0012\u0010&\u001a\u00020\u0002*\u00020\u00022\u0006\u0010%\u001a\u00020\u0002\u001a\u0012\u0010&\u001a\u00020\u0002*\u00020\u00022\u0006\u0010%\u001a\u00020\u0001\u001a\u0012\u0010'\u001a\u00020\u000f*\u00020\u00022\u0006\u0010\u001b\u001a\u00020\u0002\u001a\u0012\u0010'\u001a\u00020\u000f*\u00020\u00022\u0006\u0010\u001b\u001a\u00020\u0001\u001a\u0012\u0010(\u001a\u00020\u0001*\u00020\u00022\u0006\u0010!\u001a\u00020\u0002\u001a\u001b\u0010)\u001a\u0004\u0018\u00010\u0001*\u00020\u00022\u0006\u0010!\u001a\u00020\u0002H\u0002¢\u0006\u0002\b*\"\u0015\u0010\u0000\u001a\u00020\u0001*\u00020\u00028F¢\u0006\u0006\u001a\u0004\b\u0003\u0010\u0004\"\u0015\u0010\u0005\u001a\u00020\u0001*\u00020\u00028F¢\u0006\u0006\u001a\u0004\b\u0006\u0010\u0004\"\u0015\u0010\u0007\u001a\u00020\u0001*\u00020\u00028F¢\u0006\u0006\u001a\u0004\b\b\u0010\u0004¨\u0006+"}, d2 = {"extension", "", "Ljava/io/File;", "getExtension", "(Ljava/io/File;)Ljava/lang/String;", "invariantSeparatorsPath", "getInvariantSeparatorsPath", "nameWithoutExtension", "getNameWithoutExtension", "createTempDir", "prefix", "suffix", "directory", "createTempFile", "copyRecursively", "", "target", "overwrite", "onError", "Lkotlin/Function2;", "Ljava/io/IOException;", "Lkotlin/io/OnErrorAction;", "copyTo", "bufferSize", "", "deleteRecursively", "endsWith", "other", "normalize", "", "normalize$FilesKt__UtilsKt", "Lkotlin/io/FilePathComponents;", "relativeTo", "base", "relativeToOrNull", "relativeToOrSelf", "resolve", "relative", "resolveSibling", "startsWith", "toRelativeString", "toRelativeStringOrNull", "toRelativeStringOrNull$FilesKt__UtilsKt", "kotlin-stdlib"}, k = 5, mv = {1, 9, 0}, xi = ConstraintLayout.LayoutParams.Table.LAYOUT_EDITOR_ABSOLUTEX, xs = "kotlin/io/FilesKt")
|
|
/* loaded from: classes3.dex */
|
|
public class FilesKt__UtilsKt extends FilesKt__FileTreeWalkKt {
|
|
public static /* synthetic */ File createTempDir$default(String str, String str2, File file, int i, Object obj) {
|
|
if ((i & 1) != 0) {
|
|
str = "tmp";
|
|
}
|
|
if ((i & 2) != 0) {
|
|
str2 = null;
|
|
}
|
|
if ((i & 4) != 0) {
|
|
file = null;
|
|
}
|
|
return FilesKt.createTempDir(str, str2, file);
|
|
}
|
|
|
|
@Deprecated(message = "Avoid creating temporary directories in the default temp location with this function due to too wide permissions on the newly created directory. Use kotlin.io.path.createTempDirectory instead.")
|
|
public static final File createTempDir(String prefix, String str, File file) {
|
|
Intrinsics.checkNotNullParameter(prefix, "prefix");
|
|
File createTempFile = File.createTempFile(prefix, str, file);
|
|
createTempFile.delete();
|
|
if (createTempFile.mkdir()) {
|
|
Intrinsics.checkNotNull(createTempFile);
|
|
return createTempFile;
|
|
}
|
|
throw new IOException("Unable to create temporary directory " + createTempFile + '.');
|
|
}
|
|
|
|
public static /* synthetic */ File createTempFile$default(String str, String str2, File file, int i, Object obj) {
|
|
if ((i & 1) != 0) {
|
|
str = "tmp";
|
|
}
|
|
if ((i & 2) != 0) {
|
|
str2 = null;
|
|
}
|
|
if ((i & 4) != 0) {
|
|
file = null;
|
|
}
|
|
return FilesKt.createTempFile(str, str2, file);
|
|
}
|
|
|
|
@Deprecated(message = "Avoid creating temporary files in the default temp location with this function due to too wide permissions on the newly created file. Use kotlin.io.path.createTempFile instead or resort to java.io.File.createTempFile.")
|
|
public static final File createTempFile(String prefix, String str, File file) {
|
|
Intrinsics.checkNotNullParameter(prefix, "prefix");
|
|
File createTempFile = File.createTempFile(prefix, str, file);
|
|
Intrinsics.checkNotNullExpressionValue(createTempFile, "createTempFile(...)");
|
|
return createTempFile;
|
|
}
|
|
|
|
public static final String getExtension(File file) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
String name = file.getName();
|
|
Intrinsics.checkNotNullExpressionValue(name, "getName(...)");
|
|
return StringsKt.substringAfterLast(name, '.', "");
|
|
}
|
|
|
|
public static final String getInvariantSeparatorsPath(File file) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
if (File.separatorChar != '/') {
|
|
String path = file.getPath();
|
|
Intrinsics.checkNotNullExpressionValue(path, "getPath(...)");
|
|
return StringsKt.replace$default(path, File.separatorChar, '/', false, 4, (Object) null);
|
|
}
|
|
String path2 = file.getPath();
|
|
Intrinsics.checkNotNullExpressionValue(path2, "getPath(...)");
|
|
return path2;
|
|
}
|
|
|
|
public static final String getNameWithoutExtension(File file) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
String name = file.getName();
|
|
Intrinsics.checkNotNullExpressionValue(name, "getName(...)");
|
|
return StringsKt.substringBeforeLast$default(name, ".", (String) null, 2, (Object) null);
|
|
}
|
|
|
|
public static final String toRelativeString(File file, File base) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(base, "base");
|
|
String relativeStringOrNull$FilesKt__UtilsKt = toRelativeStringOrNull$FilesKt__UtilsKt(file, base);
|
|
if (relativeStringOrNull$FilesKt__UtilsKt != null) {
|
|
return relativeStringOrNull$FilesKt__UtilsKt;
|
|
}
|
|
throw new IllegalArgumentException("this and base files have different roots: " + file + " and " + base + '.');
|
|
}
|
|
|
|
public static final File relativeTo(File file, File base) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(base, "base");
|
|
return new File(FilesKt.toRelativeString(file, base));
|
|
}
|
|
|
|
public static final File relativeToOrSelf(File file, File base) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(base, "base");
|
|
String relativeStringOrNull$FilesKt__UtilsKt = toRelativeStringOrNull$FilesKt__UtilsKt(file, base);
|
|
return relativeStringOrNull$FilesKt__UtilsKt != null ? new File(relativeStringOrNull$FilesKt__UtilsKt) : file;
|
|
}
|
|
|
|
public static final File relativeToOrNull(File file, File base) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(base, "base");
|
|
String relativeStringOrNull$FilesKt__UtilsKt = toRelativeStringOrNull$FilesKt__UtilsKt(file, base);
|
|
if (relativeStringOrNull$FilesKt__UtilsKt != null) {
|
|
return new File(relativeStringOrNull$FilesKt__UtilsKt);
|
|
}
|
|
return null;
|
|
}
|
|
|
|
private static final String toRelativeStringOrNull$FilesKt__UtilsKt(File file, File file2) {
|
|
FilePathComponents normalize$FilesKt__UtilsKt = normalize$FilesKt__UtilsKt(FilesKt.toComponents(file));
|
|
FilePathComponents normalize$FilesKt__UtilsKt2 = normalize$FilesKt__UtilsKt(FilesKt.toComponents(file2));
|
|
if (!Intrinsics.areEqual(normalize$FilesKt__UtilsKt.getRoot(), normalize$FilesKt__UtilsKt2.getRoot())) {
|
|
return null;
|
|
}
|
|
int size = normalize$FilesKt__UtilsKt2.getSize();
|
|
int size2 = normalize$FilesKt__UtilsKt.getSize();
|
|
int min = Math.min(size2, size);
|
|
int i = 0;
|
|
while (i < min && Intrinsics.areEqual(normalize$FilesKt__UtilsKt.getSegments().get(i), normalize$FilesKt__UtilsKt2.getSegments().get(i))) {
|
|
i++;
|
|
}
|
|
StringBuilder sb = new StringBuilder();
|
|
int i2 = size - 1;
|
|
if (i <= i2) {
|
|
while (!Intrinsics.areEqual(normalize$FilesKt__UtilsKt2.getSegments().get(i2).getName(), "..")) {
|
|
sb.append("..");
|
|
if (i2 != i) {
|
|
sb.append(File.separatorChar);
|
|
}
|
|
if (i2 != i) {
|
|
i2--;
|
|
}
|
|
}
|
|
return null;
|
|
}
|
|
if (i < size2) {
|
|
if (i < size) {
|
|
sb.append(File.separatorChar);
|
|
}
|
|
String separator = File.separator;
|
|
Intrinsics.checkNotNullExpressionValue(separator, "separator");
|
|
CollectionsKt.joinTo(CollectionsKt.drop(normalize$FilesKt__UtilsKt.getSegments(), i), sb, (r14 & 2) != 0 ? ", " : separator, (r14 & 4) != 0 ? "" : null, (r14 & 8) != 0 ? "" : null, (r14 & 16) != 0 ? -1 : 0, (r14 & 32) != 0 ? "..." : null, (r14 & 64) != 0 ? null : null);
|
|
}
|
|
return sb.toString();
|
|
}
|
|
|
|
public static /* synthetic */ File copyTo$default(File file, File file2, boolean z, int i, int i2, Object obj) {
|
|
if ((i2 & 2) != 0) {
|
|
z = false;
|
|
}
|
|
if ((i2 & 4) != 0) {
|
|
i = 8192;
|
|
}
|
|
return FilesKt.copyTo(file, file2, z, i);
|
|
}
|
|
|
|
public static final File copyTo(File file, File target, boolean z, int i) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(target, "target");
|
|
if (!file.exists()) {
|
|
throw new NoSuchFileException(file, null, "The source file doesn't exist.", 2, null);
|
|
}
|
|
if (target.exists()) {
|
|
if (!z) {
|
|
throw new FileAlreadyExistsException(file, target, "The destination file already exists.");
|
|
}
|
|
if (!target.delete()) {
|
|
throw new FileAlreadyExistsException(file, target, "Tried to overwrite the destination, but failed to delete it.");
|
|
}
|
|
}
|
|
if (file.isDirectory()) {
|
|
if (!target.mkdirs()) {
|
|
throw new FileSystemException(file, target, "Failed to create target directory.");
|
|
}
|
|
} else {
|
|
File parentFile = target.getParentFile();
|
|
if (parentFile != null) {
|
|
parentFile.mkdirs();
|
|
}
|
|
FileOutputStream fileInputStream = new FileInputStream(file);
|
|
try {
|
|
FileInputStream fileInputStream2 = fileInputStream;
|
|
fileInputStream = new FileOutputStream(target);
|
|
try {
|
|
ByteStreamsKt.copyTo(fileInputStream2, fileInputStream, i);
|
|
CloseableKt.closeFinally(fileInputStream, null);
|
|
CloseableKt.closeFinally(fileInputStream, null);
|
|
} finally {
|
|
}
|
|
} finally {
|
|
}
|
|
}
|
|
return target;
|
|
}
|
|
|
|
public static /* synthetic */ boolean copyRecursively$default(File file, File file2, boolean z, Function2 function2, int i, Object obj) {
|
|
if ((i & 2) != 0) {
|
|
z = false;
|
|
}
|
|
if ((i & 4) != 0) {
|
|
function2 = new Function2() { // from class: kotlin.io.FilesKt__UtilsKt$copyRecursively$1
|
|
@Override // kotlin.jvm.functions.Function2
|
|
public final Void invoke(File file3, IOException exception) {
|
|
Intrinsics.checkNotNullParameter(file3, "<anonymous parameter 0>");
|
|
Intrinsics.checkNotNullParameter(exception, "exception");
|
|
throw exception;
|
|
}
|
|
};
|
|
}
|
|
return FilesKt.copyRecursively(file, file2, z, function2);
|
|
}
|
|
|
|
public static final boolean copyRecursively(File file, File target, boolean z, final Function2<? super File, ? super IOException, ? extends OnErrorAction> onError) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(target, "target");
|
|
Intrinsics.checkNotNullParameter(onError, "onError");
|
|
if (!file.exists()) {
|
|
return onError.invoke(file, new NoSuchFileException(file, null, "The source file doesn't exist.", 2, null)) != OnErrorAction.TERMINATE;
|
|
}
|
|
try {
|
|
Iterator<File> it = FilesKt.walkTopDown(file).onFail(new Function2<File, IOException, Unit>() { // from class: kotlin.io.FilesKt__UtilsKt$copyRecursively$2
|
|
/* JADX INFO: Access modifiers changed from: package-private */
|
|
/* JADX WARN: 'super' call moved to the top of the method (can break code semantics) */
|
|
/* JADX WARN: Multi-variable type inference failed */
|
|
{
|
|
super(2);
|
|
}
|
|
|
|
@Override // kotlin.jvm.functions.Function2
|
|
public /* bridge */ /* synthetic */ Unit invoke(File file2, IOException iOException) {
|
|
invoke2(file2, iOException);
|
|
return Unit.INSTANCE;
|
|
}
|
|
|
|
/* renamed from: invoke, reason: avoid collision after fix types in other method */
|
|
public final void invoke2(File f, IOException e) {
|
|
Intrinsics.checkNotNullParameter(f, "f");
|
|
Intrinsics.checkNotNullParameter(e, "e");
|
|
if (onError.invoke(f, e) == OnErrorAction.TERMINATE) {
|
|
throw new TerminateException(f);
|
|
}
|
|
}
|
|
}).iterator();
|
|
while (it.hasNext()) {
|
|
File next = it.next();
|
|
if (!next.exists()) {
|
|
if (onError.invoke(next, new NoSuchFileException(next, null, "The source file doesn't exist.", 2, null)) == OnErrorAction.TERMINATE) {
|
|
return false;
|
|
}
|
|
} else {
|
|
File file2 = new File(target, FilesKt.toRelativeString(next, file));
|
|
if (file2.exists() && (!next.isDirectory() || !file2.isDirectory())) {
|
|
if (z) {
|
|
if (file2.isDirectory()) {
|
|
if (!FilesKt.deleteRecursively(file2)) {
|
|
}
|
|
} else if (!file2.delete()) {
|
|
}
|
|
}
|
|
if (onError.invoke(file2, new FileAlreadyExistsException(next, file2, "The destination file already exists.")) == OnErrorAction.TERMINATE) {
|
|
return false;
|
|
}
|
|
}
|
|
if (next.isDirectory()) {
|
|
file2.mkdirs();
|
|
} else if (FilesKt.copyTo$default(next, file2, z, 0, 4, null).length() != next.length() && onError.invoke(next, new IOException("Source file wasn't copied completely, length of destination file differs.")) == OnErrorAction.TERMINATE) {
|
|
return false;
|
|
}
|
|
}
|
|
}
|
|
return true;
|
|
} catch (TerminateException unused) {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public static final boolean deleteRecursively(File file) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
while (true) {
|
|
boolean z = true;
|
|
for (File file2 : FilesKt.walkBottomUp(file)) {
|
|
if (file2.delete() || !file2.exists()) {
|
|
if (z) {
|
|
break;
|
|
}
|
|
}
|
|
z = false;
|
|
}
|
|
return z;
|
|
}
|
|
}
|
|
|
|
public static final boolean startsWith(File file, File other) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(other, "other");
|
|
FilePathComponents components = FilesKt.toComponents(file);
|
|
FilePathComponents components2 = FilesKt.toComponents(other);
|
|
if (Intrinsics.areEqual(components.getRoot(), components2.getRoot()) && components.getSize() >= components2.getSize()) {
|
|
return components.getSegments().subList(0, components2.getSize()).equals(components2.getSegments());
|
|
}
|
|
return false;
|
|
}
|
|
|
|
public static final boolean startsWith(File file, String other) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(other, "other");
|
|
return FilesKt.startsWith(file, new File(other));
|
|
}
|
|
|
|
public static final boolean endsWith(File file, File other) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(other, "other");
|
|
FilePathComponents components = FilesKt.toComponents(file);
|
|
FilePathComponents components2 = FilesKt.toComponents(other);
|
|
if (components2.isRooted()) {
|
|
return Intrinsics.areEqual(file, other);
|
|
}
|
|
int size = components.getSize() - components2.getSize();
|
|
if (size < 0) {
|
|
return false;
|
|
}
|
|
return components.getSegments().subList(size, components.getSize()).equals(components2.getSegments());
|
|
}
|
|
|
|
public static final boolean endsWith(File file, String other) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(other, "other");
|
|
return FilesKt.endsWith(file, new File(other));
|
|
}
|
|
|
|
public static final File normalize(File file) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
FilePathComponents components = FilesKt.toComponents(file);
|
|
File root = components.getRoot();
|
|
List<File> normalize$FilesKt__UtilsKt = normalize$FilesKt__UtilsKt(components.getSegments());
|
|
String separator = File.separator;
|
|
Intrinsics.checkNotNullExpressionValue(separator, "separator");
|
|
return FilesKt.resolve(root, CollectionsKt.joinToString$default(normalize$FilesKt__UtilsKt, separator, null, null, 0, null, null, 62, null));
|
|
}
|
|
|
|
private static final FilePathComponents normalize$FilesKt__UtilsKt(FilePathComponents filePathComponents) {
|
|
return new FilePathComponents(filePathComponents.getRoot(), normalize$FilesKt__UtilsKt(filePathComponents.getSegments()));
|
|
}
|
|
|
|
private static final List<File> normalize$FilesKt__UtilsKt(List<? extends File> list) {
|
|
ArrayList arrayList = new ArrayList(list.size());
|
|
for (File file : list) {
|
|
String name = file.getName();
|
|
if (!Intrinsics.areEqual(name, ".")) {
|
|
if (!Intrinsics.areEqual(name, "..")) {
|
|
arrayList.add(file);
|
|
} else if (arrayList.isEmpty() || Intrinsics.areEqual(((File) CollectionsKt.last((List) arrayList)).getName(), "..")) {
|
|
arrayList.add(file);
|
|
} else {
|
|
arrayList.remove(arrayList.size() - 1);
|
|
}
|
|
}
|
|
}
|
|
return arrayList;
|
|
}
|
|
|
|
public static final File resolve(File file, File relative) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(relative, "relative");
|
|
if (FilesKt.isRooted(relative)) {
|
|
return relative;
|
|
}
|
|
String file2 = file.toString();
|
|
Intrinsics.checkNotNullExpressionValue(file2, "toString(...)");
|
|
String str = file2;
|
|
return (str.length() == 0 || StringsKt.endsWith$default((CharSequence) str, File.separatorChar, false, 2, (Object) null)) ? new File(file2 + relative) : new File(file2 + File.separatorChar + relative);
|
|
}
|
|
|
|
public static final File resolve(File file, String relative) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(relative, "relative");
|
|
return FilesKt.resolve(file, new File(relative));
|
|
}
|
|
|
|
public static final File resolveSibling(File file, File relative) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(relative, "relative");
|
|
FilePathComponents components = FilesKt.toComponents(file);
|
|
return FilesKt.resolve(FilesKt.resolve(components.getRoot(), components.getSize() == 0 ? new File("..") : components.subPath(0, components.getSize() - 1)), relative);
|
|
}
|
|
|
|
public static final File resolveSibling(File file, String relative) {
|
|
Intrinsics.checkNotNullParameter(file, "<this>");
|
|
Intrinsics.checkNotNullParameter(relative, "relative");
|
|
return FilesKt.resolveSibling(file, new File(relative));
|
|
}
|
|
}
|