diff --git a/debug/org.eclipse.debug.core/META-INF/MANIFEST.MF b/debug/org.eclipse.debug.core/META-INF/MANIFEST.MF
index cdd768c6fb7..ccc9689c272 100644
--- a/debug/org.eclipse.debug.core/META-INF/MANIFEST.MF
+++ b/debug/org.eclipse.debug.core/META-INF/MANIFEST.MF
@@ -2,7 +2,7 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.debug.core; singleton:=true
-Bundle-Version: 3.22.100.qualifier
+Bundle-Version: 3.23.0.qualifier
Bundle-Activator: org.eclipse.debug.core.DebugPlugin
Bundle-Vendor: %providerName
Bundle-Localization: plugin
diff --git a/debug/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java b/debug/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java
index c80b4f9f131..97d1175de4a 100644
--- a/debug/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java
+++ b/debug/org.eclipse.debug.core/core/org/eclipse/debug/core/DebugPlugin.java
@@ -22,9 +22,12 @@
import java.nio.charset.StandardCharsets;
import java.text.MessageFormat;
import java.util.ArrayList;
+import java.util.Comparator;
import java.util.HashMap;
+import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
+import java.util.Optional;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.FactoryConfigurationError;
@@ -170,6 +173,14 @@ public class DebugPlugin extends Plugin {
*/
public static final String EXTENSION_POINT_PROCESS_FACTORIES = "processFactories"; //$NON-NLS-1$
+ /**
+ * Simple identifier constant (value "execFactories"
) for the
+ * exec factories extension point.
+ *
+ * @since 3.23
+ */
+ public static final String EXTENSION_POINT_EXEC_FACTORIES = "execFactories"; //$NON-NLS-1$
+
/**
* Simple identifier constant (value "logicalStructureTypes"
) for the
* logical structure types extension point.
@@ -438,6 +449,11 @@ public class DebugPlugin extends Plugin {
*/
private HashMap fProcessFactories = null;
+ /**
+ * List of exec factories.
+ */
+ private List execFactories;
+
/**
* Service tracker for the workspace service
*/
@@ -981,7 +997,24 @@ public static Process exec(String[] cmdLine, File workingDirectory, String[] env
* @since 3.14
*/
public static Process exec(String[] cmdLine, File workingDirectory, String[] envp, boolean mergeOutput) throws CoreException {
- Process p = null;
+ List factories = DebugPlugin.getDefault().getExecFactories();
+ Optional directory = shortenWindowsPath(workingDirectory);
+ Optional