Bug 575210 - [17-18] JEP 411-393: Deprecate the Security Manager for
Removal
Change-Id: I5e70d322f6827209714e92caf5fdbba1c63a81b3
Reviewed-on: https://git.eclipse.org/r/c/pde/eclipse.pde.ui/+/190770
Tested-by: PDE Bot <pde-bot@eclipse.org>
Tested-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
Reviewed-by: Vikas Chandra <Vikas.Chandra@in.ibm.com>
diff --git a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java
index 32579fd..ec57649 100644
--- a/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java
+++ b/ui/org.eclipse.pde.launching/src/org/eclipse/pde/launching/AbstractPDELaunchConfiguration.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2005, 2018, 2020 IBM Corporation and others.
+ * Copyright (c) 2005, 2018, 2022 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
@@ -22,6 +22,7 @@
import org.eclipse.debug.core.*;
import org.eclipse.debug.core.model.LaunchConfigurationDelegate;
import org.eclipse.jdt.core.IJavaModelMarker;
+import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.launching.*;
import org.eclipse.pde.core.plugin.TargetPlatform;
import org.eclipse.pde.internal.core.ICoreConstants;
@@ -82,7 +83,7 @@
VMRunnerConfiguration runnerConfig = new VMRunnerConfiguration(getMainClass(), getClasspath(configuration));
IVMInstall launcher = VMHelper.createLauncher(configuration);
boolean isModular = JavaRuntime.isModularJava(launcher);
- runnerConfig.setVMArguments(updateVMArgumentWithAddModuleSystem(getVMArguments(configuration), isModular));
+ runnerConfig.setVMArguments(updateVMArgumentWithAdditionalArguments(getVMArguments(configuration), isModular, configuration));
runnerConfig.setProgramArguments(getProgramArguments(configuration));
runnerConfig.setWorkingDirectory(getWorkingDirectory(configuration).getAbsolutePath());
runnerConfig.setEnvironment(getEnvironment(configuration));
@@ -122,7 +123,7 @@
VMRunnerConfiguration runnerConfig = new VMRunnerConfiguration(getMainClass(), getClasspath(configuration));
IVMInstall launcher = VMHelper.createLauncher(configuration);
boolean isModular = JavaRuntime.isModularJava(launcher);
- runnerConfig.setVMArguments(updateVMArgumentWithAddModuleSystem(getVMArguments(configuration), isModular));
+ runnerConfig.setVMArguments(updateVMArgumentWithAdditionalArguments(getVMArguments(configuration), isModular, configuration));
runnerConfig.setProgramArguments(getProgramArguments(configuration));
runnerConfig.setWorkingDirectory(getWorkingDirectory(configuration).getAbsolutePath());
runnerConfig.setEnvironment(getEnvironment(configuration));
@@ -143,11 +144,40 @@
}
}
- private String[] updateVMArgumentWithAddModuleSystem(String[] args, boolean isModular) {
+ private String[] updateVMArgumentWithAdditionalArguments(String[] args, boolean isModular, ILaunchConfiguration configuration) {
String modAllSystem= "--add-modules=ALL-SYSTEM"; //$NON-NLS-1$
- if (isModular && !argumentContainsModuleSystem(args, modAllSystem)) {
- args = Arrays.copyOf(args, args.length + 1);
- args[args.length - 1] = modAllSystem;
+ String allowSecurityManager = "-Djava.security.manager=allow"; //$NON-NLS-1$
+ boolean addModuleSystem = false;
+ boolean addAllowSecurityManager = false;
+ int argLength = args.length;
+ if (isModular && !argumentContainsAttribute(args, modAllSystem)) {
+ addModuleSystem = true;
+ argLength++; // Need to add the argument
+ }
+ IVMInstall vmInstall;
+ try {
+ vmInstall = VMHelper.getVMInstall(configuration);
+ if (vmInstall instanceof AbstractVMInstall) {
+ AbstractVMInstall install = (AbstractVMInstall) vmInstall;
+ String vmver = install.getJavaVersion();
+ if (vmver != null && JavaCore.compareJavaVersions(vmver, JavaCore.VERSION_17) >= 0) {
+ if (!argumentContainsAttribute(args, allowSecurityManager)) {
+ addAllowSecurityManager = true;
+ argLength++; // Need to add the argument
+ }
+ }
+ }
+ } catch (CoreException e) {
+ PDELaunchingPlugin.log(e);
+ }
+ if (addModuleSystem || addAllowSecurityManager) {
+ args = Arrays.copyOf(args, argLength);
+ if (addAllowSecurityManager) {
+ args[--argLength] = allowSecurityManager;
+ }
+ if (addModuleSystem) {
+ args[--argLength] = modAllSystem;
+ }
}
if (!isModular) {
ArrayList<String> arrayList = new ArrayList<>(Arrays.asList(args));
@@ -158,7 +188,7 @@
return args;
}
- private boolean argumentContainsModuleSystem(String[] args, String modAllSystem) {
+ private boolean argumentContainsAttribute(String[] args, String modAllSystem) {
for (String string : args) {
if (string.equals(modAllSystem))
return true;