mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Don't ignore exceptions that occur after models are fetched.
This change fixes an issue where exceptions that occured after the models have been fetched (during task running) were not handed back to the GradleProjectResolverExtensions. In this change we pass all GradleConnectionExceptions that occurs during the Gradle build to the resolvers via the buildFinished(Exception) callback. This will be a super set of the exceptions that can be thrown during fetching the modesl (as exceptions from tasks are not included there). Note: For Gradle versions <1.8 we don't pass the exception to the buildFinished callback, since there it is not possible to run tasks via the tooling API in these versions this is safe. Signed-off-by: Nikita Skvortsov <nikita.skvortsov@jetbrains.com> GitOrigin-RevId: ae7c6db0a985e438093ac860bd32b8c3c546e3e8
This commit is contained in:
committed by
intellij-monorepo-bot
parent
9e8247c682
commit
e6f7fcff8f
+7
-9
@@ -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<GradleConnectionException?>
|
||||
): 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<GradleConnectionException?>
|
||||
): ResultHandler<Any> {
|
||||
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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+2
-2
@@ -260,9 +260,9 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
|
||||
final long startTime = System.currentTimeMillis();
|
||||
ProjectImportAction.AllModels allModels;
|
||||
try {
|
||||
allModels = buildActionRunner.fetchModels(() -> {
|
||||
allModels = buildActionRunner.fetchModels((exception) -> {
|
||||
for (GradleProjectResolverExtension resolver = tracedResolverChain; resolver != null; resolver = resolver.getNext()) {
|
||||
resolver.buildFinished();
|
||||
resolver.buildFinished(exception);
|
||||
}
|
||||
});
|
||||
performanceTrace.addTrace(allModels.getPerformanceTrace());
|
||||
|
||||
+4
-1
@@ -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
|
||||
|
||||
+2
-1
@@ -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)
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user