diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleBuildSrcProjectsResolver.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleBuildSrcProjectsResolver.java index 1c72253c6fbb..00fea9fa33af 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleBuildSrcProjectsResolver.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/GradleBuildSrcProjectsResolver.java @@ -7,10 +7,8 @@ import com.intellij.openapi.externalSystem.model.ProjectKeys; import com.intellij.openapi.externalSystem.model.project.*; import com.intellij.openapi.util.io.FileUtil; import com.intellij.util.ArrayUtil; -import com.intellij.util.Function; import com.intellij.util.SmartList; import com.intellij.util.containers.MultiMap; -import org.gradle.tooling.ProjectConnection; import org.gradle.tooling.model.build.BuildEnvironment; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -19,7 +17,6 @@ import org.jetbrains.plugins.gradle.model.data.BuildParticipant; import org.jetbrains.plugins.gradle.model.data.BuildScriptClasspathData; import org.jetbrains.plugins.gradle.model.data.CompositeBuildData; import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData; -import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper; import org.jetbrains.plugins.gradle.settings.DistributionType; import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings; import org.jetbrains.plugins.gradle.util.GradleConstants; @@ -91,12 +88,10 @@ public final class GradleBuildSrcProjectsResolver { String buildSrcGroup = getBuildSrcGroup(buildPath, buildName); buildSrcResolverCtx.setBuildSrcGroup(buildSrcGroup); - handleBuildSrcProject(mainBuildProjectDataNode, - buildName, - index.buildClasspathNodesMap().getModifiable(Paths.get(buildPath)), - index.includedModulesPaths(), - buildSrcResolverCtx, - myProjectResolver.getProjectDataFunction(buildSrcResolverCtx, myResolverChain)); + + var buildClasspathNodes = index.buildClasspathNodesMap().getModifiable(Paths.get(buildPath)); + var includedModulesPaths = index.includedModulesPaths(); + handleBuildSrcProject(mainBuildProjectDataNode, buildName, buildClasspathNodes, includedModulesPaths, buildSrcResolverCtx); } } @@ -181,12 +176,13 @@ public final class GradleBuildSrcProjectsResolver { return compositeBuildDataNode != null ? compositeBuildDataNode.getData() : null; } - private void handleBuildSrcProject(@NotNull DataNode resultProjectDataNode, - @Nullable String buildName, - @NotNull Collection> buildClasspathNodes, - @NotNull Map> includedModulesPaths, - @NotNull DefaultProjectResolverContext buildSrcResolverCtx, - @NotNull Function> projectConnectionDataNodeFunction) { + private void handleBuildSrcProject( + @NotNull DataNode resultProjectDataNode, + @Nullable String buildName, + @NotNull Collection> buildClasspathNodes, + @NotNull Map> includedModulesPaths, + @NotNull DefaultProjectResolverContext buildSrcResolverCtx + ) { final String projectPath = buildSrcResolverCtx.getProjectPath(); File projectPathFile = new File(projectPath); if (!projectPathFile.isDirectory()) { @@ -202,13 +198,8 @@ public final class GradleBuildSrcProjectsResolver { return; } - final DataNode buildSrcProjectDataNode = GradleExecutionHelper.execute( - buildSrcResolverCtx.getProjectPath(), - buildSrcResolverCtx.getSettings(), - buildSrcResolverCtx.getExternalSystemTaskId(), - buildSrcResolverCtx.getListener(), - buildSrcResolverCtx.getCancellationToken(), - projectConnectionDataNodeFunction + var buildSrcProjectDataNode = GradleProjectResolver.executeProjectResolverTask(buildSrcResolverCtx, myResolverChain, () -> + myProjectResolver.doResolveProjectInfo(buildSrcResolverCtx, myResolverChain) ); if (buildSrcProjectDataNode == null) return; 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 e67bc7741ef5..a097a92d0979 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 @@ -32,7 +32,6 @@ import com.intellij.openapi.util.io.FileUtil; import com.intellij.openapi.util.io.NioPathUtil; import com.intellij.openapi.util.registry.Registry; import com.intellij.util.ExceptionUtil; -import com.intellij.util.Function; import com.intellij.util.ObjectUtils; import com.intellij.util.SmartList; import com.intellij.util.containers.CollectionFactory; @@ -178,8 +177,9 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver + doResolveProjectInfo(resolverContext, projectResolverChain) + ); // auto-discover buildSrc projects of the main and included builds var gradleVersion = resolverContext.getProjectGradleVersion(); @@ -196,14 +196,6 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver> getProjectDataFunction( - @NotNull DefaultProjectResolverContext resolverContext, - @NotNull GradleProjectResolverExtension projectResolverChain - ) { - return new ProjectConnectionDataNodeFunction(resolverContext, projectResolverChain); - } - @Override public boolean cancelTask(@NotNull ExternalSystemTaskId id, @NotNull ExternalSystemTaskNotificationListener listener) { for (CancellationTokenSource cancellationTokenSource : myCancellationMap.get(id)) { @@ -224,6 +216,41 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver R executeProjectResolverTask( + @NotNull DefaultProjectResolverContext resolverContext, + @NotNull GradleProjectResolverExtension projectResolverChain, + @NotNull Supplier task + ) { + var projectPath = resolverContext.getProjectPath(); + var id = resolverContext.getExternalSystemTaskId(); + var settings = resolverContext.getSettings(); + var listener = resolverContext.getListener(); + var cancellationToken = resolverContext.getCancellationToken(); + var buildEnvironment = resolverContext.getBuildEnvironment(); + + return GradleExecutionHelper.execute(projectPath, settings, id, listener, cancellationToken, connection -> { + try { + resolverContext.setConnection(connection); + return task.get(); + } + catch (ProcessCanceledException e) { + throw e; + } + catch (RuntimeException e) { + LOG.info("Gradle project resolve error", e); + var esException = ExceptionUtil.findCause(e, ExternalSystemException.class); + if (esException != null && esException != e) { + LOG.info("\nCaused by: " + esException.getOriginalReason()); + } + + ExternalSystemSyncActionsCollector.logError(id.findProject(), id.getId(), extractCause(e)); + ExternalSystemSyncActionsCollector.logSyncFinished(id.findProject(), id.getId(), false); + + throw projectResolverChain.getUserFriendlyError(buildEnvironment, e, projectPath, null); + } + }); + } + @NotNull private DataNode doResolveProjectInfo( @NotNull final DefaultProjectResolverContext resolverContext, @@ -896,47 +923,6 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver> { - private final @NotNull GradleProjectResolverExtension myProjectResolverChain; - private final @NotNull DefaultProjectResolverContext myResolverContext; - - private ProjectConnectionDataNodeFunction( - @NotNull DefaultProjectResolverContext resolverContext, - @NotNull GradleProjectResolverExtension projectResolverChain - ) { - myResolverContext = resolverContext; - myProjectResolverChain = projectResolverChain; - } - - @Override - public @NotNull DataNode fun(@NotNull ProjectConnection connection) { - ExternalSystemTaskId taskId = myResolverContext.getExternalSystemTaskId(); - final long activityId = taskId.getId(); - - return computeCancellable(myResolverContext, () -> { - try { - myResolverContext.setConnection(connection); - return doResolveProjectInfo(myResolverContext, myProjectResolverChain); - } - catch (ProcessCanceledException e) { - throw e; - } - catch (RuntimeException e) { - LOG.info("Gradle project resolve error", e); - ExternalSystemException esException = ExceptionUtil.findCause(e, ExternalSystemException.class); - if (esException != null && esException != e) { - LOG.info("\nCaused by: " + esException.getOriginalReason()); - } - ExternalSystemSyncActionsCollector.logError(taskId.findProject(), activityId, extractCause(e)); - ExternalSystemSyncActionsCollector.logSyncFinished(taskId.findProject(), activityId, false); - - throw myProjectResolverChain.getUserFriendlyError( - myResolverContext.getBuildEnvironment(), e, myResolverContext.getProjectPath(), null); - } - }); - } - } - private static Throwable extractCause(Throwable e) { if (e instanceof BuildActionFailureException) { return extractCause(e.getCause());