[external system api] ExternalSystemApiUtil.executeProjectChangeAction(DisposeAwareProjectChange) deprecation

GitOrigin-RevId: 37d6edcc3ae271691aea8bb643aaae29634d6f8f
This commit is contained in:
Alexander.Glukhov
2024-01-26 10:11:38 +01:00
committed by intellij-monorepo-bot
parent 86d6ad6f6e
commit c05b3b603e
5 changed files with 64 additions and 50 deletions

View File

@@ -2,13 +2,11 @@
package com.intellij.externalSystem
import com.intellij.compiler.CompilerConfiguration
import com.intellij.openapi.diagnostic.logger
import com.intellij.openapi.externalSystem.model.DataNode
import com.intellij.openapi.externalSystem.model.Key
import com.intellij.openapi.externalSystem.model.project.ProjectData
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider
import com.intellij.openapi.externalSystem.service.project.manage.AbstractProjectDataService
import com.intellij.openapi.externalSystem.util.DisposeAwareProjectChange
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.project.Project
import com.intellij.openapi.projectRoots.JavaSdkVersionUtil
@@ -33,13 +31,11 @@ internal class JavaProjectDataService : AbstractProjectDataService<JavaProjectDa
if (!ExternalSystemApiUtil.isOneToOneMapping(project, projectData, modelsProvider.modules)) return
val javaProjectData = toImport.first().data
ExternalSystemApiUtil.executeProjectChangeAction(object : DisposeAwareProjectChange(project) {
override fun execute() {
importProjectSdk(project, javaProjectData)
importLanguageLevel(project, javaProjectData)
importTargetBytecodeVersion(project, javaProjectData)
}
})
ExternalSystemApiUtil.executeProjectChangeAction(project) {
importProjectSdk(project, javaProjectData)
importLanguageLevel(project, javaProjectData)
importTargetBytecodeVersion(project, javaProjectData)
}
}
private fun importProjectSdk(project: Project, javaProjectData: JavaProjectData) {

View File

@@ -4,7 +4,11 @@ package com.intellij.openapi.externalSystem.util;
import com.intellij.execution.rmi.RemoteUtil;
import com.intellij.ide.highlighter.ArchiveFileType;
import com.intellij.openapi.Disposable;
import com.intellij.openapi.application.*;
import com.intellij.openapi.application.Application;
import com.intellij.openapi.application.ApplicationManager;
import com.intellij.openapi.application.ModalityState;
import com.intellij.openapi.application.TransactionGuard;
import com.intellij.openapi.components.ComponentManager;
import com.intellij.openapi.extensions.ExtensionPointName;
import com.intellij.openapi.externalSystem.ExternalSystemAutoImportAware;
import com.intellij.openapi.externalSystem.ExternalSystemManager;
@@ -46,7 +50,10 @@ import com.intellij.util.concurrency.EdtExecutorService;
import com.intellij.util.containers.ContainerUtil;
import com.intellij.util.containers.MultiMap;
import com.intellij.util.ui.UIUtil;
import org.jetbrains.annotations.*;
import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.Nls;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.io.PrintWriter;
@@ -342,10 +349,33 @@ public final class ExternalSystemApiUtil {
return null;
}
public static void executeProjectChangeAction(@NotNull ComponentManager componentManager, @NotNull Runnable task) {
executeProjectChangeAction(true, componentManager, task);
}
/**
* @deprecated Use executeProjectChangeAction(ComponentManager, Runnable) instead.
*/
@Deprecated(forRemoval = true)
public static void executeProjectChangeAction(final @NotNull DisposeAwareProjectChange task) {
executeProjectChangeAction(true, task);
}
public static void executeProjectChangeAction(boolean synchronous, @NotNull ComponentManager componentManager, @NotNull Runnable task) {
if (!ApplicationManager.getApplication().isDispatchThread()) {
TransactionGuard.getInstance().assertWriteSafeContext(ModalityState.defaultModalityState());
}
executeOnEdt(synchronous, () -> ApplicationManager.getApplication().runWriteAction(() -> {
if (!componentManager.isDisposed()) {
task.run();
}
}));
}
/**
* @deprecated Use executeProjectChangeAction(boolean, ComponentManager, Runnable) instead.
*/
@Deprecated(forRemoval = true)
public static void executeProjectChangeAction(boolean synchronous, final @NotNull DisposeAwareProjectChange task) {
if (!ApplicationManager.getApplication().isDispatchThread()) {
TransactionGuard.getInstance().assertWriteSafeContext(ModalityState.defaultModalityState());

View File

@@ -12,7 +12,10 @@ import com.intellij.openapi.externalSystem.model.project.ProjectData;
import com.intellij.openapi.externalSystem.service.project.*;
import com.intellij.openapi.externalSystem.statistics.ExternalSystemSyncActionsCollector;
import com.intellij.openapi.externalSystem.statistics.Phase;
import com.intellij.openapi.externalSystem.util.*;
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.externalSystem.util.ExternalSystemBundle;
import com.intellij.openapi.externalSystem.util.ExternalSystemTelemetryUtil;
import com.intellij.openapi.externalSystem.util.ExternalSystemUtil;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.progress.ProgressManager;
import com.intellij.openapi.project.Project;
@@ -472,35 +475,27 @@ public final class ProjectDataManagerImpl implements ProjectDataManager {
@Nullable Long activityId,
@Nullable ProjectSystemId projectSystemId) {
Span parentSpan = Span.current();
ExternalSystemApiUtil.executeProjectChangeAction(synchronous, new DisposeAwareProjectChange(project) {
@Override
public void execute() {
syncMetrics.getOrStartSpan(Phase.WORKSPACE_MODEL_APPLY.name(), ExternalSystemSyncDiagnostic.gradleSyncSpanName);
ExternalSystemTelemetryUtil.runWithSpan(projectSystemId, "WorkspaceModelApply", parentSpan, (ignore) -> {
if (activityId != null) {
ExternalSystemSyncActionsCollector.logPhaseStarted(project, activityId, Phase.WORKSPACE_MODEL_APPLY);
}
final long startTime = System.currentTimeMillis();
modelsProvider.commit();
final long timeInMs = System.currentTimeMillis() - startTime;
if (activityId != null) {
syncMetrics.endSpan(Phase.WORKSPACE_MODEL_APPLY.name());
ExternalSystemSyncActionsCollector.logPhaseFinished(project, activityId, Phase.WORKSPACE_MODEL_APPLY, timeInMs);
}
LOG.debug(String.format("%s committed in %d ms", commitDesc, timeInMs));
});
}
ExternalSystemApiUtil.executeProjectChangeAction(synchronous, project, () -> {
syncMetrics.getOrStartSpan(Phase.WORKSPACE_MODEL_APPLY.name(), ExternalSystemSyncDiagnostic.gradleSyncSpanName);
ExternalSystemTelemetryUtil.runWithSpan(projectSystemId, "WorkspaceModelApply", parentSpan, (ignore) -> {
if (activityId != null) {
ExternalSystemSyncActionsCollector.logPhaseStarted(project, activityId, Phase.WORKSPACE_MODEL_APPLY);
}
final long startTime = System.currentTimeMillis();
modelsProvider.commit();
final long timeInMs = System.currentTimeMillis() - startTime;
if (activityId != null) {
syncMetrics.endSpan(Phase.WORKSPACE_MODEL_APPLY.name());
ExternalSystemSyncActionsCollector.logPhaseFinished(project, activityId, Phase.WORKSPACE_MODEL_APPLY, timeInMs);
}
LOG.debug(String.format("%s committed in %d ms", commitDesc, timeInMs));
});
});
}
private static void dispose(@NotNull final IdeModifiableModelsProvider modelsProvider,
@NotNull Project project,
boolean synchronous) {
ExternalSystemApiUtil.executeProjectChangeAction(synchronous, new DisposeAwareProjectChange(project) {
@Override
public void execute() {
modelsProvider.dispose();
}
});
ExternalSystemApiUtil.executeProjectChangeAction(synchronous, project, () -> modelsProvider.dispose());
}
}

View File

@@ -7,7 +7,6 @@ import com.intellij.openapi.externalSystem.model.ProjectKeys;
import com.intellij.openapi.externalSystem.model.ProjectSystemId;
import com.intellij.openapi.externalSystem.model.project.ProjectData;
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider;
import com.intellij.openapi.externalSystem.util.DisposeAwareProjectChange;
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil;
import com.intellij.openapi.externalSystem.util.ExternalSystemConstants;
import com.intellij.openapi.externalSystem.util.Order;
@@ -57,13 +56,10 @@ public final class ProjectDataServiceImpl extends AbstractProjectDataService<Pro
if (!(project instanceof ProjectEx) || newName.equals(project.getName())) {
return;
}
ExternalSystemApiUtil.executeProjectChangeAction(true, new DisposeAwareProjectChange(project) {
@Override
public void execute() {
String oldName = project.getName();
((ProjectEx)project).setProjectName(newName);
ExternalSystemApiUtil.getSettings(project, externalSystemId).getPublisher().onProjectRenamed(oldName, newName);
}
ExternalSystemApiUtil.executeProjectChangeAction(true, project, () -> {
String oldName = project.getName();
((ProjectEx)project).setProjectName(newName);
ExternalSystemApiUtil.getSettings(project, externalSystemId).getPublisher().onProjectRenamed(oldName, newName);
});
}
}

View File

@@ -7,7 +7,6 @@ import com.intellij.openapi.externalSystem.model.project.ModuleSdkData
import com.intellij.openapi.externalSystem.model.project.ProjectData
import com.intellij.openapi.externalSystem.model.project.ProjectSdkData
import com.intellij.openapi.externalSystem.service.project.IdeModifiableModelsProvider
import com.intellij.openapi.externalSystem.util.DisposeAwareProjectChange
import com.intellij.openapi.externalSystem.util.ExternalSystemApiUtil
import com.intellij.openapi.externalSystem.util.ExternalSystemBundle
import com.intellij.openapi.module.Module
@@ -28,11 +27,9 @@ internal class ProjectSdkDataService : AbstractProjectDataService<ProjectSdkData
require(toImport.size == 1) { String.format("Expected to get a single project but got %d: %s", toImport.size, toImport) }
if (!ExternalSystemApiUtil.isOneToOneMapping(project, projectData, modelsProvider.modules)) return
for (sdkDataNode in toImport) {
ExternalSystemApiUtil.executeProjectChangeAction(object : DisposeAwareProjectChange(project) {
override fun execute() {
importProjectSdk(project, sdkDataNode.data)
}
})
ExternalSystemApiUtil.executeProjectChangeAction(project) {
importProjectSdk(project, sdkDataNode.data)
}
}
}