IDEA-321510 [Gradle|Lib] new: upgrading version of bundled Gradle tooling API up to 8.6 (PART 3/3)

Added support for the Gradle streamed value API with the target execution

GitOrigin-RevId: 50ade0d716c421b06b34d4177cbdbb76e91675c6
This commit is contained in:
Sergei Vorobyov
2024-03-20 11:11:31 +00:00
committed by intellij-monorepo-bot
parent 7e4d9da546
commit 9ca3db69b4
5 changed files with 56 additions and 5 deletions
@@ -4,9 +4,9 @@ package org.jetbrains.plugins.gradle.execution.target
import org.gradle.tooling.BuildAction
import org.gradle.tooling.BuildActionExecuter
import org.gradle.tooling.ResultHandler
import org.gradle.tooling.StreamedValueListener
import org.gradle.tooling.internal.consumer.PhasedBuildAction
import org.jetbrains.plugins.gradle.tooling.proxy.TargetBuildParameters.BuildActionParametersBuilder
import org.jetbrains.plugins.gradle.tooling.proxy.TargetBuildParameters.PhasedBuildActionParametersBuilder
import org.jetbrains.plugins.gradle.tooling.proxy.TargetBuildParameters.*
internal abstract class TargetBuildExecutor<R>(
connection: TargetProjectConnection,
@@ -14,6 +14,8 @@ internal abstract class TargetBuildExecutor<R>(
) : AbstractTargetBuildOperation<TargetBuildExecutor<R>, R>(connection, entryPoint),
BuildActionExecuter<R> {
abstract override val targetBuildParametersBuilder: StreamedValueAwareBuilder<*>
override fun run(): R {
return runAndGetResult()
}
@@ -33,6 +35,10 @@ internal abstract class TargetBuildExecutor<R>(
return this
}
override fun setStreamedValueListener(listener: StreamedValueListener) {
targetBuildParametersBuilder.setStreamedValueListener(listener)
}
companion object {
fun <R> createDefaultExecutor(
@@ -129,6 +129,11 @@ public class DefaultBuildController implements BuildController {
return GradleVersionUtil.isGradleAtLeast(gradleVersion, "7.4.2");
}
@Override
public <T> void send(T value) {
myDelegate.send(value);
}
@Override
public <T> List<T> run(Collection<? extends BuildAction<? extends T>> collection) {
if (isParallelModelFetchSupported()) {
@@ -9,5 +9,5 @@ class IntermediateResult(
) : org.gradle.launcher.daemon.protocol.Message(), Serializable
enum class IntermediateResultType {
PROJECT_LOADED, BUILD_FINISHED
PROJECT_LOADED, BUILD_FINISHED, STREAMED_VALUE
}
@@ -89,6 +89,13 @@ object Main {
.apply { targetBuildParameters.tasks.nullize()?.run { forTasks(*toTypedArray()) } }
is BuildActionParameters<*> -> connection.action(targetBuildParameters.buildAction)
.apply { targetBuildParameters.tasks.nullize()?.run { forTasks(*toTypedArray()) } }
.apply {
setStreamedValueListener { result ->
LOG.debug("Streamed value received for the build action: $result")
val convertedResult = convertAndSerializeData(result)
incomingConnectionHandler.dispatch(IntermediateResult(IntermediateResultType.STREAMED_VALUE, convertedResult))
}
}
is PhasedBuildActionParameters -> connection.action()
.projectsLoaded(targetBuildParameters.projectsLoadedAction, IntermediateResultHandler { result ->
LOG.debug("Project loading intermediate result: $result")
@@ -102,6 +109,13 @@ object Main {
})
.build()
.apply { targetBuildParameters.tasks.nullize()?.run { forTasks(*toTypedArray()) } }
.apply {
setStreamedValueListener { result ->
LOG.debug("Streamed value received for the phased build action: $result")
val convertedResult = convertAndSerializeData(result)
incomingConnectionHandler.dispatch(IntermediateResult(IntermediateResultType.STREAMED_VALUE, convertedResult))
}
}
}
val progressEventConverter = ProgressEventConverter()
operation.apply {
@@ -2,6 +2,7 @@
package org.jetbrains.plugins.gradle.tooling.proxy
import org.gradle.tooling.BuildAction
import org.gradle.tooling.StreamedValueListener
import org.gradle.tooling.events.OperationType
import org.gradle.tooling.internal.consumer.PhasedBuildAction.BuildActionWrapper
import java.io.Serializable
@@ -127,9 +128,34 @@ sealed class TargetBuildParameters : Serializable {
}
}
abstract class StreamedValueAwareBuilder<This : StreamedValueAwareBuilder<This>> : TaskAwareBuilder<This>() {
private var streamedValueListener: StreamedValueListener? = null
fun setStreamedValueListener(streamedValueListener: StreamedValueListener) {
this.streamedValueListener = streamedValueListener
}
override fun buildIntermediateResultHandler(): TargetIntermediateResultHandler {
return super.buildIntermediateResultHandler()
.then(StreamedIntermediateResultHandler(streamedValueListener))
}
private class StreamedIntermediateResultHandler(
private val streamedValueListener: StreamedValueListener?
) : TargetIntermediateResultHandler {
override fun onResult(type: IntermediateResultType, result: Any?) {
if (type == IntermediateResultType.STREAMED_VALUE) {
streamedValueListener!!.onValue(result!!)
}
}
}
}
class BuildActionParametersBuilder<T>(
private val action: BuildAction<T>
) : TaskAwareBuilder<BuildActionParametersBuilder<T>>() {
) : StreamedValueAwareBuilder<BuildActionParametersBuilder<T>>() {
override fun getThis(): BuildActionParametersBuilder<T> = this
@@ -144,7 +170,7 @@ sealed class TargetBuildParameters : Serializable {
class PhasedBuildActionParametersBuilder(
private val projectsLoadedAction: BuildActionWrapper<Any>?,
private val buildFinishedAction: BuildActionWrapper<Any>?
) : TaskAwareBuilder<PhasedBuildActionParametersBuilder>() {
) : StreamedValueAwareBuilder<PhasedBuildActionParametersBuilder>() {
override fun getThis(): PhasedBuildActionParametersBuilder = this