diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BuildActionRunner.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BuildActionRunner.kt index e65bc0654bba..35ee267c0792 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BuildActionRunner.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/BuildActionRunner.kt @@ -1,11 +1,7 @@ // Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file. package org.jetbrains.plugins.gradle.service.project -import org.gradle.tooling.BuildActionExecuter -import org.gradle.tooling.GradleConnectionException -import org.gradle.tooling.IntermediateResultHandler -import org.gradle.tooling.ResultHandler -import org.gradle.tooling.UnsupportedVersionException +import org.gradle.tooling.* import org.gradle.tooling.model.idea.BasicIdeaProject import org.gradle.tooling.model.idea.IdeaProject import org.jetbrains.plugins.gradle.model.ProjectImportAction @@ -14,6 +10,7 @@ import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings import java.util.concurrent.ArrayBlockingQueue import java.util.concurrent.TimeUnit +import java.util.function.Consumer /** * This class handles setting up and running the [BuildActionExecuter] it deals with calling the correct APIs based on the version of @@ -63,7 +60,7 @@ class BuildActionRunner( * [settings]. */ fun fetchModels( - buildFinishedCallBack: Runnable + buildFinishedCallBack: Consumer ): AllModels { // First try with the phased build executor createPhasedExecuter().run(BuildActionResultHandler(buildFinishedCallBack)) @@ -99,7 +96,7 @@ class BuildActionRunner( resolverCtx.connection, resolverCtx.listener) - buildFinishedCallBack.run() + buildFinishedCallBack.accept(null) return ProjectImportAction.AllModels(modelBuilder.get()) } @@ -138,10 +135,11 @@ class BuildActionRunner( resolverCtx.listener, resolverCtx.connection) private inner class BuildActionResultHandler( - val buildFinishedCallBack: Runnable + val buildFinishedCallBack: Consumer ): ResultHandler { override fun onFailure(connectionException: GradleConnectionException?) { resultQueue.add(connectionException) + buildFinishedCallBack.accept(connectionException) } /** @@ -153,7 +151,7 @@ class BuildActionRunner( if (allModels != null) { resultQueue.add(allModels) } - buildFinishedCallBack.run() + buildFinishedCallBack.accept(null) } } } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java index 7001e9b8bde9..f6efa44e5f14 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolver.java @@ -260,9 +260,9 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver { + allModels = buildActionRunner.fetchModels((exception) -> { for (GradleProjectResolverExtension resolver = tracedResolverChain; resolver != null; resolver = resolver.getNext()) { - resolver.buildFinished(); + resolver.buildFinished(exception); } }); performanceTrace.addTrace(allModels.getPerformanceTrace()); diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java index 74c8bff05e9e..a96267f59cfc 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverExtension.java @@ -25,6 +25,7 @@ import com.intellij.openapi.externalSystem.model.task.TaskData; import com.intellij.openapi.externalSystem.service.ParametersEnhancer; import com.intellij.openapi.util.Pair; import com.intellij.util.Consumer; +import org.gradle.tooling.GradleConnectionException; import org.gradle.tooling.model.build.BuildEnvironment; import org.gradle.tooling.model.idea.IdeaModule; import org.gradle.tooling.model.idea.IdeaProject; @@ -150,10 +151,12 @@ public interface GradleProjectResolverExtension extends ParametersEnhancer { * Called once Gradle has finished executing everything, including any tasks that might need to be run. The models are obtained * separately and in some cases before this method is called. * + * @param exception the exception thrown by Gradle, if everything completes successfully then this will be null. + * * Note: This method is called from a Gradle connection thread, within the {@link org.gradle.tooling.ResultHandler} passed to the * tooling api. */ - default void buildFinished() { } + default void buildFinished(@Nullable GradleConnectionException exception) { } /** * Allows extension to contribute to init script diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleActionWithImportTest.kt b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleActionWithImportTest.kt index 63bef9acdd31..77fdfdcd7799 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleActionWithImportTest.kt +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/importing/GradleActionWithImportTest.kt @@ -4,6 +4,7 @@ package org.jetbrains.plugins.gradle.importing import com.intellij.openapi.extensions.Extensions import org.assertj.core.api.Assertions.assertThat import org.gradle.tooling.BuildController +import org.gradle.tooling.GradleConnectionException import org.gradle.tooling.model.idea.IdeaModule import org.gradle.tooling.model.idea.IdeaProject import org.jetbrains.plugins.gradle.model.ProjectImportExtraModelProvider @@ -102,7 +103,7 @@ class TestProjectResolverExtension : AbstractProjectResolverExtension() { } - override fun buildFinished() { + override fun buildFinished(exception: GradleConnectionException?) { lastBuildFinished.complete(true) }