414 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			414 lines
		
	
	
		
			22 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
| package kotlin.io;
 | |
| 
 | |
| import androidx.constraintlayout.core.motion.utils.TypedValues;
 | |
| 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;
 | |
| 
 | |
| /* 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", "", TypedValues.AttributesType.S_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, 8, 0}, xi = 49, xs = "kotlin/io/FilesKt")
 | |
| /* loaded from: classes.dex */
 | |
| 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 dir = File.createTempFile(prefix, str, file);
 | |
|         dir.delete();
 | |
|         if (dir.mkdir()) {
 | |
|             Intrinsics.checkNotNullExpressionValue(dir, "dir");
 | |
|             return dir;
 | |
|         }
 | |
|         throw new IOException("Unable to create temporary directory " + dir + '.');
 | |
|     }
 | |
| 
 | |
|     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(prefix, suffix, directory)");
 | |
|         return createTempFile;
 | |
|     }
 | |
| 
 | |
|     public static final String getExtension(File file) {
 | |
|         Intrinsics.checkNotNullParameter(file, "<this>");
 | |
|         String name = file.getName();
 | |
|         Intrinsics.checkNotNullExpressionValue(name, "name");
 | |
|         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, "path");
 | |
|             return StringsKt.replace$default(path, File.separatorChar, '/', false, 4, (Object) null);
 | |
|         }
 | |
|         String path2 = file.getPath();
 | |
|         Intrinsics.checkNotNullExpressionValue(path2, "path");
 | |
|         return path2;
 | |
|     }
 | |
| 
 | |
|     public static final String getNameWithoutExtension(File file) {
 | |
|         Intrinsics.checkNotNullParameter(file, "<this>");
 | |
|         String name = file.getName();
 | |
|         Intrinsics.checkNotNullExpressionValue(name, "name");
 | |
|         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 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, "this.toString()");
 | |
|         String str = file2;
 | |
|         if (str.length() == 0 || StringsKt.endsWith$default((CharSequence) str, File.separatorChar, false, 2, (Object) null)) {
 | |
|             return new File(file2 + relative);
 | |
|         }
 | |
|         return 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));
 | |
|     }
 | |
| }
 |