Replace File.relativePath from stdlib with File.descendantRelativeTo in fileUtils.

IO utils: cleanup java usages.
This commit is contained in:
Ilya Gorbunov
2016-01-20 01:01:37 +03:00
parent b39b29dfea
commit d728a1a6c7
3 changed files with 25 additions and 2 deletions
@@ -19,6 +19,7 @@ package org.jetbrains.kotlin.cli.common.messages;
import kotlin.io.FilesKt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.utils.fileUtils.FileUtilsKt;
import java.io.File;
@@ -43,13 +44,14 @@ public interface MessageRenderer {
};
MessageRenderer PLAIN_RELATIVE_PATHS = new PlainTextMessageRenderer() {
@NotNull
private final File cwd = new File(".").getAbsoluteFile();
@Nullable
@Override
protected String getPath(@NotNull CompilerMessageLocation location) {
String path = location.getPath();
return cwd == null || path == null ? path : FilesKt.relativePath(cwd, new File(path));
return path == null ? path : FileUtilsKt.descendantRelativeTo(new File(path), cwd).getPath();
}
};
@@ -30,6 +30,7 @@ import com.intellij.psi.PsiManager;
import kotlin.Unit;
import kotlin.io.FilesKt;
import kotlin.jvm.functions.Function1;
import kotlin.sequences.SequencesKt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.kotlin.backend.common.output.OutputFile;
@@ -162,7 +163,7 @@ public class CompileEnvironmentUtil {
continue;
}
FilesKt.recurse(new File(sourceRootPath), new Function1<File, Unit>() {
SequencesKt.forEach(FilesKt.walkTopDown(new File(sourceRootPath)), new Function1<File, Unit>() {
@Override
public Unit invoke(File file) {
if (file.isFile()) {
@@ -31,4 +31,24 @@ fun File.withReplacedExtensionOrNull(oldExt: String, newExt: String): File? {
}
return null
}
/**
* Calculates the relative path to this file from [base] file.
* Note that the [base] file is treated as a directory.
*
* If this file matches the [base] directory an empty path is returned.
* If this file does not belong to the [base] directory, it is returned unchanged.
*/
public fun File.descendantRelativeTo(base: File): File {
val prefix = base.canonicalPath
val answer = this.canonicalPath
return if (answer.startsWith(prefix)) {
val prefixSize = prefix.length
if (answer.length > prefixSize) {
File(answer.substring(prefixSize + 1))
} else File("")
} else {
this
}
}