From fb3d2a86d96d105dde5974f9ebdffaea6b1cd6c8 Mon Sep 17 00:00:00 2001 From: "Vladislav.Soroka" Date: Mon, 8 Jun 2020 10:39:01 +0300 Subject: [PATCH] [Gradle] do not allow to close connection for reuse IDEA-185242 IDEA-202453 GitOrigin-RevId: 85cb4ccf4b3b0fcbc217a74bb769a67982eaf878 --- .../plugins/gradle/GradleConnectorService.kt | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleConnectorService.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleConnectorService.kt index 6c2cdbaf54b0..39c6cc2d3e9a 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleConnectorService.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/GradleConnectorService.kt @@ -9,8 +9,7 @@ import com.intellij.openapi.diagnostic.logger import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId import com.intellij.openapi.project.Project import com.intellij.openapi.util.io.FileUtil -import org.gradle.tooling.GradleConnector -import org.gradle.tooling.ProjectConnection +import org.gradle.tooling.* import org.gradle.tooling.internal.consumer.DefaultGradleConnector import org.gradle.util.GradleVersion import org.jetbrains.annotations.ApiStatus @@ -19,6 +18,7 @@ import org.jetbrains.plugins.gradle.service.project.DistributionFactoryExt import org.jetbrains.plugins.gradle.settings.DistributionType import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings import java.io.File +import java.nio.file.Path import java.util.concurrent.ConcurrentHashMap import java.util.concurrent.TimeUnit import java.util.function.Function @@ -69,7 +69,8 @@ class GradleConnectorService(@Suppress("UNUSED_PARAMETER") project: Project) : D // release obsolete connection conn.disconnect() } - return@compute GradleProjectConnection(connectorParams, newConnector, newConnection) + val wrappedConnection = WrappedConnection(newConnection) + return@compute GradleProjectConnection(connectorParams, newConnector, wrappedConnection) }!!.connection } @@ -84,6 +85,20 @@ class GradleConnectorService(@Suppress("UNUSED_PARAMETER") project: Project) : D } } + private class WrappedConnection(val delegate: ProjectConnection) : ProjectConnection { + override fun newBuild(): BuildLauncher = delegate.newBuild() + override fun action(p0: BuildAction?): BuildActionExecuter = delegate.action(p0) + override fun action(): BuildActionExecuter.Builder = delegate.action() + override fun model(p0: Class?): ModelBuilder = delegate.model(p0) + override fun close() { + throw IllegalStateException("This connection should not be closed explicitly.") + } + override fun newTestLauncher(): TestLauncher = delegate.newTestLauncher() + override fun getModel(p0: Class?): T = delegate.getModel(p0) + override fun getModel(p0: Class?, p1: ResultHandler?) = delegate.getModel(p0, p1) + override fun notifyDaemonsAboutChangedPaths(p0: MutableList?) = delegate.notifyDaemonsAboutChangedPaths(p0) + } + private data class ConnectorParams( val projectPath: String, val serviceDirectory: String?,