mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
IDEA-233549: run: Add CommonProgramParametersPanel.initMacroSupport()
Also move addMacroSupport() from ProgramParametersConfigurator to CommonProgramParametersPanel. GitOrigin-RevId: 3e4a864e410b676febf37a7bca70bd9c2fb22804
This commit is contained in:
committed by
intellij-monorepo-bot
parent
8fc913243f
commit
b2d1270096
+1
-3
@@ -1,4 +1,4 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.execution.application;
|
||||
|
||||
import com.intellij.application.options.ModuleDescriptionsComboBox;
|
||||
@@ -8,7 +8,6 @@ import com.intellij.execution.configurations.ConfigurationUtil;
|
||||
import com.intellij.execution.impl.SingleConfigurationConfigurable;
|
||||
import com.intellij.execution.ui.*;
|
||||
import com.intellij.execution.util.JreVersionDetector;
|
||||
import com.intellij.execution.util.ProgramParametersConfigurator;
|
||||
import com.intellij.ide.DataManager;
|
||||
import com.intellij.openapi.options.ConfigurationException;
|
||||
import com.intellij.openapi.options.SettingsEditor;
|
||||
@@ -49,7 +48,6 @@ public class ApplicationConfigurable extends SettingsEditor<ApplicationConfigura
|
||||
|
||||
myJrePathEditor.setDefaultJreSelector(DefaultJreSelector.fromSourceRootsDependencies(myModule.getComponent(), getMainClassField()));
|
||||
myCommonProgramParameters.setModuleContext(myModuleSelector.getModule());
|
||||
ProgramParametersConfigurator.addMacroSupport(myCommonProgramParameters.getProgramParametersComponent().getComponent().getEditorField());
|
||||
myModule.getComponent().addActionListener(e -> myCommonProgramParameters.setModuleContext(myModuleSelector.getModule()));
|
||||
new ClassBrowser.AppClassBrowser<EditorTextField>(project, myModuleSelector).setField(getMainClassField());
|
||||
myShortenClasspathModeCombo.setComponent(new ShortenCommandLineModeCombo(myProject, myJrePathEditor, myModule.getComponent()));
|
||||
|
||||
@@ -5,9 +5,10 @@ import com.intellij.execution.CommonJavaRunConfigurationParameters;
|
||||
import com.intellij.execution.ExecutionBundle;
|
||||
import com.intellij.execution.InputRedirectAware;
|
||||
import com.intellij.execution.configurations.RunConfiguration;
|
||||
import com.intellij.execution.util.ProgramParametersConfigurator;
|
||||
import com.intellij.ide.macro.MacrosDialog;
|
||||
import com.intellij.openapi.ui.LabeledComponent;
|
||||
import com.intellij.ui.RawCommandLineEditor;
|
||||
import com.intellij.ui.components.fields.ExtendableTextField;
|
||||
import com.intellij.util.ui.UIUtil;
|
||||
|
||||
import javax.swing.*;
|
||||
@@ -25,8 +26,6 @@ public class CommonJavaParametersPanel extends CommonProgramParametersPanel {
|
||||
protected void addComponents() {
|
||||
myVMParametersComponent = LabeledComponent.create(new RawCommandLineEditor(),
|
||||
ExecutionBundle.message("run.configuration.java.vm.parameters.label"));
|
||||
ProgramParametersConfigurator.addMacroSupport(myVMParametersComponent.getComponent().getEditorField());
|
||||
|
||||
copyDialogCaption(myVMParametersComponent);
|
||||
|
||||
myVMParametersComponent.setLabelLocation(BorderLayout.WEST);
|
||||
@@ -38,6 +37,19 @@ public class CommonJavaParametersPanel extends CommonProgramParametersPanel {
|
||||
add(myInputRedirectPanel);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected final boolean isMacroSupportEnabled() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void initMacroSupport() {
|
||||
super.initMacroSupport();
|
||||
addMacroSupport(myVMParametersComponent.getComponent().getEditorField(), MacrosDialog.Filters.ALL, getPathMacros());
|
||||
addMacroSupport((ExtendableTextField)myInputRedirectPanel.getComponent().getTextField(), MacrosDialog.Filters.FILE_PATH,
|
||||
getPathMacros());
|
||||
}
|
||||
|
||||
public void setVMParameters(String text) {
|
||||
myVMParametersComponent.getComponent().setText(text);
|
||||
}
|
||||
|
||||
@@ -1,7 +1,9 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.execution;
|
||||
|
||||
import com.intellij.execution.configurations.RunConfiguration;
|
||||
import com.intellij.execution.util.ProgramParametersUtil;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.util.JDOMExternalizerUtil;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
@@ -36,7 +38,9 @@ public interface InputRedirectAware extends RunConfiguration {
|
||||
|
||||
String filePath = inputRedirectOptions.getRedirectInputPath();
|
||||
if (!StringUtil.isEmpty(filePath)) {
|
||||
filePath = FileUtil.toSystemDependentName(filePath);
|
||||
Module module = configuration instanceof CommonProgramRunConfigurationParameters
|
||||
? ProgramParametersUtil.getModule((CommonProgramRunConfigurationParameters)configuration) : null;
|
||||
filePath = FileUtil.toSystemDependentName(ProgramParametersUtil.expandPathAndMacros(filePath, module, configuration.getProject()));
|
||||
File file = new File(filePath);
|
||||
if (configuration instanceof CommonProgramRunConfigurationParameters && !FileUtil.isAbsolute(filePath)) {
|
||||
String directory = ((CommonProgramRunConfigurationParameters)configuration).getWorkingDirectory();
|
||||
|
||||
+42
-10
@@ -5,7 +5,10 @@ import com.intellij.execution.CommonProgramRunConfigurationParameters;
|
||||
import com.intellij.execution.ExecutionBundle;
|
||||
import com.intellij.execution.configuration.EnvironmentVariablesComponent;
|
||||
import com.intellij.execution.util.ProgramParametersConfigurator;
|
||||
import com.intellij.execution.util.ProgramParametersUtil;
|
||||
import com.intellij.icons.AllIcons;
|
||||
import com.intellij.ide.macro.EditorMacro;
|
||||
import com.intellij.ide.macro.Macro;
|
||||
import com.intellij.ide.macro.MacrosDialog;
|
||||
import com.intellij.openapi.application.PathMacros;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
|
||||
@@ -13,6 +16,7 @@ import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.ui.*;
|
||||
import com.intellij.openapi.ui.popup.JBPopupFactory;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.ui.PanelWithAnchor;
|
||||
import com.intellij.ui.RawCommandLineEditor;
|
||||
import com.intellij.ui.TextAccessor;
|
||||
@@ -31,6 +35,7 @@ import java.awt.event.ActionListener;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class CommonProgramParametersPanel extends JPanel implements PanelWithAnchor {
|
||||
protected LabeledComponent<RawCommandLineEditor> myProgramParametersComponent;
|
||||
@@ -93,6 +98,9 @@ public class CommonProgramParametersPanel extends JPanel implements PanelWithAnc
|
||||
myWorkingDirectoryComponent.setLabelLocation(BorderLayout.WEST);
|
||||
|
||||
addComponents();
|
||||
if (isMacroSupportEnabled()) {
|
||||
initMacroSupport();
|
||||
}
|
||||
|
||||
setPreferredSize(new Dimension(10, 10));
|
||||
|
||||
@@ -126,7 +134,40 @@ public class CommonProgramParametersPanel extends JPanel implements PanelWithAnc
|
||||
return panel;
|
||||
}
|
||||
|
||||
private @NotNull Map<String, String> getPathMacros() {
|
||||
protected void addComponents() {
|
||||
add(myProgramParametersComponent);
|
||||
add(myWorkingDirectoryComponent);
|
||||
add(myEnvVariablesComponent);
|
||||
}
|
||||
|
||||
/**
|
||||
* Macro support for run configuration fields is opt-in.
|
||||
* Run configurations that can handle macros (basically any using {@link ProgramParametersConfigurator} or {@link ProgramParametersUtil})
|
||||
* are encouraged to enable "add macro" inline button for program parameters and working directory fields by overriding this method,
|
||||
* and optionally overriding {@link #initMacroSupport()} to enable macros for other fields.
|
||||
*/
|
||||
protected boolean isMacroSupportEnabled() {
|
||||
return false;
|
||||
}
|
||||
|
||||
protected void initMacroSupport() {
|
||||
addMacroSupport(myProgramParametersComponent.getComponent().getEditorField(), MacrosDialog.Filters.ALL, getPathMacros());
|
||||
addMacroSupport((ExtendableTextField)myWorkingDirectoryField.getTextField(), MacrosDialog.Filters.DIRECTORY_PATH, getPathMacros());
|
||||
}
|
||||
|
||||
public static void addMacroSupport(@NotNull ExtendableTextField textField) {
|
||||
addMacroSupport(textField, MacrosDialog.Filters.ALL, null);
|
||||
}
|
||||
|
||||
protected static void addMacroSupport(@NotNull ExtendableTextField textField,
|
||||
@NotNull Predicate<? super Macro> macroFilter,
|
||||
@Nullable Map<String, String> userMacros) {
|
||||
if (Registry.is("allow.macros.for.run.configurations")) {
|
||||
MacrosDialog.addTextFieldExtension(textField, macroFilter.and(macro -> !(macro instanceof EditorMacro)), userMacros);
|
||||
}
|
||||
}
|
||||
|
||||
protected @NotNull Map<String, String> getPathMacros() {
|
||||
final HashMap<String, String> macros = new HashMap<>(PathMacros.getInstance().getUserMacros());
|
||||
if (myModuleContext != null || myHasModuleMacro) {
|
||||
macros.put(PathMacroUtil.MODULE_DIR_MACRO_NAME, PathMacros.getInstance().getValue(PathMacroUtil.MODULE_DIR_MACRO_NAME));
|
||||
@@ -136,15 +177,6 @@ public class CommonProgramParametersPanel extends JPanel implements PanelWithAnc
|
||||
return macros;
|
||||
}
|
||||
|
||||
protected void addComponents() {
|
||||
add(myProgramParametersComponent);
|
||||
add(myWorkingDirectoryComponent);
|
||||
add(myEnvVariablesComponent);
|
||||
|
||||
ProgramParametersConfigurator.addMacroSupport((ExtendableTextField)myWorkingDirectoryField.getTextField(),
|
||||
MacrosDialog.Filters.DIRECTORY_PATH, getPathMacros());
|
||||
}
|
||||
|
||||
protected void copyDialogCaption(final LabeledComponent<RawCommandLineEditor> component) {
|
||||
final RawCommandLineEditor rawCommandLineEditor = component.getComponent();
|
||||
rawCommandLineEditor.setDialogCaption(component.getRawText());
|
||||
|
||||
@@ -21,6 +21,7 @@ import java.awt.event.ActionListener;
|
||||
|
||||
public class ProgramInputRedirectPanel extends JPanel implements PanelWithAnchor {
|
||||
private final JBCheckBox myCheckBox = new JBCheckBox(ExecutionBundle.message("redirect.input.from"));
|
||||
|
||||
private final TextFieldWithBrowseButton myInputFile = new TextFieldWithBrowseButton();
|
||||
|
||||
public ProgramInputRedirectPanel() {
|
||||
@@ -40,6 +41,10 @@ public class ProgramInputRedirectPanel extends JPanel implements PanelWithAnchor
|
||||
});
|
||||
}
|
||||
|
||||
public @NotNull TextFieldWithBrowseButton getComponent() {
|
||||
return myInputFile;
|
||||
}
|
||||
|
||||
@Override
|
||||
public JComponent getAnchor() {
|
||||
return myCheckBox.getAnchor();
|
||||
|
||||
+3
-20
@@ -5,7 +5,9 @@ import com.intellij.execution.CommonProgramRunConfigurationParameters;
|
||||
import com.intellij.execution.configurations.ModuleBasedConfiguration;
|
||||
import com.intellij.execution.configurations.RuntimeConfigurationWarning;
|
||||
import com.intellij.execution.configurations.SimpleProgramParameters;
|
||||
import com.intellij.ide.macro.*;
|
||||
import com.intellij.ide.macro.Macro;
|
||||
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.LangDataKeys;
|
||||
@@ -20,7 +22,6 @@ import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.registry.Registry;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.ui.components.fields.ExtendableTextField;
|
||||
import com.intellij.util.EnvironmentUtil;
|
||||
import com.intellij.util.PathUtil;
|
||||
import com.intellij.util.execution.ParametersListUtil;
|
||||
@@ -32,7 +33,6 @@ import org.jetbrains.jps.model.serialization.PathMacroUtil;
|
||||
import java.io.File;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.function.Predicate;
|
||||
|
||||
public class ProgramParametersConfigurator {
|
||||
private static final ExtensionPointName<WorkingDirectoryProvider> WORKING_DIRECTORY_PROVIDER_EP_NAME= ExtensionPointName
|
||||
@@ -74,23 +74,6 @@ public class ProgramParametersConfigurator {
|
||||
};
|
||||
}
|
||||
|
||||
public static void addMacroSupport(@NotNull ExtendableTextField textField) {
|
||||
addMacroSupport(textField, MacrosDialog.Filters.ALL);
|
||||
}
|
||||
|
||||
public static void addMacroSupport(@NotNull ExtendableTextField textField,
|
||||
@NotNull Predicate<? super Macro> macroFilter) {
|
||||
addMacroSupport(textField, macroFilter, null);
|
||||
}
|
||||
|
||||
public static void addMacroSupport(@NotNull ExtendableTextField textField,
|
||||
@NotNull Predicate<? super Macro> macroFilter,
|
||||
@Nullable Map<String, String> userMacros) {
|
||||
if (Registry.is("allow.macros.for.run.configurations")) {
|
||||
MacrosDialog.addTextFieldExtension(textField, macroFilter.and(macro -> !(macro instanceof EditorMacro)), userMacros);
|
||||
}
|
||||
}
|
||||
|
||||
public static String expandMacros(@Nullable String path) {
|
||||
return expandMacros(path, DataContext.EMPTY_CONTEXT);
|
||||
}
|
||||
|
||||
@@ -1,18 +1,4 @@
|
||||
/*
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.intellij.execution.util;
|
||||
|
||||
import com.intellij.execution.CommonProgramRunConfigurationParameters;
|
||||
@@ -40,6 +26,10 @@ public class ProgramParametersUtil {
|
||||
return new ProgramParametersConfigurator().expandPath(path, module, project);
|
||||
}
|
||||
|
||||
public static String expandPathAndMacros(String path, Module module, Project project) {
|
||||
return new ProgramParametersConfigurator().expandPathAndMacros(path, module, project);
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static Module getModule(CommonProgramRunConfigurationParameters configuration) {
|
||||
return new ProgramParametersConfigurator().getModule(configuration);
|
||||
|
||||
@@ -1,8 +1,8 @@
|
||||
// Copyright 2000-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
// Copyright 2000-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license that can be found in the LICENSE file.
|
||||
package com.jetbrains.python.run;
|
||||
|
||||
import com.google.common.collect.Lists;
|
||||
import com.intellij.execution.util.ProgramParametersConfigurator;
|
||||
import com.intellij.execution.ui.CommonProgramParametersPanel;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptorFactory;
|
||||
import com.intellij.openapi.module.Module;
|
||||
@@ -30,10 +30,10 @@ import com.intellij.util.containers.ContainerUtil;
|
||||
import com.intellij.util.ui.JBUI;
|
||||
import com.jetbrains.PySymbolFieldWithBrowseButton;
|
||||
import com.jetbrains.PySymbolFieldWithBrowseButtonKt;
|
||||
import com.jetbrains.extensions.python.FileChooserDescriptorExtKt;
|
||||
import com.jetbrains.extensions.ContextAnchor;
|
||||
import com.jetbrains.extensions.ModuleBasedContextAnchor;
|
||||
import com.jetbrains.extensions.ProjectSdkContextAnchor;
|
||||
import com.jetbrains.extensions.python.FileChooserDescriptorExtKt;
|
||||
import com.jetbrains.python.PyBundle;
|
||||
import com.jetbrains.python.debugger.PyDebuggerOptionsProvider;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
@@ -146,7 +146,7 @@ public class PythonRunConfigurationForm implements PythonRunConfigurationParams,
|
||||
group.add(myRedirectInputCheckBox);
|
||||
group.add(myShowCommandLineCheckbox);
|
||||
|
||||
ProgramParametersConfigurator.addMacroSupport(myScriptParametersTextField.getEditorField());
|
||||
CommonProgramParametersPanel.addMacroSupport(myScriptParametersTextField.getEditorField());
|
||||
}
|
||||
|
||||
private void updateRunModuleMode() {
|
||||
|
||||
Reference in New Issue
Block a user