[Gradle|Exec] cleanup: make the ProjectResolverContext#getSettings function result as not null

Issues IDEA-363359, IDEA-344664

GitOrigin-RevId: 300513fd1720e2903d7d16051b14744dd621f6ec
This commit is contained in:
Sergei Vorobyov
2024-11-26 11:08:22 +00:00
committed by intellij-monorepo-bot
parent 56122ac611
commit 130b157e33
11 changed files with 49 additions and 72 deletions
@@ -6,16 +6,12 @@ import com.intellij.gradle.toolingExtension.modelAction.GradleModelFetchPhase
import com.intellij.gradle.toolingExtension.util.GradleVersionUtil
import com.intellij.openapi.application.ApplicationManager
import com.intellij.openapi.util.registry.Registry
import org.gradle.tooling.BuildActionExecuter
import org.gradle.tooling.GradleConnectionException
import org.gradle.tooling.LongRunningOperation
import org.gradle.tooling.StreamedValueListener
import org.gradle.tooling.*
import org.jetbrains.annotations.ApiStatus
import org.jetbrains.plugins.gradle.service.GradleFileModificationTracker
import org.jetbrains.plugins.gradle.service.execution.GradleExecutionHelper
import org.jetbrains.plugins.gradle.service.modelAction.GradleModelFetchActionRunner.Companion.runBuildAction
import org.jetbrains.plugins.gradle.service.project.DefaultProjectResolverContext
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings
import org.jetbrains.plugins.gradle.statistics.GradleSyncCollector
/**
@@ -32,7 +28,6 @@ import org.jetbrains.plugins.gradle.statistics.GradleSyncCollector
@ApiStatus.Internal
class GradleModelFetchActionRunner private constructor(
private val resolverContext: DefaultProjectResolverContext,
private val settings: GradleExecutionSettings,
private val modelFetchAction: GradleModelFetchAction,
private val modelFetchActionListener: GradleModelFetchActionListener,
) {
@@ -96,7 +91,7 @@ class GradleModelFetchActionRunner private constructor(
this,
resolverContext.cancellationToken,
resolverContext.externalSystemTaskId,
settings,
resolverContext.settings,
resolverContext.listener
)
return this
@@ -114,17 +109,15 @@ class GradleModelFetchActionRunner private constructor(
private fun runBuildAction(
resolverContext: DefaultProjectResolverContext,
settings: GradleExecutionSettings,
modelFetchAction: GradleModelFetchAction,
modelFetchActionListener: GradleModelFetchActionListener,
) {
GradleModelFetchActionRunner(resolverContext, settings, modelFetchAction, modelFetchActionListener).runBuildAction()
GradleModelFetchActionRunner(resolverContext, modelFetchAction, modelFetchActionListener).runBuildAction()
}
@JvmStatic
fun runAndTraceBuildAction(
resolverContext: DefaultProjectResolverContext,
settings: GradleExecutionSettings,
modelFetchAction: GradleModelFetchAction,
modelFetchActionListener: GradleModelFetchActionListener,
) {
@@ -140,7 +133,7 @@ class GradleModelFetchActionRunner private constructor(
collector.logModelFetchFailure(exception)
}
}
runBuildAction(resolverContext, settings, modelFetchAction, modelFetchActionListenerWithTrace)
runBuildAction(resolverContext, modelFetchAction, modelFetchActionListenerWithTrace)
}
}
}
@@ -12,7 +12,6 @@ import com.intellij.gradle.toolingExtension.impl.model.taskModel.GradleTaskModel
import com.intellij.gradle.toolingExtension.util.GradleVersionUtil;
import com.intellij.openapi.application.ApplicationNamesInfo;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.externalSystem.debugger.DebuggerBackendExtension;
import com.intellij.openapi.externalSystem.model.ConfigurationDataImpl;
import com.intellij.openapi.externalSystem.model.DataNode;
import com.intellij.openapi.externalSystem.model.ProjectKeys;
@@ -33,7 +32,6 @@ import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.util.io.FileUtilRt;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.Consumer;
import com.intellij.util.ReflectionUtil;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.FileCollectionFactory;
@@ -55,7 +53,6 @@ import org.jetbrains.plugins.gradle.model.data.GradleProjectBuildScriptData;
import org.jetbrains.plugins.gradle.model.data.GradleSourceSetData;
import org.jetbrains.plugins.gradle.model.tests.ExternalTestSourceMapping;
import org.jetbrains.plugins.gradle.model.tests.ExternalTestsModel;
import org.jetbrains.plugins.gradle.service.execution.GradleInitScriptUtil;
import org.jetbrains.plugins.gradle.service.project.data.ExternalProjectDataCache;
import org.jetbrains.plugins.gradle.service.project.data.GradleExtensionsDataService;
import org.jetbrains.plugins.gradle.settings.GradleExecutionSettings;
@@ -877,15 +874,13 @@ public final class CommonGradleProjectResolverExtension extends AbstractProjectR
final GradleExecutionSettings gradleExecutionSettings = resolverContext.getSettings();
final String projectGradleVersion = resolverContext.getProjectGradleVersion();
if (gradleExecutionSettings != null && projectGradleVersion != null) {
if (GradleVersionUtil.isGradleOlderThan(projectGradleVersion, "4.0")) {
final IdeaModule dependencyModule = getDependencyModuleByReflection(dependency);
if (dependencyModule != null) {
final ModuleData moduleData =
gradleExecutionSettings.getExecutionWorkspace().findModuleDataByModule(resolverContext, dependencyModule);
if (moduleData != null) {
return new ModuleDependencyData(ownerModule.getData(), moduleData);
}
if (projectGradleVersion != null && GradleVersionUtil.isGradleOlderThan(projectGradleVersion, "4.0")) {
final IdeaModule dependencyModule = getDependencyModuleByReflection(dependency);
if (dependencyModule != null) {
final ModuleData moduleData =
gradleExecutionSettings.getExecutionWorkspace().findModuleDataByModule(resolverContext, dependencyModule);
if (moduleData != null) {
return new ModuleDependencyData(ownerModule.getData(), moduleData);
}
}
}
@@ -893,11 +888,9 @@ public final class CommonGradleProjectResolverExtension extends AbstractProjectR
final String moduleName = dependency.getTargetModuleName();
if (gradleExecutionSettings != null) {
ModuleData moduleData = gradleExecutionSettings.getExecutionWorkspace().findModuleDataByGradleModuleName(moduleName);
if (moduleData != null) {
return new ModuleDependencyData(ownerModule.getData(), moduleData);
}
ModuleData moduleData = gradleExecutionSettings.getExecutionWorkspace().findModuleDataByGradleModuleName(moduleName);
if (moduleData != null) {
return new ModuleDependencyData(ownerModule.getData(), moduleData);
}
ModuleData registeredModuleData = registeredModulesIndex.get(moduleName);
@@ -1018,7 +1011,7 @@ public final class CommonGradleProjectResolverExtension extends AbstractProjectR
library.addPath(LibraryPathType.BINARY, binaryPath.getPath());
}
else {
boolean isOfflineWork = resolverCtx.getSettings() != null && resolverCtx.getSettings().isOfflineWork();
boolean isOfflineWork = resolverCtx.getSettings().isOfflineWork();
String message = String.format("Could not resolve %s.", libraryName);
BuildIssue buildIssue = new UnresolvedDependencySyncIssue(
libraryName, message, resolverCtx.getProjectPath(), isOfflineWork, ownerModule.getData().getId());
@@ -44,7 +44,7 @@ import java.util.function.Supplier;
public class DefaultProjectResolverContext extends UserDataHolderBase implements ProjectResolverContext {
@NotNull private final ExternalSystemTaskId myExternalSystemTaskId;
@NotNull private final String myProjectPath;
@Nullable private final GradleExecutionSettings mySettings;
@NotNull private final GradleExecutionSettings mySettings;
@NotNull private final ExternalSystemTaskNotificationListener myListener;
@NotNull private final GradleProjectResolverIndicator myProjectResolverIndicator;
private ProjectConnection myConnection;
@@ -66,7 +66,7 @@ public class DefaultProjectResolverContext extends UserDataHolderBase implements
public DefaultProjectResolverContext(
@NotNull ExternalSystemTaskId externalSystemTaskId,
@NotNull String projectPath,
@Nullable GradleExecutionSettings settings,
@NotNull GradleExecutionSettings settings,
@NotNull ExternalSystemTaskNotificationListener listener,
@Nullable GradlePartialResolverPolicy resolverPolicy,
@NotNull GradleProjectResolverIndicator projectResolverIndicator,
@@ -85,7 +85,7 @@ public class DefaultProjectResolverContext extends UserDataHolderBase implements
public DefaultProjectResolverContext(
@NotNull DefaultProjectResolverContext resolverContext,
@NotNull String projectPath,
@Nullable GradleExecutionSettings settings,
@NotNull GradleExecutionSettings settings,
boolean isBuildSrcProject
) {
this(
@@ -109,7 +109,7 @@ public class DefaultProjectResolverContext extends UserDataHolderBase implements
@Nullable
@Override
public String getIdeProjectPath() {
return mySettings != null ? mySettings.getIdeProjectPath() : null;
return mySettings.getIdeProjectPath();
}
@NotNull
@@ -118,9 +118,8 @@ public class DefaultProjectResolverContext extends UserDataHolderBase implements
return myProjectPath;
}
@Nullable
@Override
public GradleExecutionSettings getSettings() {
public @NotNull GradleExecutionSettings getSettings() {
return mySettings;
}
@@ -239,22 +238,22 @@ public class DefaultProjectResolverContext extends UserDataHolderBase implements
@Override
public boolean isResolveModulePerSourceSet() {
return mySettings == null || mySettings.isResolveModulePerSourceSet();
return mySettings.isResolveModulePerSourceSet();
}
@Override
public boolean isUseQualifiedModuleNames() {
return mySettings != null && mySettings.isUseQualifiedModuleNames();
return mySettings.isUseQualifiedModuleNames();
}
@Override
public boolean isDelegatedBuild() {
return mySettings == null || mySettings.isDelegatedBuild();
return mySettings.isDelegatedBuild();
}
public File getGradleUserHome() {
if (myGradleUserHome == null) {
String serviceDirectory = mySettings == null ? null : mySettings.getServiceDirectory();
String serviceDirectory = mySettings.getServiceDirectory();
myGradleUserHome = serviceDirectory != null ? new File(serviceDirectory) : GradleUserHomeUtil.gradleUserHomeDir();
}
return myGradleUserHome;
@@ -73,9 +73,7 @@ public final class GradleBuildSrcProjectsResolver {
for (GradleLightBuild build : myResolverContext.getAllBuilds()) {
String buildPath = FileUtil.toSystemIndependentName(build.getBuildIdentifier().getRootDir().getPath());
GradleExecutionSettings buildSrcProjectSettings = mainBuildExecutionSettings != null
? new GradleExecutionSettings(mainBuildExecutionSettings)
: new GradleExecutionSettings();
GradleExecutionSettings buildSrcProjectSettings = new GradleExecutionSettings(mainBuildExecutionSettings);
if (myGradleHome != null) {
buildSrcProjectSettings.setGradleHome(myGradleHome);
@@ -38,7 +38,7 @@ object DefaultGradlePreviewCustomizer : GradlePreviewCustomizer {
val projectPath = resolverContext.projectPath
val projectName = File(projectPath).name
val ideProjectPath = resolverContext.settings?.ideProjectPath
val ideProjectPath = resolverContext.ideProjectPath
val mainModuleFileDirectoryPath = ideProjectPath ?: projectPath
val projectData = ProjectData(GradleConstants.SYSTEM_ID, projectName, projectPath, projectPath)
@@ -136,12 +136,13 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
}
}
GradleExecutionSettings effectiveSettings = settings != null ? settings : new GradleExecutionSettings();
GradleProjectResolverIndicator projectResolverIndicator = new GradleProjectResolverIndicator(
ProgressManager.getInstance().getProgressIndicator(),
GradleConnector.newCancellationTokenSource()
);
DefaultProjectResolverContext resolverContext = new DefaultProjectResolverContext(
syncTaskId, projectPath, settings, listener, gradleResolverPolicy, projectResolverIndicator, false
syncTaskId, projectPath, effectiveSettings, listener, gradleResolverPolicy, projectResolverIndicator, false
);
GradleProjectResolverResultHandler resolverResultHandler = new GradleProjectResolverResultHandler(resolverContext);
@@ -166,21 +167,19 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
final long activityId = resolverContext.getExternalSystemTaskId().getId();
GradleExecutionSettings settings = resolverContext.getSettings();
ExternalSystemSyncActionsCollector.logSyncStarted(resolverContext.getExternalSystemTaskId().findProject(), activityId,
settings != null && settings.isParallelModelFetch());
settings.isParallelModelFetch());
Span gradleExecutionSpan = ExternalSystemTelemetryUtil.getTracer(GradleConstants.SYSTEM_ID)
.spanBuilder("GradleExecution")
.startSpan();
try (Scope ignore = gradleExecutionSpan.makeCurrent()) {
if (resolverContext.getSettings() != null) {
GradleWrapperHelper.ensureInstalledWrapper(
resolverContext.getExternalSystemTaskId(),
resolverContext.getProjectPath(),
resolverContext.getSettings(),
resolverContext.getListener(),
resolverContext.getCancellationToken()
);
}
GradleWrapperHelper.ensureInstalledWrapper(
resolverContext.getExternalSystemTaskId(),
resolverContext.getProjectPath(),
resolverContext.getSettings(),
resolverContext.getListener(),
resolverContext.getCancellationToken()
);
final GradleProjectResolverExtension projectResolverChain = createProjectResolverChain(resolverContext);
var projectDataFunction = getProjectDataFunction(resolverContext, projectResolverChain);
@@ -257,9 +256,6 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
var buildAction = new GradleModelFetchAction();
GradleExecutionSettings executionSettings = resolverContext.getSettings();
if (executionSettings == null) {
executionSettings = new GradleExecutionSettings();
}
configureExecutionArgumentsAndVmOptions(executionSettings, resolverContext);
final Set<Class<?>> toolingExtensionClasses = new HashSet<>();
@@ -320,7 +316,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
.startSpan();
try (Scope ignore = gradleCallSpan.makeCurrent()) {
var modelFetchActionResultHandler = new GradleModelFetchActionResultHandler(resolverContext);
GradleModelFetchActionRunner.runAndTraceBuildAction(resolverContext, executionSettings, buildAction, modelFetchActionResultHandler);
GradleModelFetchActionRunner.runAndTraceBuildAction(resolverContext, buildAction, modelFetchActionResultHandler);
var gradleVersion = ObjectUtils.doIfNotNull(resolverContext.getProjectGradleVersion(), it -> GradleVersion.version(it));
if (gradleVersion != null && GradleJvmSupportMatrix.isGradleDeprecatedByIdea(gradleVersion)) {
@@ -356,7 +352,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
.startSpan();
try (Scope ignore = projectResolversSpan.makeCurrent()) {
extractExternalProjectModels(models);
return convertData(executionSettings, resolverContext, projectResolverChain);
return convertData(resolverContext, projectResolverChain);
}
catch (Throwable t) {
projectResolversErrorsCount += 1;
@@ -374,7 +370,6 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
}
private @NotNull DataNode<ProjectData> convertData(
@NotNull GradleExecutionSettings executionSettings,
@NotNull DefaultProjectResolverContext resolverContext,
@NotNull GradleProjectResolverExtension tracedResolverChain
) {
@@ -420,6 +415,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
moduleMap.put(mainModuleId, Pair.create(moduleDataNode, gradleModule));
}
GradleExecutionSettings executionSettings = resolverContext.getSettings();
executionSettings.getExecutionWorkspace().setModuleIdIndex(moduleMap);
File gradleHomeDir = null;
@@ -632,7 +628,7 @@ public class GradleProjectResolver implements ExternalSystemProjectResolver<Grad
@NotNull DefaultProjectResolverContext resolverContext,
@NotNull DataNode<ProjectData> projectDataNode
) {
if (resolverContext.getSettings() != null && !resolverContext.getSettings().getExecutionWorkspace().getBuildParticipants().isEmpty()) {
if (!resolverContext.getSettings().getExecutionWorkspace().getBuildParticipants().isEmpty()) {
return Collections.emptyList();
}
CompositeBuildData compositeBuildData;
@@ -679,12 +679,10 @@ public final class GradleProjectResolverUtil {
Collection<ProjectDependencyInfo> projectDependencyInfos = new ArrayList<>();
List<File> artifactsToKeepAsLibraries = new ArrayList<>();
if (resolverCtx.getSettings() != null) {
GradleExecutionWorkspace executionWorkspace = resolverCtx.getSettings().getExecutionWorkspace();
ModuleData moduleData = executionWorkspace.findModuleDataByArtifacts(projectDependency.getProjectDependencyArtifacts());
if (moduleData != null) {
projectDependencyInfos.add(new ProjectDependencyInfo(moduleData, null, projectDependency.getProjectDependencyArtifacts()));
}
GradleExecutionWorkspace executionWorkspace = resolverCtx.getSettings().getExecutionWorkspace();
ModuleData moduleData = executionWorkspace.findModuleDataByArtifacts(projectDependency.getProjectDependencyArtifacts());
if (moduleData != null) {
projectDependencyInfos.add(new ProjectDependencyInfo(moduleData, null, projectDependency.getProjectDependencyArtifacts()));
}
if (projectDependencyInfos.isEmpty()) {
@@ -909,7 +907,7 @@ public final class GradleProjectResolverUtil {
String ownerModuleId) {
final String libraryName = unresolvedDep.getId().getPresentableName();
final String failureMessage = unresolvedDep.getFailureMessage();
boolean isOfflineWork = resolverCtx.getSettings() != null && resolverCtx.getSettings().isOfflineWork();
boolean isOfflineWork = resolverCtx.getSettings().isOfflineWork();
BuildIssue buildIssue = new UnresolvedDependencySyncIssue(
libraryName, failureMessage, resolverCtx.getProjectPath(), isOfflineWork, ownerModuleId);
resolverCtx.report(MessageEvent.Kind.ERROR, buildIssue);
@@ -214,7 +214,7 @@ public class LibraryDataNodeSubstitutor {
private Collection<ModuleLookupResult> lookupTargetModule(String path) {
List<ModuleLookupResult> results = new ArrayList<>();
GradleSourceSetData targetModule = Optional.ofNullable(resolverContext.getSettings())
GradleSourceSetData targetModule = Optional.of(resolverContext.getSettings())
.map(GradleExecutionSettings::getExecutionWorkspace)
.map(ws -> ws.findModuleDataByArtifacts(Collections.singleton(new File(path))))
.filter(md -> md instanceof GradleSourceSetData)
@@ -34,7 +34,7 @@ public interface ProjectResolverContext extends UserDataHolderEx {
@NotNull
String getProjectPath();
@Nullable
@NotNull
GradleExecutionSettings getSettings();
@NotNull
@@ -16,7 +16,7 @@ internal fun reportIdeaKotlinUnresolvedDependency(
dependencyName = dependency.coordinates?.toString() ?: "<unknown coordinates>",
failureMessage = dependency.cause,
projectPath = context.resolverCtx.projectPath,
isOfflineMode = context.resolverCtx.settings?.isOfflineWork == true,
isOfflineMode = context.resolverCtx.settings.isOfflineWork == true,
dependencyOwner = sourceSetModuleId.toString(),
)
@@ -24,7 +24,7 @@ fun saveGradleBuildEnvironment(resolverCtx: ProjectResolverContext) {
val tasks = kotlinDslSyncListenerInstance?.tasks ?: return
synchronized(tasks) { tasks[task] }?.let { sync ->
val gradleHome = resolverCtx.getRootModel(GradleBuildScriptClasspathModel::class.java)?.gradleHomeDir?.path
?: resolverCtx.settings?.gradleHome
?: resolverCtx.settings.gradleHome
synchronized(sync) {
sync.gradleVersion = resolverCtx.projectGradleVersion