From b7efc9b41c497fa5357f99af09307f8a4af76ecc Mon Sep 17 00:00:00 2001 From: Sergei Vorobyov Date: Mon, 25 Nov 2024 15:23:06 +0100 Subject: [PATCH] [Gradle|Exec] cleanup: remove the ProjectResolverContext#getConnection function The Gradle connection can be redefined during the Gradle sync. Therefore, the API cannot guarantee that connection is open in any sync moment. Issues IDEA-363359, IDEA-344664 GitOrigin-RevId: bb42168971d564bb3fe427fa13d9b1f70782cb44 --- .../GradleModelFetchActionRunner.kt | 13 ++++++---- .../DefaultProjectResolverContext.java | 13 ---------- .../GradleBuildSrcProjectsResolver.java | 4 +-- .../project/GradleProjectResolver.java | 25 +++++++++---------- .../project/ProjectResolverContext.java | 4 --- .../project/GradleProjectResolverTestCase.kt | 1 - 6 files changed, 22 insertions(+), 38 deletions(-) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/modelAction/GradleModelFetchActionRunner.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/modelAction/GradleModelFetchActionRunner.kt index 0cea1cb36404..84814298e562 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/modelAction/GradleModelFetchActionRunner.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/modelAction/GradleModelFetchActionRunner.kt @@ -27,6 +27,7 @@ import org.jetbrains.plugins.gradle.statistics.GradleSyncCollector */ @ApiStatus.Internal class GradleModelFetchActionRunner private constructor( + private val connection: ProjectConnection, private val resolverContext: DefaultProjectResolverContext, private val modelFetchAction: GradleModelFetchAction, private val modelFetchActionListener: GradleModelFetchActionListener, @@ -60,7 +61,7 @@ class GradleModelFetchActionRunner private constructor( private fun notifyConnectionAboutChangedPaths() { ApplicationManager.getApplication() .getService(GradleFileModificationTracker::class.java) - .notifyConnectionAboutChangedPaths(resolverContext.connection) + .notifyConnectionAboutChangedPaths(connection) } /** @@ -68,7 +69,7 @@ class GradleModelFetchActionRunner private constructor( */ private fun runPhasedBuildAction(resultHandler: GradleModelFetchActionResultHandlerBridge) { modelFetchAction.isUseProjectsLoadedPhase = true - resolverContext.connection.action() + connection.action() .projectsLoaded(modelFetchAction, resultHandler.asProjectLoadedResultHandler()) .buildFinished(modelFetchAction, resultHandler.asBuildFinishedResultHandler()) .build() @@ -79,7 +80,7 @@ class GradleModelFetchActionRunner private constructor( } private fun runDefaultBuildAction(resultHandler: GradleModelFetchActionResultHandlerBridge) { - resolverContext.connection.action(modelFetchAction) + connection.action(modelFetchAction) .prepareOperationForSync() .withStreamedValueListener(resultHandler.asStreamValueListener()) .run(resultHandler.asResultHandler()) @@ -108,15 +109,17 @@ class GradleModelFetchActionRunner private constructor( companion object { private fun runBuildAction( + connection: ProjectConnection, resolverContext: DefaultProjectResolverContext, modelFetchAction: GradleModelFetchAction, modelFetchActionListener: GradleModelFetchActionListener, ) { - GradleModelFetchActionRunner(resolverContext, modelFetchAction, modelFetchActionListener).runBuildAction() + GradleModelFetchActionRunner(connection, resolverContext, modelFetchAction, modelFetchActionListener).runBuildAction() } @JvmStatic fun runAndTraceBuildAction( + connection: ProjectConnection, resolverContext: DefaultProjectResolverContext, modelFetchAction: GradleModelFetchAction, modelFetchActionListener: GradleModelFetchActionListener, @@ -133,7 +136,7 @@ class GradleModelFetchActionRunner private constructor( collector.logModelFetchFailure(exception) } } - runBuildAction(resolverContext, modelFetchAction, modelFetchActionListenerWithTrace) + runBuildAction(connection, resolverContext, modelFetchAction, modelFetchActionListenerWithTrace) } } } diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/DefaultProjectResolverContext.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/DefaultProjectResolverContext.java index a2790be071a0..3e49f47dc3d7 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/DefaultProjectResolverContext.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/DefaultProjectResolverContext.java @@ -18,7 +18,6 @@ import com.intellij.openapi.util.registry.Registry; import com.intellij.util.containers.CollectionFactory; import org.gradle.tooling.CancellationToken; import org.gradle.tooling.CancellationTokenSource; -import org.gradle.tooling.ProjectConnection; import org.gradle.tooling.model.BuildIdentifier; import org.gradle.tooling.model.BuildModel; import org.gradle.tooling.model.ProjectModel; @@ -47,7 +46,6 @@ public class DefaultProjectResolverContext extends UserDataHolderBase implements @NotNull private final GradleExecutionSettings mySettings; @NotNull private final ExternalSystemTaskNotificationListener myListener; @NotNull private final GradleProjectResolverIndicator myProjectResolverIndicator; - private ProjectConnection myConnection; @Nullable private GradleIdeaModelHolder myModels; private File myGradleUserHome; @Nullable private String myProjectGradleVersion; @@ -75,7 +73,6 @@ public class DefaultProjectResolverContext extends UserDataHolderBase implements myExternalSystemTaskId = externalSystemTaskId; myProjectPath = projectPath; mySettings = settings; - myConnection = null; myListener = listener; myPolicy = resolverPolicy; myProjectResolverIndicator = projectResolverIndicator; @@ -123,16 +120,6 @@ public class DefaultProjectResolverContext extends UserDataHolderBase implements return mySettings; } - @NotNull - @Override - public ProjectConnection getConnection() { - return myConnection; - } - - public void setConnection(@NotNull ProjectConnection connection) { - myConnection = connection; - } - public @NotNull ProgressIndicator getProgressIndicator() { return myProjectResolverIndicator; } 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 00fea9fa33af..4805e6610939 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 @@ -198,8 +198,8 @@ public final class GradleBuildSrcProjectsResolver { return; } - var buildSrcProjectDataNode = GradleProjectResolver.executeProjectResolverTask(buildSrcResolverCtx, myResolverChain, () -> - myProjectResolver.doResolveProjectInfo(buildSrcResolverCtx, myResolverChain) + var buildSrcProjectDataNode = GradleProjectResolver.executeProjectResolverTask(buildSrcResolverCtx, myResolverChain, connection -> + myProjectResolver.doResolveProjectInfo(connection, 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 a097a92d0979..5d568487fcde 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 @@ -75,6 +75,7 @@ import java.io.File; import java.nio.file.Path; import java.util.*; import java.util.concurrent.atomic.AtomicReference; +import java.util.function.Function; import java.util.function.Predicate; import java.util.function.Supplier; import java.util.stream.Stream; @@ -177,8 +178,8 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver - doResolveProjectInfo(resolverContext, projectResolverChain) + var projectDataNode = executeProjectResolverTask(resolverContext, projectResolverChain, connection -> + doResolveProjectInfo(connection, resolverContext, projectResolverChain) ); // auto-discover buildSrc projects of the main and included builds @@ -219,7 +220,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver R executeProjectResolverTask( @NotNull DefaultProjectResolverContext resolverContext, @NotNull GradleProjectResolverExtension projectResolverChain, - @NotNull Supplier task + @NotNull Function task ) { var projectPath = resolverContext.getProjectPath(); var id = resolverContext.getExternalSystemTaskId(); @@ -230,8 +231,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver { try { - resolverContext.setConnection(connection); - return task.get(); + return task.apply(connection); } catch (ProcessCanceledException e) { throw e; @@ -251,15 +251,14 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver doResolveProjectInfo( - @NotNull final DefaultProjectResolverContext resolverContext, - @NotNull final GradleProjectResolverExtension projectResolverChain - ) - throws IllegalArgumentException, IllegalStateException { + protected @NotNull DataNode doResolveProjectInfo( + @NotNull ProjectConnection connection, + @NotNull DefaultProjectResolverContext resolverContext, + @NotNull GradleProjectResolverExtension projectResolverChain + ) throws IllegalArgumentException, IllegalStateException { final BuildEnvironment buildEnvironment = GradleExecutionHelper.getBuildEnvironment( - resolverContext.getConnection(), + connection, resolverContext.getExternalSystemTaskId(), resolverContext.getListener(), resolverContext.getCancellationToken(), @@ -332,7 +331,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver GradleVersion.version(it)); if (gradleVersion != null && GradleJvmSupportMatrix.isGradleDeprecatedByIdea(gradleVersion)) { diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/ProjectResolverContext.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/ProjectResolverContext.java index 7f901849839b..242e55d97a89 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/ProjectResolverContext.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/ProjectResolverContext.java @@ -7,7 +7,6 @@ import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskId; import com.intellij.openapi.externalSystem.model.task.ExternalSystemTaskNotificationListener; import com.intellij.openapi.util.UserDataHolderEx; import org.gradle.tooling.CancellationToken; -import org.gradle.tooling.ProjectConnection; import org.gradle.tooling.model.BuildIdentifier; import org.gradle.tooling.model.BuildModel; import org.gradle.tooling.model.ProjectModel; @@ -37,9 +36,6 @@ public interface ProjectResolverContext extends UserDataHolderEx { @NotNull GradleExecutionSettings getSettings(); - @NotNull - ProjectConnection getConnection(); - @NotNull CancellationToken getCancellationToken(); diff --git a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverTestCase.kt b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverTestCase.kt index 5a5ad76bee52..88cc8e1bf326 100644 --- a/plugins/gradle/testSources/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverTestCase.kt +++ b/plugins/gradle/testSources/org/jetbrains/plugins/gradle/service/project/GradleProjectResolverTestCase.kt @@ -107,7 +107,6 @@ abstract class GradleProjectResolverTestCase { override fun getIdeProjectPath() = throw UnsupportedOperationException() override fun getProjectPath() = throw UnsupportedOperationException() override fun getSettings() = throw UnsupportedOperationException() - override fun getConnection() = throw UnsupportedOperationException() override fun getCancellationToken() = throw UnsupportedOperationException() override fun getListener() = throw UnsupportedOperationException() override fun isPhasedSyncEnabled() = throw UnsupportedOperationException()