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?,