[external system api][IDEA-349510] added a way to pass user data into ExternalSystemExecutionSettings

GitOrigin-RevId: a127d9836e052649b2f13ff1f28eee8e842913ac
This commit is contained in:
Alexander.Glukhov
2024-08-29 12:40:50 +02:00
committed by intellij-monorepo-bot
parent a257802046
commit cf76e7437a
7 changed files with 46 additions and 14 deletions

View File

@@ -335,6 +335,7 @@ com.intellij.openapi.externalSystem.importing.ImportSpec
- a:getExternalSystemId():com.intellij.openapi.externalSystem.model.ProjectSystemId
- a:getProgressExecutionMode():com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMode
- a:getProject():com.intellij.openapi.project.Project
- a:getUserData():com.intellij.openapi.util.UserDataHolderBase
- a:getVmOptions():java.lang.String
- a:isActivateBuildToolWindowOnFailure():Z
- a:isActivateBuildToolWindowOnStart():Z
@@ -356,6 +357,7 @@ c:com.intellij.openapi.externalSystem.importing.ImportSpecBuilder
- use(com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMode):com.intellij.openapi.externalSystem.importing.ImportSpecBuilder
- usePreviewMode():com.intellij.openapi.externalSystem.importing.ImportSpecBuilder
- withArguments(java.lang.String):com.intellij.openapi.externalSystem.importing.ImportSpecBuilder
- withUserData(com.intellij.openapi.util.UserDataHolderBase):com.intellij.openapi.externalSystem.importing.ImportSpecBuilder
- withVmOptions(java.lang.String):com.intellij.openapi.externalSystem.importing.ImportSpecBuilder
*:com.intellij.openapi.externalSystem.importing.ProjectResolverPolicy
- java.io.Serializable

View File

@@ -19,6 +19,7 @@ import com.intellij.openapi.externalSystem.model.ProjectSystemId;
import com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMode;
import com.intellij.openapi.externalSystem.service.project.ExternalProjectRefreshCallback;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.util.ThreeState;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@@ -57,4 +58,7 @@ public interface ImportSpec {
@Nullable
String getArguments();
@Nullable
UserDataHolderBase getUserData();
}

View File

