Fix NPE from JarURLConnection.getUseCaches when loading compiler plugins

#KT-22513 Fixed
This commit is contained in:
Alexander Udalov
2018-03-26 19:39:21 +02:00
parent 2125c42328
commit d0e99e9a3f
@@ -29,6 +29,8 @@ import org.jetbrains.kotlin.cli.jvm.compiler.CompileEnvironmentException
import org.jetbrains.kotlin.config.KotlinCompilerVersion
import org.jetbrains.kotlin.config.Services
import java.io.PrintStream
import java.net.URL
import java.net.URLConnection
import java.util.function.Predicate
abstract class CLITool<A : CommonToolArguments> {
@@ -79,6 +81,8 @@ abstract class CLITool<A : CommonToolArguments> {
}
fun exec(messageCollector: MessageCollector, services: Services, arguments: A): ExitCode {
disableURLConnectionCaches()
printVersionIfNeeded(messageCollector, arguments)
val fixedMessageCollector = if (arguments.suppressWarnings && !arguments.allWarningsAsErrors) {
@@ -92,6 +96,16 @@ abstract class CLITool<A : CommonToolArguments> {
return execImpl(fixedMessageCollector, services, arguments)
}
private fun disableURLConnectionCaches() {
// We disable caches to avoid problems with compiler under daemon, see https://youtrack.jetbrains.com/issue/KT-22513
// For some inexplicable reason, URLConnection.setDefaultUseCaches is an instance method modifying a static field,
// so we have to create a dummy instance to call that method
object : URLConnection(URL("file:.")) {
override fun connect() = throw UnsupportedOperationException()
}.defaultUseCaches = false
}
// Used in kotlin-maven-plugin (KotlinCompileMojoBase)
protected abstract fun execImpl(messageCollector: MessageCollector, services: Services, arguments: A): ExitCode