IDEA-252159 Run / Debug Configuration $FilePrompt$ as working directory
authorDmitry Avdeev <dmitry.avdeev@jetbrains.com>
Wed, 14 Apr 2021 14:44:57 +0000 (17:44 +0300)
committerintellij-monorepo-bot <intellij-monorepo-bot-no-reply@jetbrains.com>
Wed, 14 Apr 2021 15:18:00 +0000 (18:18 +0300)
validation mode for ProgramParametersConfigurator

GitOrigin-RevId: da9e6ceaf2c55f667345e9709c85e5ba887c2a02

platform/execution-impl/src/com/intellij/execution/util/ProgramParametersConfigurator.java
platform/execution-impl/src/com/intellij/execution/util/ProgramParametersUtil.java

index 4cfa13d86f751c22b26ed72664cec9c0d146ac4f..bc02f0752354817c82e326b4f3b5ca2c7373fdbe 100644 (file)
@@ -11,6 +11,7 @@ import com.intellij.ide.macro.MacroManager;
 import com.intellij.ide.macro.PromptingMacro;
 import com.intellij.openapi.actionSystem.CommonDataKeys;
 import com.intellij.openapi.actionSystem.DataContext;
+import com.intellij.openapi.actionSystem.DataKey;
 import com.intellij.openapi.actionSystem.LangDataKeys;
 import com.intellij.openapi.components.PathMacroManager;
 import com.intellij.openapi.extensions.ExtensionPointName;
@@ -25,6 +26,7 @@ import com.intellij.openapi.util.text.StringUtil;
 import com.intellij.openapi.vfs.LocalFileSystem;
 import com.intellij.openapi.vfs.VirtualFile;
 import com.intellij.util.EnvironmentUtil;
+import com.intellij.util.IncorrectOperationException;
 import com.intellij.util.execution.ParametersListUtil;
 import org.jetbrains.annotations.Contract;
 import org.jetbrains.annotations.NotNull;
@@ -48,6 +50,8 @@ public class ProgramParametersConfigurator {
   @Deprecated
   @SuppressWarnings("DeprecatedIsStillUsed")
   public static final String MODULE_WORKING_DIR = "%MODULE_WORKING_DIR%";
+  private static final DataKey<Boolean> VALIDATION_MODE = DataKey.create("validation.mode");
+  private boolean myValidation;
 
   public void configureConfiguration(@NotNull SimpleProgramParameters parameters, @NotNull CommonProgramRunConfigurationParameters configuration) {
     Project project = configuration.getProject();
@@ -76,10 +80,15 @@ public class ProgramParametersConfigurator {
     return path;
   }
 
-  private static DataContext projectContext(Project project, Module module) {
+  public void setValidation(boolean validation) {
+    myValidation = validation;
+  }
+
+  private DataContext projectContext(Project project, Module module) {
     return dataId -> {
       if (CommonDataKeys.PROJECT.is(dataId)) return project;
       if (LangDataKeys.MODULE.is(dataId) || LangDataKeys.MODULE_CONTEXT.is(dataId)) return module;
+      if (VALIDATION_MODE.is(dataId)) return myValidation;
       return null;
     };
   }
@@ -127,7 +136,14 @@ public class ProgramParametersConfigurator {
 
   private static @Nullable String previewOrExpandMacro(Macro macro, DataContext dataContext) {
     try {
-      return macro instanceof PromptingMacro ? macro.expand(dataContext) : macro.preview();
+      if (macro instanceof PromptingMacro) {
+        Boolean mode = VALIDATION_MODE.getData(dataContext);
+        if (mode != null && mode) {
+          throw new IncorrectOperationException();
+        }
+        return macro.expand(dataContext);
+      }
+      return macro.preview();
     }
     catch (Macro.ExecutionCancelledException e) {
       return null;
index 600625f80c5e07fa25b29025c3223b33555cd32e..6b6a0b540f39e310113bd49f704f58321436fb46 100644 (file)
@@ -6,6 +6,7 @@ import com.intellij.execution.configurations.RuntimeConfigurationWarning;
 import com.intellij.execution.configurations.SimpleProgramParameters;
 import com.intellij.openapi.module.Module;
 import com.intellij.openapi.project.Project;
+import com.intellij.util.IncorrectOperationException;
 import org.jetbrains.annotations.Nullable;
 
 public final class ProgramParametersUtil {
@@ -19,7 +20,13 @@ public final class ProgramParametersUtil {
 
   public static void checkWorkingDirectoryExist(CommonProgramRunConfigurationParameters configuration, Project project, Module module)
     throws RuntimeConfigurationWarning {
-    new ProgramParametersConfigurator().checkWorkingDirectoryExist(configuration, project, module);
+    ProgramParametersConfigurator configurator = new ProgramParametersConfigurator();
+    configurator.setValidation(true);
+    try {
+      configurator.checkWorkingDirectoryExist(configuration, project, module);
+    }
+    catch (IncorrectOperationException ignore) {
+    }
   }
 
   public static String expandPath(String path, Module module, Project project) {