From 0448526272ee22eac97dace6d29b562e5c2faa3e Mon Sep 17 00:00:00 2001 From: Sergei Vorobyov Date: Tue, 8 Oct 2024 12:18:44 +0200 Subject: [PATCH] [Gradle|Sync|IsolatedProject] fix: removed unused GradleTaskIndex Issues IDEA-35499 GitOrigin-RevId: 35949e7931841196d227c6917132e08d5a541a4e --- .../CommonGradleProjectResolverExtension.java | 4 +- .../GradleModelBuilderMessageCollector.kt | 8 +- .../modelAction/GradleModelFetchPhase.java | 9 +- ...plugins.gradle.tooling.ModelBuilderService | 2 +- .../impl/model/taskIndex/GradleTaskIndex.java | 90 ------------------- .../model/taskIndex/GradleTaskRequest.java | 16 ---- .../GradleTaskWarmUpModelProvider.kt} | 6 +- .../model/warmUp/GradleTaskWarmUpRequest.java | 15 ++++ .../GradleTaskWarmUpService.java} | 59 +++--------- .../impl/modelBuilder/Messages.java | 6 +- 10 files changed, 42 insertions(+), 173 deletions(-) delete mode 100644 plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskIndex.java delete mode 100644 plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskRequest.java rename plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/{taskIndex/GradleTaskIndexModelProvider.kt => warmUp/GradleTaskWarmUpModelProvider.kt} (82%) create mode 100644 plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/warmUp/GradleTaskWarmUpRequest.java rename plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/{taskIndex/GradleTaskIndexBuilder.java => warmUp/GradleTaskWarmUpService.java} (52%) diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/CommonGradleProjectResolverExtension.java b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/CommonGradleProjectResolverExtension.java index baa02fcea0ba..45c482dc5def 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/CommonGradleProjectResolverExtension.java +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/service/project/CommonGradleProjectResolverExtension.java @@ -7,7 +7,7 @@ import com.intellij.gradle.toolingExtension.impl.model.buildScriptClasspathModel import com.intellij.gradle.toolingExtension.impl.model.projectModel.GradleExternalProjectModelProvider; import com.intellij.gradle.toolingExtension.impl.model.sourceSetDependencyModel.GradleSourceSetDependencyModelProvider; import com.intellij.gradle.toolingExtension.impl.model.sourceSetModel.GradleSourceSetModelProvider; -import com.intellij.gradle.toolingExtension.impl.model.taskIndex.GradleTaskIndexModelProvider; +import com.intellij.gradle.toolingExtension.impl.model.warmUp.GradleTaskWarmUpModelProvider; import com.intellij.gradle.toolingExtension.impl.model.taskModel.GradleTaskModelProvider; import com.intellij.gradle.toolingExtension.util.GradleVersionUtil; import com.intellij.openapi.application.ApplicationNamesInfo; @@ -786,7 +786,7 @@ public final class CommonGradleProjectResolverExtension extends AbstractProjectR public @NotNull List getModelProviders() { return ContainerUtil.append( super.getModelProviders(), - new GradleTaskIndexModelProvider(), + new GradleTaskWarmUpModelProvider(), new GradleSourceSetModelProvider(), new GradleSourceSetDependencyModelProvider(), new GradleExternalProjectModelProvider(), diff --git a/plugins/gradle/src/org/jetbrains/plugins/gradle/statistics/GradleModelBuilderMessageCollector.kt b/plugins/gradle/src/org/jetbrains/plugins/gradle/statistics/GradleModelBuilderMessageCollector.kt index a6578a64406e..5740d440cd5e 100644 --- a/plugins/gradle/src/org/jetbrains/plugins/gradle/statistics/GradleModelBuilderMessageCollector.kt +++ b/plugins/gradle/src/org/jetbrains/plugins/gradle/statistics/GradleModelBuilderMessageCollector.kt @@ -12,7 +12,7 @@ object GradleModelBuilderMessageCollector : CounterUsagesCollector() { override fun getGroup() = GROUP - private val GROUP: EventLogGroup = EventLogGroup("build.gradle.errors", 18) + private val GROUP: EventLogGroup = EventLogGroup("build.gradle.errors", 19) private val ACTIVITY_ID = EventFields.Long("ide_activity_id") private val MESSAGE_KIND = EventFields.Enum("message_kind") @@ -21,11 +21,7 @@ object GradleModelBuilderMessageCollector : CounterUsagesCollector() { Messages.SCALA_PROJECT_MODEL_GROUP, - Messages.TASK_INDEX_GROUP, - Messages.TASK_INDEX_COLLECTING_GROUP, - Messages.TASK_INDEX_CACHE_GET_GROUP, - Messages.TASK_INDEX_CACHE_SET_GROUP, - + Messages.TASK_WARM_UP_GROUP, Messages.TASK_MODEL_GROUP, Messages.SOURCE_SET_MODEL_GROUP, diff --git a/plugins/gradle/tooling-extension-api/src/com/intellij/gradle/toolingExtension/modelAction/GradleModelFetchPhase.java b/plugins/gradle/tooling-extension-api/src/com/intellij/gradle/toolingExtension/modelAction/GradleModelFetchPhase.java index 6d45b61ca02e..eb626298a765 100644 --- a/plugins/gradle/tooling-extension-api/src/com/intellij/gradle/toolingExtension/modelAction/GradleModelFetchPhase.java +++ b/plugins/gradle/tooling-extension-api/src/com/intellij/gradle/toolingExtension/modelAction/GradleModelFetchPhase.java @@ -15,12 +15,11 @@ public enum GradleModelFetchPhase { PROJECT_LOADED_PHASE("Project loaded phase"), /** - * Model provider, in this phase, fetches and caches a Gradle task model into - * {@link com.intellij.gradle.toolingExtension.impl.model.taskIndex.GradleTaskIndex}. - * This cache is available by {@link org.jetbrains.plugins.gradle.tooling.ModelBuilderContext}. + * Model providers, in this phase, warm up Gradle tasks configurations. *

- * This phase should be first, because this phase evaluates all lazy Task configurations. - * These configurations may modify a Gradle project model which is necessary for the following phases. + * This phase should be first, because this phase: + * 1. Warmed tasks don't throw configuration exceptions during {@link org.gradle.api.Project#getTasks}; + * 2. It evaluates all lazy task configurations that may modify a Gradle project model which is necessary for the following phases. * * @see org.gradle.tooling.BuildActionExecuter.Builder#buildFinished * @see org.gradle.tooling.BuildActionExecuter#setStreamedValueListener diff --git a/plugins/gradle/tooling-extension-impl/src/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService b/plugins/gradle/tooling-extension-impl/src/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService index 85398923dd88..87191154b9e8 100644 --- a/plugins/gradle/tooling-extension-impl/src/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService +++ b/plugins/gradle/tooling-extension-impl/src/META-INF/services/org.jetbrains.plugins.gradle.tooling.ModelBuilderService @@ -2,7 +2,7 @@ com.intellij.gradle.toolingExtension.impl.model.utilDummyModel.DummyModelBuilder com.intellij.gradle.toolingExtension.impl.model.utilTurnOffDefaultTasksModel.TurnOffDefaultTasksModelBuilder com.intellij.gradle.toolingExtension.impl.model.projectModel.GradleExternalProjectModelBuilder -com.intellij.gradle.toolingExtension.impl.model.taskIndex.GradleTaskIndexBuilder +com.intellij.gradle.toolingExtension.impl.model.warmUp.GradleTaskWarmUpService com.intellij.gradle.toolingExtension.impl.model.taskModel.GradleTaskModelBuilder com.intellij.gradle.toolingExtension.impl.model.sourceSetModel.GradleSourceSetModelBuilder com.intellij.gradle.toolingExtension.impl.model.sourceSetArtifactIndex.GradleSourceSetArtifactIndexBuilder diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskIndex.java b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskIndex.java deleted file mode 100644 index af760022b443..000000000000 --- a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskIndex.java +++ /dev/null @@ -1,90 +0,0 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.intellij.gradle.toolingExtension.impl.model.taskIndex; - -import com.intellij.gradle.toolingExtension.impl.modelBuilder.Messages; -import com.intellij.gradle.toolingExtension.impl.util.GradleProjectUtil; -import com.intellij.gradle.toolingExtension.modelAction.GradleModelFetchPhase; -import org.gradle.api.Project; -import org.gradle.api.Task; -import org.gradle.tooling.model.ProjectIdentifier; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.gradle.tooling.Message; -import org.jetbrains.plugins.gradle.tooling.ModelBuilderContext; -import org.jetbrains.plugins.gradle.tooling.ModelBuilderContext.DataProvider; - -import java.util.Collections; -import java.util.LinkedHashSet; -import java.util.Set; -import java.util.concurrent.ConcurrentHashMap; -import java.util.concurrent.ConcurrentMap; - - -/** - * Provides fast access to the {@link Project}'s tasks. - */ -public final class GradleTaskIndex { - - private final ModelBuilderContext context; - private final ConcurrentMap> allTasks; - - private GradleTaskIndex(@NotNull ModelBuilderContext context) { - this.context = context; - this.allTasks = new ConcurrentHashMap<>(); - } - - public Set getAllTasks(@NotNull Project project) { - Set result = new LinkedHashSet<>(getProjectTasks(project)); - for (Project subProject : project.getSubprojects()) { - result.addAll(getProjectTasks(subProject)); - } - return result; - } - - private Set getProjectTasks(@NotNull Project project) { - ProjectIdentifier projectIdentifier = GradleProjectUtil.getProjectIdentifier(project); - Set projectTasks = allTasks.get(projectIdentifier); - if (projectTasks == null) { - context.getMessageReporter().createMessage() - .withGroup(Messages.TASK_INDEX_CACHE_GET_GROUP) - .withTitle("Task model aren't found") - .withText( - "Tasks for " + project.getDisplayName() + " wasn't collected. " + - "All tasks should be collected during " + GradleModelFetchPhase.WARM_UP_PHASE + "." - ) - .withInternal().withStackTrace() - .withKind(Message.Kind.ERROR) - .reportMessage(project); - return Collections.emptySet(); - } - return projectTasks; - } - - public void setProjectTasks(@NotNull Project project, @NotNull Set tasks) { - ProjectIdentifier projectIdentifier = GradleProjectUtil.getProjectIdentifier(project); - Set previousTasks = allTasks.put(projectIdentifier, tasks); - if (previousTasks != null) { - context.getMessageReporter().createMessage() - .withGroup(Messages.TASK_INDEX_CACHE_SET_GROUP) - .withTitle("Task model redefinition") - .withText("Tasks for " + project.getDisplayName() + " was already collected.") - .withInternal().withStackTrace() - .withKind(Message.Kind.ERROR) - .reportMessage(project); - } - } - - /** - * Marks that a project task model is loaded with errors. - * This mark means that error for {@code project} is already processed and reported. - */ - public void markTaskModelAsError(@NotNull Project project) { - ProjectIdentifier projectIdentifier = GradleProjectUtil.getProjectIdentifier(project); - allTasks.put(projectIdentifier, Collections.emptySet()); - } - - private static final @NotNull DataProvider INSTANCE_PROVIDER = GradleTaskIndex::new; - - public static @NotNull GradleTaskIndex getInstance(@NotNull ModelBuilderContext context) { - return context.getData(INSTANCE_PROVIDER); - } -} diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskRequest.java b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskRequest.java deleted file mode 100644 index 15bda652f13d..000000000000 --- a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskRequest.java +++ /dev/null @@ -1,16 +0,0 @@ -// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.intellij.gradle.toolingExtension.impl.model.taskIndex; - -import org.jetbrains.annotations.ApiStatus; - -import java.io.Serializable; - -/** - * Marker interface to request for building task index {@link GradleTaskIndex}. - * This index is available only on the Gradle side and cannot be transferred to the IDE. - * - * @see GradleTaskIndex - */ -@ApiStatus.Internal -public interface GradleTaskRequest extends Serializable { -} diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskIndexModelProvider.kt b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/warmUp/GradleTaskWarmUpModelProvider.kt similarity index 82% rename from plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskIndexModelProvider.kt rename to plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/warmUp/GradleTaskWarmUpModelProvider.kt index 0f4d12c7ce8d..ecd4271b52b7 100644 --- a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskIndexModelProvider.kt +++ b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/warmUp/GradleTaskWarmUpModelProvider.kt @@ -1,5 +1,5 @@ // Copyright 2000-2024 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.intellij.gradle.toolingExtension.impl.model.taskIndex +package com.intellij.gradle.toolingExtension.impl.model.warmUp import com.intellij.gradle.toolingExtension.impl.util.GradleModelProviderUtil import com.intellij.gradle.toolingExtension.modelAction.GradleModelFetchPhase @@ -10,7 +10,7 @@ import org.jetbrains.plugins.gradle.model.ProjectImportModelProvider import org.jetbrains.plugins.gradle.model.ProjectImportModelProvider.GradleModelConsumer @ApiStatus.Internal -class GradleTaskIndexModelProvider : ProjectImportModelProvider { +class GradleTaskWarmUpModelProvider : ProjectImportModelProvider { override fun getPhase(): GradleModelFetchPhase { return GradleModelFetchPhase.WARM_UP_PHASE @@ -21,6 +21,6 @@ class GradleTaskIndexModelProvider : ProjectImportModelProvider { buildModel: GradleBuild, modelConsumer: GradleModelConsumer, ) { - GradleModelProviderUtil.buildModels(controller, buildModel, GradleTaskRequest::class.java, GradleModelConsumer.NOOP) + GradleModelProviderUtil.buildModels(controller, buildModel, GradleTaskWarmUpRequest::class.java, GradleModelConsumer.NOOP) } } diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/warmUp/GradleTaskWarmUpRequest.java b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/warmUp/GradleTaskWarmUpRequest.java new file mode 100644 index 000000000000..df8c4453eb63 --- /dev/null +++ b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/warmUp/GradleTaskWarmUpRequest.java @@ -0,0 +1,15 @@ +// Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. +package com.intellij.gradle.toolingExtension.impl.model.warmUp; + +import org.jetbrains.annotations.ApiStatus; + +import java.io.Serializable; + +/** + * Marker interface to request for warming-up task configurations. + * + * @see com.intellij.gradle.toolingExtension.modelAction.GradleModelFetchPhase#WARM_UP_PHASE + */ +@ApiStatus.Internal +public interface GradleTaskWarmUpRequest extends Serializable { +} diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskIndexBuilder.java b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/warmUp/GradleTaskWarmUpService.java similarity index 52% rename from plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskIndexBuilder.java rename to plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/warmUp/GradleTaskWarmUpService.java index 689afb9f1d2b..27704aa654ce 100644 --- a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/taskIndex/GradleTaskIndexBuilder.java +++ b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/model/warmUp/GradleTaskWarmUpService.java @@ -1,11 +1,10 @@ // Copyright 2000-2023 JetBrains s.r.o. and contributors. Use of this source code is governed by the Apache 2.0 license. -package com.intellij.gradle.toolingExtension.impl.model.taskIndex; +package com.intellij.gradle.toolingExtension.impl.model.warmUp; import com.intellij.gradle.toolingExtension.impl.modelBuilder.Messages; import com.intellij.gradle.toolingExtension.impl.util.GradleResultUtil; import com.intellij.gradle.toolingExtension.util.GradleVersionUtil; import org.gradle.api.Project; -import org.gradle.api.Task; import org.gradle.api.internal.tasks.DefaultTaskContainer; import org.gradle.api.tasks.TaskContainer; import org.jetbrains.annotations.ApiStatus; @@ -14,61 +13,34 @@ import org.jetbrains.plugins.gradle.tooling.AbstractModelBuilderService; import org.jetbrains.plugins.gradle.tooling.Message; import org.jetbrains.plugins.gradle.tooling.ModelBuilderContext; -import java.util.Collections; -import java.util.Set; -import java.util.SortedSet; -import java.util.TreeSet; - @ApiStatus.Internal -public class GradleTaskIndexBuilder extends AbstractModelBuilderService { +public class GradleTaskWarmUpService extends AbstractModelBuilderService { private static final boolean TASKS_REFRESH_REQUIRED = GradleVersionUtil.isCurrentGradleOlderThan("5.0"); - @Override public boolean canBuild(String modelName) { - return GradleTaskRequest.class.getName().equals(modelName); + return GradleTaskWarmUpRequest.class.getName().equals(modelName); } @Override public Object buildAll(@NotNull String modelName, @NotNull Project project, @NotNull ModelBuilderContext context) { - Set projectTasks = collectProjectTasks(project, context); - - GradleTaskIndex.getInstance(context) - .setProjectTasks(project, projectTasks); - + GradleResultUtil.runOrRetryOnce(() -> { + if (TASKS_REFRESH_REQUIRED) { + refreshProjectTasks(project); + } + }); + GradleResultUtil.runOrRetryOnce(() -> { + project.getTasks().forEach(__ -> {}); + }); return null; } - private static Set collectProjectTasks(@NotNull Project project, @NotNull ModelBuilderContext context) { - try { - GradleResultUtil.runOrRetryOnce(() -> { - if (TASKS_REFRESH_REQUIRED) { - refreshProjectTasks(project); - } - }); - return GradleResultUtil.runOrRetryOnce(() -> { - return new TreeSet<>(project.getTasks()); - }); - } - catch (Exception exception) { - context.getMessageReporter().createMessage() - .withGroup(Messages.TASK_INDEX_COLLECTING_GROUP) - .withTitle("Tasks collecting failure") - .withText("Tasks for " + project + " cannot be collected due to plugin exception.") - .withException(exception) - .withKind(Message.Kind.WARNING) - .reportMessage(project); - return Collections.emptySet(); - } - } - private static void refreshProjectTasks(@NotNull Project project) { TaskContainer tasks = project.getTasks(); if (tasks instanceof DefaultTaskContainer) { ((DefaultTaskContainer)tasks).discoverTasks(); - SortedSet taskNames = tasks.getNames(); - for (String taskName : taskNames) { + for (String taskName : tasks.getNames()) { tasks.findByName(taskName); } } @@ -81,13 +53,10 @@ public class GradleTaskIndexBuilder extends AbstractModelBuilderService { @NotNull ModelBuilderContext context, @NotNull Exception exception ) { - GradleTaskIndex.getInstance(context) - .markTaskModelAsError(project); - context.getMessageReporter().createMessage() - .withGroup(Messages.TASK_INDEX_GROUP) + .withGroup(Messages.TASK_WARM_UP_GROUP) .withKind(Message.Kind.WARNING) - .withTitle("Task model building failure") + .withTitle("Task warming-up failure") .withText("Unable to warm-up Gradle task model") .withException(exception) .reportMessage(project); diff --git a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/modelBuilder/Messages.java b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/modelBuilder/Messages.java index 01aaef54449c..00a1ddea28cc 100644 --- a/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/modelBuilder/Messages.java +++ b/plugins/gradle/tooling-extension-impl/src/com/intellij/gradle/toolingExtension/impl/modelBuilder/Messages.java @@ -12,11 +12,7 @@ public final class Messages { public final static @NotNull String SCALA_PROJECT_MODEL_GROUP = "gradle.scalaProjectModel.group"; - public final static @NotNull String TASK_INDEX_GROUP = "gradle.taskIndex.group"; - public final static @NotNull String TASK_INDEX_COLLECTING_GROUP = "gradle.taskIndex.collecting.group"; - public final static @NotNull String TASK_INDEX_CACHE_GET_GROUP = "gradle.taskIndex.cacheGet.group"; - public final static @NotNull String TASK_INDEX_CACHE_SET_GROUP = "gradle.taskIndex.cacheSet.group"; - + public final static @NotNull String TASK_WARM_UP_GROUP = "gradle.taskWarmUp.group"; public final static @NotNull String TASK_MODEL_GROUP = "gradle.taskModel.group"; public final static @NotNull String SOURCE_SET_MODEL_GROUP = "gradle.sourceSetModel.group";