@@ -8,6 +8,7 @@ import com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMo
import com.intellij.openapi.externalSystem.service.project.ExternalProjectRefreshCallback;
import com.intellij.openapi.externalSystem.service.project.ProjectDataManager;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.util.ThreeState;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@@ -30,6 +31,7 @@ public class ImportSpecBuilder {
@Nullable private String myArguments;
private boolean myCreateDirectoriesForEmptyContentRoots;
@Nullable private ProjectResolverPolicy myProjectResolverPolicy;
@Nullable private UserDataHolderBase myUserData;
public ImportSpecBuilder(@NotNull Project project, @NotNull ProjectSystemId id) {
myProject = project;
@@ -107,6 +109,11 @@ public class ImportSpecBuilder {
return this;
}
public ImportSpecBuilder withUserData(@Nullable UserDataHolderBase userData) {
myUserData = userData;
return this;
}
public ImportSpec build() {
ImportSpecImpl mySpec = new ImportSpecImpl(myProject, myExternalSystemId);
mySpec.setProgressExecutionMode(myProgressExecutionMode);
@@ -118,6 +125,7 @@ public class ImportSpecBuilder {
mySpec.setArguments(myArguments);
mySpec.setVmOptions(myVmOptions);
mySpec.setProjectResolverPolicy(myProjectResolverPolicy);
mySpec.setUserData(myUserData);
ExternalProjectRefreshCallback callback;
if (myCallback != null) {
callback = myCallback;
@@ -141,6 +149,7 @@ public class ImportSpecBuilder {
isActivateBuildToolWindowOnFailure = spec.isActivateBuildToolWindowOnFailure();
myArguments = spec.getArguments();
myVmOptions = spec.getVmOptions();
myUserData = spec.getUserData();
}
@ApiStatus.Internal

View File

@@ -19,6 +19,7 @@ import com.intellij.openapi.externalSystem.model.ProjectSystemId;
import com.intellij.openapi.externalSystem.service.execution.ProgressExecutionMode;
import com.intellij.openapi.externalSystem.service.project.ExternalProjectRefreshCallback;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.util.ThreeState;
import org.jetbrains.annotations.ApiStatus;
import org.jetbrains.annotations.NotNull;
@@ -42,6 +43,7 @@ public final class ImportSpecImpl implements ImportSpec {
@Nullable private String myArguments;
@Nullable private ProjectResolverPolicy myProjectResolverPolicy;
@Nullable private Runnable myRerunAction;
@Nullable private UserDataHolderBase myUserData;
public ImportSpecImpl(@NotNull Project project, @NotNull ProjectSystemId id) {
myProject = project;
@@ -163,4 +165,13 @@ public final class ImportSpecImpl implements ImportSpec {
public void setRerunAction(@Nullable Runnable rerunAction) {
myRerunAction = rerunAction;
}
@Override
public @Nullable UserDataHolderBase getUserData() {
return myUserData;
}
public void setUserData(@Nullable UserDataHolderBase userData) {
myUserData = userData;
}
}

View File

@@ -14,9 +14,7 @@ import com.intellij.openapi.externalSystem.util.ExternalSystemBundle;
import com.intellij.openapi.progress.ProcessCanceledException;
import com.intellij.openapi.progress.ProgressIndicator;
import com.intellij.openapi.project.Project;
import com.intellij.openapi.util.NlsContexts;
import com.intellij.openapi.util.ThrowableComputable;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.openapi.util.*;
import com.intellij.util.ArrayUtil;
import com.intellij.util.ThrowableRunnable;
import org.jetbrains.annotations.ApiStatus;
@@ -282,6 +280,18 @@ public abstract class AbstractExternalSystemTask extends UserDataHolderBase impl
return String.format("%s task %s: %s", myExternalSystemId.getReadableName(), myId, myState);
}
/**
* @see com.intellij.openapi.util.UserDataHolderBase#copyUserDataTo
*/
@ApiStatus.Internal
@SuppressWarnings({"unchecked", "rawtypes"})
protected void putUserDataTo(@NotNull UserDataHolder dataHolder) {
var userMap = getUserMap();
for (Key key : userMap.getKeys()) {
dataHolder.putUserData(key, userMap.get(key));
}
}
@ApiStatus.Internal
protected static @NotNull ExternalSystemTaskNotificationListener wrapWithListener(
@NotNull ExternalSystemProgressNotificationManagerImpl manager

View File

@@ -120,17 +120,6 @@ public class ExternalSystemExecuteTaskTask extends AbstractExternalSystemTask {
}
}
/**
* @see com.intellij.openapi.util.UserDataHolderBase#copyUserDataTo
*/
@SuppressWarnings({"unchecked", "rawtypes"})
private void putUserDataTo(@NotNull UserDataHolder dataHolder) {
var userMap = getUserMap();
for (Key key : userMap.getKeys()) {
dataHolder.putUserData(key, userMap.get(key));
}
}
@Override
protected boolean doCancel() throws Exception {
var manager = ExternalSystemFacadeManager.getInstance();

View File

@@ -23,6 +23,7 @@ import com.intellij.openapi.project.Project;
import com.intellij.openapi.project.UnindexedFilesScannerExecutor;
import com.intellij.openapi.util.NlsSafe;
import com.intellij.openapi.util.Ref;
import com.intellij.openapi.util.UserDataHolderBase;
import com.intellij.openapi.util.registry.Registry;
import com.intellij.openapi.util.text.StringUtil;
import com.intellij.util.execution.ParametersListUtil;
@@ -62,6 +63,10 @@ public class ExternalSystemResolveProjectTask extends AbstractExternalSystemTask
myVmOptions = importSpec.getVmOptions();
myArguments = importSpec.getArguments();
myResolverPolicy = importSpec instanceof ImportSpecImpl ? ((ImportSpecImpl)importSpec).getProjectResolverPolicy() : null;
UserDataHolderBase userData = importSpec.getUserData();
if (userData != null) {
userData.copyUserDataTo(this);
}
}
@Override
@@ -84,6 +89,8 @@ public class ExternalSystemResolveProjectTask extends AbstractExternalSystemTask
settings.withArguments(ParametersListUtil.parse(myArguments));
}
putUserDataTo(settings);
TargetEnvironmentConfigurationProvider environmentConfigurationProvider = null;
for (var executionAware : ExternalSystemExecutionAware.getExtensions(projectSystemId)) {
if (environmentConfigurationProvider == null) {