[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
This commit is contained in:
Sergei Vorobyov
2024-11-26 11:08:22 +00:00
committed by intellij-monorepo-bot
parent 5ab82d7d23
commit b7efc9b41c
6 changed files with 22 additions and 38 deletions
@@ -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)
}
}
}
@@ -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;
}
@@ -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;
@@ -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<Grad
var projectResolverChain = createProjectResolverChain(resolverContext);
var projectDataNode = executeProjectResolverTask(resolverContext, projectResolverChain, () ->
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<Grad
protected static <R> R executeProjectResolverTask(
@NotNull DefaultProjectResolverContext resolverContext,
@NotNull GradleProjectResolverExtension projectResolverChain,
@NotNull Supplier<R> task
@NotNull Function<ProjectConnection, R> task
) {
var projectPath = resolverContext.getProjectPath();
var id = resolverContext.getExternalSystemTaskId();
@@ -230,8 +231,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
return GradleExecutionHelper.execute(projectPath, settings, id, listener, cancellationToken, connection -> {
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<Grad
});
}
@NotNull
private DataNode<ProjectData> doResolveProjectInfo(
@NotNull final DefaultProjectResolverContext resolverContext,
@NotNull final GradleProjectResolverExtension projectResolverChain
)
throws IllegalArgumentException, IllegalStateException {
protected @NotNull DataNode<ProjectData> 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<Grad
.startSpan();
try (Scope ignore = gradleCallSpan.makeCurrent()) {
var modelFetchActionResultHandler = new GradleModelFetchActionResultHandler(resolverContext);
GradleModelFetchActionRunner.runAndTraceBuildAction(resolverContext, buildAction, modelFetchActionResultHandler);
GradleModelFetchActionRunner.runAndTraceBuildAction(connection, resolverContext, buildAction, modelFetchActionResultHandler);
var gradleVersion = ObjectUtils.doIfNotNull(resolverContext.getProjectGradleVersion(), it -> GradleVersion.version(it));
if (gradleVersion != null && GradleJvmSupportMatrix.isGradleDeprecatedByIdea(gradleVersion)) {
@@ -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();
@@ -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()