Use NIO Files for creating temp files: scripting, daemon, main-kts
This commit is contained in:
+2
-1
@@ -25,6 +25,7 @@ import java.io.File
|
|||||||
import java.io.Serializable
|
import java.io.Serializable
|
||||||
import java.net.SocketException
|
import java.net.SocketException
|
||||||
import java.nio.channels.ClosedChannelException
|
import java.nio.channels.ClosedChannelException
|
||||||
|
import java.nio.file.Files
|
||||||
import java.rmi.ConnectException
|
import java.rmi.ConnectException
|
||||||
import java.rmi.ConnectIOException
|
import java.rmi.ConnectIOException
|
||||||
import java.rmi.UnmarshalException
|
import java.rmi.UnmarshalException
|
||||||
@@ -422,7 +423,7 @@ class KotlinCompilerClient : KotlinCompilerDaemonClient {
|
|||||||
report: (DaemonReportCategory, String) -> Unit
|
report: (DaemonReportCategory, String) -> Unit
|
||||||
): Deferred<Pair<CompileServiceAsync?, DaemonJVMOptions>> = GlobalScope.async {
|
): Deferred<Pair<CompileServiceAsync?, DaemonJVMOptions>> = GlobalScope.async {
|
||||||
registryDir.mkdirs()
|
registryDir.mkdirs()
|
||||||
val timestampMarker = createTempFile("kotlin-daemon-client-tsmarker", directory = registryDir)
|
val timestampMarker = Files.createTempFile(registryDir.toPath(), "kotlin-daemon-client-tsmarker", null).toFile()
|
||||||
val aliveWithMetadata = try {
|
val aliveWithMetadata = try {
|
||||||
walkDaemonsAsync(registryDir, compilerId, timestampMarker, report = report)
|
walkDaemonsAsync(registryDir, compilerId, timestampMarker, report = report)
|
||||||
} finally {
|
} finally {
|
||||||
|
|||||||
+2
-1
@@ -26,6 +26,7 @@ import java.io.File
|
|||||||
import java.io.OutputStream
|
import java.io.OutputStream
|
||||||
import java.io.PrintStream
|
import java.io.PrintStream
|
||||||
import java.net.SocketException
|
import java.net.SocketException
|
||||||
|
import java.nio.file.Files
|
||||||
import java.rmi.ConnectException
|
import java.rmi.ConnectException
|
||||||
import java.rmi.ConnectIOException
|
import java.rmi.ConnectIOException
|
||||||
import java.rmi.UnmarshalException
|
import java.rmi.UnmarshalException
|
||||||
@@ -347,7 +348,7 @@ object KotlinCompilerClient {
|
|||||||
|
|
||||||
private fun tryFindSuitableDaemonOrNewOpts(registryDir: File, compilerId: CompilerId, daemonJVMOptions: DaemonJVMOptions, report: (DaemonReportCategory, String) -> Unit): Pair<CompileService?, DaemonJVMOptions> {
|
private fun tryFindSuitableDaemonOrNewOpts(registryDir: File, compilerId: CompilerId, daemonJVMOptions: DaemonJVMOptions, report: (DaemonReportCategory, String) -> Unit): Pair<CompileService?, DaemonJVMOptions> {
|
||||||
registryDir.mkdirs()
|
registryDir.mkdirs()
|
||||||
val timestampMarker = createTempFile("kotlin-daemon-client-tsmarker", directory = registryDir)
|
val timestampMarker = Files.createTempFile(registryDir.toPath(), "kotlin-daemon-client-tsmarker", null).toFile()
|
||||||
val aliveWithMetadata = try {
|
val aliveWithMetadata = try {
|
||||||
walkDaemons(registryDir, compilerId, timestampMarker, report = report).toList()
|
walkDaemons(registryDir, compilerId, timestampMarker, report = report).toList()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,7 @@
|
|||||||
package org.jetbrains.kotlin.daemon.common
|
package org.jetbrains.kotlin.daemon.common
|
||||||
|
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.nio.file.Files
|
||||||
import java.rmi.registry.LocateRegistry
|
import java.rmi.registry.LocateRegistry
|
||||||
|
|
||||||
|
|
||||||
@@ -106,7 +107,12 @@ private inline fun tryConnectToDaemon(port: Int, report: (DaemonReportCategory,
|
|||||||
private const val validFlagFileKeywordChars = "abcdefghijklmnopqrstuvwxyz0123456789-_"
|
private const val validFlagFileKeywordChars = "abcdefghijklmnopqrstuvwxyz0123456789-_"
|
||||||
|
|
||||||
fun makeAutodeletingFlagFile(keyword: String = "compiler-client", baseDir: File? = null): File {
|
fun makeAutodeletingFlagFile(keyword: String = "compiler-client", baseDir: File? = null): File {
|
||||||
val flagFile = File.createTempFile("kotlin-${keyword.filter { validFlagFileKeywordChars.contains(it.toLowerCase()) }}-", "-is-running", baseDir?.takeIf { it.isDirectory && it.exists() })
|
val prefix = "kotlin-${keyword.filter { validFlagFileKeywordChars.contains(it.toLowerCase()) }}-"
|
||||||
|
val flagFile = if (baseDir?.isDirectory == true)
|
||||||
|
Files.createTempFile(baseDir.toPath(), prefix, "-is-running").toFile()
|
||||||
|
else
|
||||||
|
Files.createTempFile(prefix, "-is-running").toFile()
|
||||||
|
|
||||||
flagFile.deleteOnExit()
|
flagFile.deleteOnExit()
|
||||||
return flagFile
|
return flagFile
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -4,7 +4,9 @@ plugins {
|
|||||||
id("jps-compatible")
|
id("jps-compatible")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
val JDK_16: String by project
|
||||||
jvmTarget = "1.6"
|
jvmTarget = "1.6"
|
||||||
|
javaHome = JDK_16
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
compile(project(":kotlin-script-runtime"))
|
compile(project(":kotlin-script-runtime"))
|
||||||
@@ -22,6 +24,10 @@ tasks.withType<org.jetbrains.kotlin.gradle.dsl.KotlinCompile<*>> {
|
|||||||
kotlinOptions.freeCompilerArgs += "-Xallow-kotlin-package"
|
kotlinOptions.freeCompilerArgs += "-Xallow-kotlin-package"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
tasks.withType<Test> {
|
||||||
|
executable = "$JDK_16/bin/java"
|
||||||
|
}
|
||||||
|
|
||||||
publish()
|
publish()
|
||||||
|
|
||||||
runtimeJar()
|
runtimeJar()
|
||||||
|
|||||||
+17
-4
@@ -59,9 +59,18 @@ class ClasspathExtractionException(message: String) : Exception(message)
|
|||||||
fun classpathFromClassloader(currentClassLoader: ClassLoader, unpackJarCollections: Boolean = false): List<File>? {
|
fun classpathFromClassloader(currentClassLoader: ClassLoader, unpackJarCollections: Boolean = false): List<File>? {
|
||||||
val processedJars = hashSetOf<File>()
|
val processedJars = hashSetOf<File>()
|
||||||
val unpackJarCollectionsDir by lazy {
|
val unpackJarCollectionsDir by lazy {
|
||||||
createTempDir("unpackedJarCollections").canonicalFile.also {
|
File.createTempFile("unpackedJarCollections", null).canonicalFile.apply {
|
||||||
|
delete()
|
||||||
|
mkdir()
|
||||||
|
setReadable(false, false)
|
||||||
|
setWritable(false, false)
|
||||||
|
setExecutable(false, false)
|
||||||
|
setReadable(true, true)
|
||||||
|
setWritable(true, true)
|
||||||
|
setExecutable(true, true)
|
||||||
|
|
||||||
Runtime.getRuntime().addShutdownHook(Thread {
|
Runtime.getRuntime().addShutdownHook(Thread {
|
||||||
it.deleteRecursively()
|
deleteRecursively()
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -144,8 +153,12 @@ fun ClassLoader.classPathFromTypicalResourceUrls(): Sequence<File> =
|
|||||||
.distinct()
|
.distinct()
|
||||||
.filter { it.isValidClasspathFile() }
|
.filter { it.isValidClasspathFile() }
|
||||||
|
|
||||||
private fun File.unpackJarCollection(rootTempDir: File?): Sequence<File> {
|
private fun File.unpackJarCollection(rootTempDir: File): Sequence<File> {
|
||||||
val targetDir = createTempDir(nameWithoutExtension, directory = rootTempDir)
|
val targetDir = File.createTempFile(nameWithoutExtension, null, rootTempDir).apply {
|
||||||
|
delete()
|
||||||
|
mkdir()
|
||||||
|
}
|
||||||
|
|
||||||
return try {
|
return try {
|
||||||
ArrayList<File>().apply {
|
ArrayList<File>().apply {
|
||||||
JarInputStream(FileInputStream(this@unpackJarCollection)).use { jarInputStream ->
|
JarInputStream(FileInputStream(this@unpackJarCollection)).use { jarInputStream ->
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ import org.apache.ivy.plugins.resolver.IBiblioResolver
|
|||||||
import org.apache.ivy.util.DefaultMessageLogger
|
import org.apache.ivy.util.DefaultMessageLogger
|
||||||
import org.apache.ivy.util.Message
|
import org.apache.ivy.util.Message
|
||||||
import java.io.File
|
import java.io.File
|
||||||
|
import java.nio.file.Files
|
||||||
import kotlin.script.experimental.api.*
|
import kotlin.script.experimental.api.*
|
||||||
import kotlin.script.experimental.dependencies.ExternalDependenciesResolver
|
import kotlin.script.experimental.dependencies.ExternalDependenciesResolver
|
||||||
import kotlin.script.experimental.dependencies.RepositoryCoordinates
|
import kotlin.script.experimental.dependencies.RepositoryCoordinates
|
||||||
@@ -134,7 +135,7 @@ class IvyResolver : ExternalDependenciesResolver {
|
|||||||
// val report = ivy.resolve(moduleDescriptor, resolveOptions)
|
// val report = ivy.resolve(moduleDescriptor, resolveOptions)
|
||||||
|
|
||||||
//creates an ivy configuration file
|
//creates an ivy configuration file
|
||||||
val ivyFile = createTempFile("ivy", ".xml").apply { deleteOnExit() }
|
val ivyFile = Files.createTempFile("ivy", ".xml").toFile().apply { deleteOnExit() }
|
||||||
XmlModuleDescriptorWriter.write(moduleDescriptor, ivyFile)
|
XmlModuleDescriptorWriter.write(moduleDescriptor, ivyFile)
|
||||||
val report = ivy.resolve(ivyFile.toURI().toURL(), resolveOptions)
|
val report = ivy.resolve(ivyFile.toURI().toURL(), resolveOptions)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user