diff --git a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt index fc464699c15..f9112299173 100644 --- a/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt +++ b/compiler/cli/src/org/jetbrains/kotlin/cli/common/CLITool.kt @@ -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 { @@ -79,6 +81,8 @@ abstract class CLITool { } 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 { 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