diff --git a/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt b/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt index 74e2cd840a3..745453842f6 100644 --- a/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt +++ b/build-common/src/org/jetbrains/kotlin/incremental/buildUtil.kt @@ -32,6 +32,7 @@ import org.jetbrains.kotlin.progress.CompilationCanceledStatus import org.jetbrains.kotlin.resolve.sam.SAM_LOOKUP_NAME import org.jetbrains.kotlin.utils.addToStdlib.flattenTo import java.io.File +import java.nio.file.Files import java.util.* import kotlin.collections.HashSet import kotlin.collections.LinkedHashSet @@ -67,7 +68,7 @@ fun makeModuleFile( friendDirs ) - val scriptFile = File.createTempFile("kjps", sanitizeJavaIdentifier(name) + ".script.xml") + val scriptFile = Files.createTempFile("kjps", sanitizeJavaIdentifier(name) + ".script.xml").toFile() scriptFile.writeText(builder.asText().toString()) return scriptFile } diff --git a/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt b/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt index f8faf7a0149..2464d4f46f3 100644 --- a/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt +++ b/jps-plugin/src/org/jetbrains/kotlin/jps/targets/KotlinJvmModuleBuildTarget.kt @@ -46,6 +46,9 @@ import org.jetbrains.kotlin.utils.keysToMap import org.jetbrains.org.objectweb.asm.ClassReader import java.io.File import java.io.IOException +import java.nio.file.Files +import java.nio.file.Path +import java.nio.file.Paths private const val JVM_BUILD_META_INFO_FILE_NAME = "jvm-build-meta-info.txt" @@ -242,14 +245,18 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB append("-test") } } - val dir = System.getProperty("kotlin.jps.dir.for.module.files")?.let { File(it) }?.takeIf { it.isDirectory } + + fun createTempFile(dir: Path?, prefix: String?, suffix: String?): Path = + if (dir != null) Files.createTempFile(dir, prefix, suffix) else Files.createTempFile(prefix, suffix) + + val dir = System.getProperty("kotlin.jps.dir.for.module.files")?.let { Paths.get(it) }?.takeIf { Files.isDirectory(it) } return try { - File.createTempFile("kjps", readableSuffix + ".script.xml", dir) + createTempFile(dir, "kjps", readableSuffix + ".script.xml") } catch (e: IOException) { // sometimes files cannot be created, because file name is too long (Windows, Mac OS) // see https://bugs.openjdk.java.net/browse/JDK-8148023 try { - File.createTempFile("kjps", ".script.xml", dir) + createTempFile(dir, "kjps", ".script.xml") } catch (e: IOException) { val message = buildString { append("Could not create module file when building chunk $chunk") @@ -259,7 +266,7 @@ class KotlinJvmModuleBuildTarget(kotlinContext: KotlinCompileContext, jpsModuleB } throw RuntimeException(message, e) } - } + }.toFile() } private fun findClassPathRoots(): Collection { diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt index 943a557fed7..0a5ea37eeae 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/compilerRunner/reportUtils.kt @@ -31,6 +31,7 @@ import org.jetbrains.org.objectweb.asm.ClassVisitor import org.jetbrains.org.objectweb.asm.FieldVisitor import org.jetbrains.org.objectweb.asm.Opcodes import java.io.File +import java.nio.file.Files import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.zip.ZipFile @@ -126,7 +127,7 @@ internal fun runToolInSeparateProcess( private fun writeArgumentsToFile(directory: File, argsArray: Array): File { val compilerOptions = - File.createTempFile(LocalDateTime.now().format(DateTimeFormatter.BASIC_ISO_DATE) + "_", ".compiler.options", directory) + Files.createTempFile(directory.toPath(), LocalDateTime.now().format(DateTimeFormatter.BASIC_ISO_DATE) + "_", ".compiler.options").toFile() compilerOptions.deleteOnExit() compilerOptions.writeText(argsArray.joinToString(" ") { "\"${StringEscapeUtils.escapeJava(it)}\"" }) return compilerOptions diff --git a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/fileUtils.kt b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/fileUtils.kt index 06bb7469272..4353ac6ef62 100644 --- a/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/fileUtils.kt +++ b/libraries/tools/kotlin-gradle-plugin/src/main/kotlin/org/jetbrains/kotlin/gradle/utils/fileUtils.kt @@ -7,6 +7,7 @@ package org.jetbrains.kotlin.gradle.utils import org.gradle.api.Project import java.io.File +import java.nio.file.Files import java.nio.file.Paths import java.util.* @@ -28,10 +29,10 @@ internal fun File.relativeToRoot(project: Project): String = internal fun Iterable.toSortedPathsArray(): Array = map { it.canonicalPath }.toTypedArray().also { Arrays.sort(it) } -internal fun newTmpFile(prefix: String, suffix: String? = null, directory: File? = null, deleteOnExit: Boolean = true) = - File.createTempFile(prefix, suffix, directory).apply { - if (deleteOnExit) deleteOnExit() - } +internal fun newTmpFile(prefix: String, suffix: String? = null, directory: File? = null, deleteOnExit: Boolean = true): File = + (if (directory == null) Files.createTempFile(prefix, suffix) else Files.createTempFile(directory.toPath(), prefix, suffix)) + .toFile() + .apply { if (deleteOnExit) deleteOnExit() } internal fun File.isParentOf(childCandidate: File, strict: Boolean = false): Boolean { val parentPath = Paths.get(this.absolutePath).normalize() diff --git a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/ExecuteKotlinScriptMojo.java b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/ExecuteKotlinScriptMojo.java index 9050707c2aa..e85cb4f6c0a 100644 --- a/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/ExecuteKotlinScriptMojo.java +++ b/libraries/tools/kotlin-maven-plugin/src/main/java/org/jetbrains/kotlin/maven/ExecuteKotlinScriptMojo.java @@ -53,9 +53,10 @@ import org.jetbrains.kotlin.scripting.compiler.plugin.ConfigurationKt; import org.jetbrains.kotlin.scripting.compiler.plugin.ScriptingCompilerConfigurationComponentRegistrar; import org.jetbrains.kotlin.utils.ParametersMapKt; -import java.io.File; -import java.io.FileOutputStream; -import java.io.IOException; +import java.io.*; +import java.nio.charset.StandardCharsets; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -138,17 +139,17 @@ public class ExecuteKotlinScriptMojo extends AbstractMojo { buildDirectory.mkdirs(); } - File scriptFile = File.createTempFile("kotlin-maven-plugin-inline-script-", ".tmp.kts", buildDirectory); - FileOutputStream stream = new FileOutputStream(scriptFile); - stream.write(script.getBytes("UTF-8")); - stream.close(); + Path scriptFile = Files.createTempFile(buildDirectory.toPath(), "kotlin-maven-plugin-inline-script-", ".tmp.kts"); + try (BufferedWriter writer = Files.newBufferedWriter(scriptFile, StandardCharsets.UTF_8)) { + writer.write(script); + } try { - executeScriptFile(scriptFile); + executeScriptFile(scriptFile.toFile()); } finally { - boolean deleted = scriptFile.delete(); + boolean deleted = Files.deleteIfExists(scriptFile); if (!deleted) { - getLog().warn("Error deleting " + scriptFile.getAbsolutePath()); + getLog().warn("Error deleting " + scriptFile.toAbsolutePath()); } } } catch (IOException e) {