This is an automated email from the ASF dual-hosted git repository.

paulk pushed a commit to branch GROOVY_4_0_X
in repository https://gitbox.apache.org/repos/asf/groovy.git

commit cdc3c9564edbc7240b83c236e8493bc75148d688
Author: Paul King <[email protected]>
AuthorDate: Mon Apr 18 11:02:14 2022 +1000

    GROOVY-10586: Revert "GROOVY-10393: Prepare for deprecation of security 
manager (JEP-411)"
    
    This reverts commit d6e5e54b4a0559178d45d7a1b5d6d47b5974817d.
---
 src/main/java/groovy/grape/Grape.java              |  5 ++--
 src/main/java/groovy/lang/GroovyClassLoader.java   | 14 +++++-----
 src/main/java/groovy/lang/GroovyCodeSource.java    |  4 +--
 src/main/java/groovy/lang/GroovyShell.java         | 16 ++++++------
 src/main/java/groovy/lang/MetaClassImpl.java       |  5 ++--
 src/main/java/groovy/ui/GroovyMain.java            |  4 +--
 src/main/java/groovy/util/GroovyScriptEngine.java  |  6 ++---
 .../internal/util/ReevaluatingReference.java       |  4 +--
 .../codehaus/groovy/control/ProcessingUnit.java    |  4 +--
 .../org/codehaus/groovy/control/SourceUnit.java    |  4 +--
 .../codehaus/groovy/reflection/CachedClass.java    | 10 ++++----
 .../org/codehaus/groovy/reflection/ClassInfo.java  |  3 ++-
 .../reflection/ClassLoaderForClassArtifacts.java   |  4 +--
 .../groovy/reflection/ReflectionUtils.java         |  3 ++-
 .../codehaus/groovy/reflection/SunClassLoader.java |  4 +--
 .../reflection/stdclasses/CachedSAMClass.java      |  4 +--
 .../groovy/runtime/DefaultGroovyMethods.java       |  4 +--
 .../groovy/runtime/ProxyGeneratorAdapter.java      | 30 +++++++++++++---------
 .../groovy/runtime/callsite/CallSiteArray.java     |  5 ++--
 .../runtime/callsite/GroovySunClassLoader.java     |  4 +--
 .../org/codehaus/groovy/tools/GroovyStarter.java   |  5 ++--
 .../groovy/tools/javac/JavacJavaCompiler.java      |  4 +--
 .../org/codehaus/groovy/vmplugin/VMPlugin.java     |  9 +++----
 .../org/codehaus/groovy/vmplugin/v8/Java8.java     | 23 +++++++++--------
 src/test/groovy/security/SecurityTest.java         |  4 +--
 src/test/groovy/security/SecurityTestSupport.java  | 12 ++++-----
 .../apache/groovy/parser/antlr4/TestUtils.groovy   |  6 ++---
 .../org/codehaus/groovy/classgen/TestSupport.java  |  6 ++---
 .../codehaus/groovy/ant/CompileTaskSupport.java    |  4 +--
 .../main/java/org/codehaus/groovy/ant/Groovy.java  |  4 +--
 .../main/java/org/codehaus/groovy/ant/Groovyc.java |  4 +--
 .../org/codehaus/groovy/ant/RootLoaderRef.java     |  4 +--
 .../main/groovy/groovy/console/ui/Console.groovy   | 14 ++++++++++
 .../groovy/jsr223/GroovyScriptEngineImpl.java      |  4 +--
 .../groovy-sql/src/main/java/groovy/sql/Sql.java   |  4 +--
 .../swing/binding/ClosureTriggerBinding.java       |  3 +--
 .../groovy/groovy/text/GStringTemplateEngine.java  |  9 +++++--
 .../groovy/text/StreamingTemplateEngine.java       |  9 +++++--
 .../groovy/text/markup/MarkupTemplateEngine.java   |  6 ++---
 .../src/main/java/groovy/test/AllTestSuite.java    |  4 +--
 .../src/main/java/groovy/test/GroovyTestSuite.java |  5 ++--
 .../src/main/java/groovy/xml/FactorySupport.java   |  5 ++--
 42 files changed, 158 insertions(+), 127 deletions(-)

diff --git a/src/main/java/groovy/grape/Grape.java 
b/src/main/java/groovy/grape/Grape.java
index d3e9289f31..a8dcc88a58 100644
--- a/src/main/java/groovy/grape/Grape.java
+++ b/src/main/java/groovy/grape/Grape.java
@@ -18,10 +18,9 @@
  */
 package groovy.grape;
 
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
-
 import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Collections;
 import java.util.List;
@@ -158,7 +157,7 @@ public class Grape {
 
     public static void grab(final Map<String, Object> args, final Map... 
dependencies) {
         if (enableGrapes) {
-            VMPluginFactory.getPlugin().doPrivileged(new 
PrivilegedAction<Void>() {
+            AccessController.doPrivileged(new PrivilegedAction<Void>() {
                 @Override
                 public Void run() {
                     GrapeEngine instance = getInstance();
diff --git a/src/main/java/groovy/lang/GroovyClassLoader.java 
b/src/main/java/groovy/lang/GroovyClassLoader.java
index f472fb7486..9053b63c86 100644
--- a/src/main/java/groovy/lang/GroovyClassLoader.java
+++ b/src/main/java/groovy/lang/GroovyClassLoader.java
@@ -49,7 +49,6 @@ import org.codehaus.groovy.runtime.memoize.EvictableCache;
 import org.codehaus.groovy.runtime.memoize.StampedCommonCache;
 import org.codehaus.groovy.runtime.memoize.UnlimitedConcurrentCache;
 import org.codehaus.groovy.util.URLStreams;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.Opcodes;
@@ -67,6 +66,7 @@ import java.net.URL;
 import java.net.URLClassLoader;
 import java.net.URLConnection;
 import java.net.URLDecoder;
+import java.security.AccessController;
 import java.security.CodeSource;
 import java.security.NoSuchAlgorithmException;
 import java.security.Permission;
@@ -111,7 +111,7 @@ public class GroovyClassLoader extends URLClassLoader {
     private GroovyResourceLoader resourceLoader = new GroovyResourceLoader() {
         @Override
         public URL loadGroovySource(final String filename) throws 
MalformedURLException {
-            return 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<URL>) () -> {
+            return AccessController.doPrivileged((PrivilegedAction<URL>) () -> 
{
                 for (String extension : config.getScriptExtensions()) {
                     try {
                         URL ret = getSourceFile(filename, extension);
@@ -253,7 +253,7 @@ public class GroovyClassLoader extends URLClassLoader {
      * @return the main class defined in the given script
      */
     public Class parseClass(final String text, final String fileName) throws 
CompilationFailedException {
-        GroovyCodeSource gcs = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<GroovyCodeSource>) 
() -> new GroovyCodeSource(text, fileName, "/groovy/script"));
+        GroovyCodeSource gcs = 
AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) () -> new 
GroovyCodeSource(text, fileName, "/groovy/script"));
         gcs.setCachable(false);
         return parseClass(gcs);
     }
@@ -278,7 +278,7 @@ public class GroovyClassLoader extends URLClassLoader {
     }
 
     public Class parseClass(final Reader reader, final String fileName) throws 
CompilationFailedException {
-        GroovyCodeSource gcs = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<GroovyCodeSource>) 
() -> {
+        GroovyCodeSource gcs = 
AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) () -> {
             try {
                 String scriptText = IOGroovyMethods.getText(reader);
                 return new GroovyCodeSource(scriptText, fileName, 
"/groovy/script");
@@ -426,7 +426,7 @@ public class GroovyClassLoader extends URLClassLoader {
                 perms = new Permissions();
             }
 
-            ProtectionDomain myDomain = 
VMPluginFactory.getPlugin().doPrivileged(new 
PrivilegedAction<ProtectionDomain>() {
+            ProtectionDomain myDomain = AccessController.doPrivileged(new 
PrivilegedAction<ProtectionDomain>() {
                 @Override
                 public ProtectionDomain run() {
                     return getClass().getProtectionDomain();
@@ -644,7 +644,7 @@ public class GroovyClassLoader extends URLClassLoader {
      * @return the ClassCollector
      */
     protected ClassCollector createCollector(CompilationUnit unit, SourceUnit 
su) {
-        InnerLoader loader = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<InnerLoader>) () -> 
new InnerLoader(GroovyClassLoader.this));
+        InnerLoader loader = 
AccessController.doPrivileged((PrivilegedAction<InnerLoader>) () -> new 
InnerLoader(GroovyClassLoader.this));
         return new ClassCollector(loader, unit, su);
     }
 
@@ -1084,7 +1084,7 @@ public class GroovyClassLoader extends URLClassLoader {
      * @see #addURL(URL)
      */
     public void addClasspath(final String path) {
-        VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<Void>) () 
-> {
+        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
 
             URI newURI;
             try {
diff --git a/src/main/java/groovy/lang/GroovyCodeSource.java 
b/src/main/java/groovy/lang/GroovyCodeSource.java
index f5adac93c2..2ca2a8edc0 100644
--- a/src/main/java/groovy/lang/GroovyCodeSource.java
+++ b/src/main/java/groovy/lang/GroovyCodeSource.java
@@ -22,7 +22,6 @@ import groovy.security.GroovyCodeSourcePermission;
 import groovy.util.CharsetToolkit;
 import org.codehaus.groovy.runtime.IOGroovyMethods;
 import org.codehaus.groovy.runtime.ResourceGroovyMethods;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.File;
 import java.io.FileNotFoundException;
@@ -32,6 +31,7 @@ import java.net.MalformedURLException;
 import java.net.URI;
 import java.net.URL;
 import java.net.URLConnection;
+import java.security.AccessController;
 import java.security.CodeSource;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
@@ -123,7 +123,7 @@ public class GroovyCodeSource {
         //The calls below require access to user.dir - allow here since 
getName() and getCodeSource() are
         //package private and used only by the GroovyClassLoader.
         try {
-            Object[] info = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedExceptionAction<Object[]>) 
() -> {
+            Object[] info = 
AccessController.doPrivileged((PrivilegedExceptionAction<Object[]>) () -> {
                 // retrieve the content of the file using the provided encoding
                 if (encoding != null) {
                     scriptText = ResourceGroovyMethods.getText(infile, 
encoding);
diff --git a/src/main/java/groovy/lang/GroovyShell.java 
b/src/main/java/groovy/lang/GroovyShell.java
index fc2b3f7ed5..82ab601a9f 100644
--- a/src/main/java/groovy/lang/GroovyShell.java
+++ b/src/main/java/groovy/lang/GroovyShell.java
@@ -26,7 +26,6 @@ import org.codehaus.groovy.control.CompilationFailedException;
 import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.runtime.InvokerHelper;
 import org.codehaus.groovy.runtime.InvokerInvocationException;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.File;
 import java.io.IOException;
@@ -34,6 +33,7 @@ import java.io.Reader;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.net.URI;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
@@ -100,7 +100,7 @@ public class GroovyShell extends GroovyObjectSupport {
             && ((GroovyClassLoader) 
parentLoader).hasCompatibleConfiguration(config)) {
           this.loader = (GroovyClassLoader) parentLoader;
         } else {
-          this.loader = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<GroovyClassLoader>) 
() -> new GroovyClassLoader(parentLoader,config));
+          this.loader = 
AccessController.doPrivileged((PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(parentLoader,config));
         }
         this.context = binding;
         this.config = config;
@@ -203,13 +203,13 @@ public class GroovyShell extends GroovyObjectSupport {
             }
         }
 
-        VMPluginFactory.getPlugin().doPrivileged(new DoSetContext(loader));
+        AccessController.doPrivileged(new DoSetContext(loader));
 
         // Parse the script, generate the class, and invoke the main method.  
This is a little looser than
         // if you are compiling the script because the JVM isn't executing the 
main method.
         Class scriptClass;
         try {
-            scriptClass = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedExceptionAction<Class>) () 
-> loader.parseClass(scriptFile));
+            scriptClass = 
AccessController.doPrivileged((PrivilegedExceptionAction<Class>) () -> 
loader.parseClass(scriptFile));
         } catch (PrivilegedActionException pae) {
             Exception e = pae.getException();
             if (e instanceof CompilationFailedException) {
@@ -340,7 +340,7 @@ public class GroovyShell extends GroovyObjectSupport {
      * @param args       the command line arguments to pass in
      */
     public Object run(final String scriptText, final String fileName, String[] 
args) throws CompilationFailedException {
-        GroovyCodeSource gcs = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<GroovyCodeSource>) 
() -> new GroovyCodeSource(scriptText, fileName, DEFAULT_CODE_BASE));
+        GroovyCodeSource gcs = 
AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) () -> new 
GroovyCodeSource(scriptText, fileName, DEFAULT_CODE_BASE));
         return run(gcs, args);
     }
 
@@ -404,7 +404,7 @@ public class GroovyShell extends GroovyObjectSupport {
      * @param args     the command line arguments to pass in
      */
     public Object run(final Reader in, final String fileName, String[] args) 
throws CompilationFailedException {
-        GroovyCodeSource gcs = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<GroovyCodeSource>) 
() -> new GroovyCodeSource(in, fileName, DEFAULT_CODE_BASE));
+        GroovyCodeSource gcs = 
AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) () -> new 
GroovyCodeSource(in, fileName, DEFAULT_CODE_BASE));
         Class scriptClass = parseClass(gcs);
         return runScriptOrMainOrTestOrRunnable(scriptClass, args);
     }
@@ -462,7 +462,7 @@ public class GroovyShell extends GroovyObjectSupport {
             sm.checkPermission(new GroovyCodeSourcePermission(codeBase));
         }
 
-        GroovyCodeSource gcs = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<GroovyCodeSource>) 
() -> new GroovyCodeSource(scriptText, fileName, codeBase));
+        GroovyCodeSource gcs = 
AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) () -> new 
GroovyCodeSource(scriptText, fileName, codeBase));
 
         return evaluate(gcs);
     }
@@ -607,7 +607,7 @@ public class GroovyShell extends GroovyObjectSupport {
     }
 
     public Script parse(final String scriptText, final String fileName, 
Binding binding) throws CompilationFailedException {
-        GroovyCodeSource gcs = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<GroovyCodeSource>) 
() -> new GroovyCodeSource(scriptText, fileName, DEFAULT_CODE_BASE));
+        GroovyCodeSource gcs = 
AccessController.doPrivileged((PrivilegedAction<GroovyCodeSource>) () -> new 
GroovyCodeSource(scriptText, fileName, DEFAULT_CODE_BASE));
         return parse(gcs, binding);
     }
 
diff --git a/src/main/java/groovy/lang/MetaClassImpl.java 
b/src/main/java/groovy/lang/MetaClassImpl.java
index 5886578211..d69548268b 100644
--- a/src/main/java/groovy/lang/MetaClassImpl.java
+++ b/src/main/java/groovy/lang/MetaClassImpl.java
@@ -98,6 +98,7 @@ import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Proxy;
 import java.net.URL;
+import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
@@ -3497,9 +3498,9 @@ public class MetaClassImpl implements MetaClass, 
MutableMetaClass {
         //     introspect
         try {
             if (isBeanDerivative(theClass)) {
-                info = (BeanInfo) 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedExceptionAction) () -> 
Introspector.getBeanInfo(theClass, Introspector.IGNORE_ALL_BEANINFO));
+                info = (BeanInfo) 
AccessController.doPrivileged((PrivilegedExceptionAction) () -> 
Introspector.getBeanInfo(theClass, Introspector.IGNORE_ALL_BEANINFO));
             } else {
-                info = (BeanInfo) 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedExceptionAction) () -> 
Introspector.getBeanInfo(theClass));
+                info = (BeanInfo) 
AccessController.doPrivileged((PrivilegedExceptionAction) () -> 
Introspector.getBeanInfo(theClass));
             }
         } catch (PrivilegedActionException pae) {
             throw new GroovyRuntimeException("exception during bean 
introspection", pae.getException());
diff --git a/src/main/java/groovy/ui/GroovyMain.java 
b/src/main/java/groovy/ui/GroovyMain.java
index 643fb10dff..10cd8b0ab6 100644
--- a/src/main/java/groovy/ui/GroovyMain.java
+++ b/src/main/java/groovy/ui/GroovyMain.java
@@ -33,7 +33,6 @@ import org.codehaus.groovy.runtime.InvokerInvocationException;
 import org.codehaus.groovy.runtime.ResourceGroovyMethods;
 import org.codehaus.groovy.runtime.StackTraceUtils;
 import org.codehaus.groovy.runtime.StringGroovyMethods;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import picocli.CommandLine;
 import picocli.CommandLine.Command;
 import picocli.CommandLine.IVersionProvider;
@@ -55,6 +54,7 @@ import java.math.BigInteger;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
@@ -527,7 +527,7 @@ public class GroovyMain {
             }
         }
 
-        VMPluginFactory.getPlugin().doPrivileged(new 
DoSetContext(shell.getClassLoader()));
+        AccessController.doPrivileged(new 
DoSetContext(shell.getClassLoader()));
     }
 
     /**
diff --git a/src/main/java/groovy/util/GroovyScriptEngine.java 
b/src/main/java/groovy/util/GroovyScriptEngine.java
index f80d771fcd..f4bbd58f84 100644
--- a/src/main/java/groovy/util/GroovyScriptEngine.java
+++ b/src/main/java/groovy/util/GroovyScriptEngine.java
@@ -37,7 +37,6 @@ import org.codehaus.groovy.runtime.IOGroovyMethods;
 import org.codehaus.groovy.runtime.InvokerHelper;
 import org.codehaus.groovy.tools.gse.DependencyTracker;
 import org.codehaus.groovy.tools.gse.StringSetMap;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.BufferedReader;
 import java.io.File;
@@ -48,6 +47,7 @@ import java.lang.ref.WeakReference;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLConnection;
+import java.security.AccessController;
 import java.security.CodeSource;
 import java.security.PrivilegedAction;
 import java.util.HashMap;
@@ -61,7 +61,7 @@ import java.util.concurrent.ConcurrentHashMap;
  * with dependent scripts.
  */
 public class GroovyScriptEngine implements ResourceConnector {
-    private static final ClassLoader CL_STUB = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<ClassLoader>) () -> 
new ClassLoader() {});
+    private static final ClassLoader CL_STUB = 
AccessController.doPrivileged((PrivilegedAction<ClassLoader>) () -> new 
ClassLoader() {});
 
     private static final URL[] EMPTY_URL_ARRAY = new URL[0];
 
@@ -339,7 +339,7 @@ public class GroovyScriptEngine implements 
ResourceConnector {
      */
     private GroovyClassLoader initGroovyLoader() {
         GroovyClassLoader groovyClassLoader =
-                
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<ScriptClassLoader>) 
() -> {
+                
AccessController.doPrivileged((PrivilegedAction<ScriptClassLoader>) () -> {
                     if (parentLoader instanceof GroovyClassLoader) {
                         return new ScriptClassLoader((GroovyClassLoader) 
parentLoader);
                     } else {
diff --git 
a/src/main/java/org/apache/groovy/internal/util/ReevaluatingReference.java 
b/src/main/java/org/apache/groovy/internal/util/ReevaluatingReference.java
index 3010f054e9..255e97bf40 100644
--- a/src/main/java/org/apache/groovy/internal/util/ReevaluatingReference.java
+++ b/src/main/java/org/apache/groovy/internal/util/ReevaluatingReference.java
@@ -21,13 +21,13 @@ package org.apache.groovy.internal.util;
 
 import org.apache.groovy.lang.annotation.Incubating;
 import org.codehaus.groovy.GroovyBugError;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.invoke.MethodType;
 import java.lang.invoke.SwitchPoint;
 import java.lang.ref.WeakReference;
+import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 
@@ -41,7 +41,7 @@ public class ReevaluatingReference<T> {
     static {
         try {
             //TODO Jochen: move the findSpecial to a central place together 
with others to easy security configuration
-            FALLBACK_HANDLE = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedExceptionAction<MethodHandle>)
 () -> MethodHandles.lookup().findSpecial(
+            FALLBACK_HANDLE = 
AccessController.doPrivileged((PrivilegedExceptionAction<MethodHandle>) () -> 
MethodHandles.lookup().findSpecial(
                     ReevaluatingReference.class, "replacePayLoad",
                     MethodType.methodType(Object.class),
                     ReevaluatingReference.class));
diff --git a/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java 
b/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java
index 25ba755bf1..0b12ebf75e 100644
--- a/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/ProcessingUnit.java
@@ -19,8 +19,8 @@
 package org.codehaus.groovy.control;
 
 import groovy.lang.GroovyClassLoader;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 
 import static java.util.Objects.requireNonNull;
@@ -100,7 +100,7 @@ public abstract class ProcessingUnit {
     public void setClassLoader(final GroovyClassLoader loader) {
         // ClassLoaders should only be created inside a doPrivileged block in 
case
         // this method is invoked by code that does not have security 
permissions.
-        this.classLoader = loader != null ? loader : 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<GroovyClassLoader>) 
() -> {
+        this.classLoader = loader != null ? loader : 
AccessController.doPrivileged((PrivilegedAction<GroovyClassLoader>) () -> {
             ClassLoader parent = 
Thread.currentThread().getContextClassLoader();
             if (parent == null) parent = ProcessingUnit.class.getClassLoader();
             return new GroovyClassLoader(parent, getConfiguration());
diff --git a/src/main/java/org/codehaus/groovy/control/SourceUnit.java 
b/src/main/java/org/codehaus/groovy/control/SourceUnit.java
index 65ccf6c038..703a803043 100644
--- a/src/main/java/org/codehaus/groovy/control/SourceUnit.java
+++ b/src/main/java/org/codehaus/groovy/control/SourceUnit.java
@@ -32,12 +32,12 @@ import 
org.codehaus.groovy.control.messages.SyntaxErrorMessage;
 import org.codehaus.groovy.syntax.Reduction;
 import org.codehaus.groovy.syntax.SyntaxException;
 import org.codehaus.groovy.tools.Utilities;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.File;
 import java.io.IOException;
 import java.io.Reader;
 import java.net.URL;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 
 /**
@@ -237,7 +237,7 @@ public class SourceUnit extends ProcessingUnit {
 
         buildAST();
 
-        if 
("xml".equals(VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<String>)
 () -> System.getProperty("groovy.ast")))) {
+        if 
("xml".equals(AccessController.doPrivileged((PrivilegedAction<String>) () -> 
System.getProperty("groovy.ast")))) {
             XStreamUtils.serialize(name, ast);
         }
     }
diff --git a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java 
b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
index 647e98f6d8..866692de48 100644
--- a/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
+++ b/src/main/java/org/codehaus/groovy/reflection/CachedClass.java
@@ -30,8 +30,8 @@ import org.codehaus.groovy.runtime.metaclass.ClosureMetaClass;
 import org.codehaus.groovy.util.FastArray;
 import org.codehaus.groovy.util.LazyReference;
 import org.codehaus.groovy.util.ReferenceBundle;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -57,7 +57,7 @@ public class CachedClass {
             PrivilegedAction<CachedField[]> action = () -> 
Arrays.stream(getTheClass().getDeclaredFields())
                 .filter(f -> ReflectionUtils.checkCanSetAccessible(f, 
CachedClass.class))
                 .map(CachedField::new).toArray(CachedField[]::new);
-            return VMPluginFactory.getPlugin().doPrivileged(action);
+            return AccessController.doPrivileged(action);
         }
     };
 
@@ -71,7 +71,7 @@ public class CachedClass {
                 .filter(c -> ReflectionUtils.checkCanSetAccessible(c, 
CachedClass.class))
                 .map(c -> new CachedConstructor(CachedClass.this, c))
                 .toArray(CachedConstructor[]::new);
-            return VMPluginFactory.getPlugin().doPrivileged(action);
+            return AccessController.doPrivileged(action);
         }
     };
 
@@ -91,7 +91,7 @@ public class CachedClass {
                     return CachedMethod.EMPTY_ARRAY;
                 }
             };
-            CachedMethod[] declaredMethods = 
VMPluginFactory.getPlugin().doPrivileged(action);
+            CachedMethod[] declaredMethods = 
AccessController.doPrivileged(action);
 
             List<CachedMethod> methods = new 
ArrayList<>(declaredMethods.length);
             List<CachedMethod> mopMethods = new 
ArrayList<>(declaredMethods.length);
@@ -139,7 +139,7 @@ public class CachedClass {
 
         @Override
         public CallSiteClassLoader initValue() {
-            return 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<CallSiteClassLoader>)
 () -> new CallSiteClassLoader(CachedClass.this.cachedClass));
+            return 
AccessController.doPrivileged((PrivilegedAction<CallSiteClassLoader>) () -> new 
CallSiteClassLoader(CachedClass.this.cachedClass));
         }
     };
 
diff --git a/src/main/java/org/codehaus/groovy/reflection/ClassInfo.java 
b/src/main/java/org/codehaus/groovy/reflection/ClassInfo.java
index f5faf72483..b4b4f6d238 100644
--- a/src/main/java/org/codehaus/groovy/reflection/ClassInfo.java
+++ b/src/main/java/org/codehaus/groovy/reflection/ClassInfo.java
@@ -54,6 +54,7 @@ import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import java.lang.ref.WeakReference;
 import java.math.BigDecimal;
 import java.math.BigInteger;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Collection;
 import java.util.Iterator;
@@ -449,7 +450,7 @@ public class ClassInfo implements Finalizable {
 
         @Override
         public ClassLoaderForClassArtifacts initValue() {
-            return 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<ClassLoaderForClassArtifacts>)
 () -> new ClassLoaderForClassArtifacts(info.classRef.get()));
+            return 
AccessController.doPrivileged((PrivilegedAction<ClassLoaderForClassArtifacts>) 
() -> new ClassLoaderForClassArtifacts(info.classRef.get()));
         }
     }
 
diff --git 
a/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
 
b/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
index e01ee59d16..4995c58ea2 100644
--- 
a/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
+++ 
b/src/main/java/org/codehaus/groovy/reflection/ClassLoaderForClassArtifacts.java
@@ -22,11 +22,11 @@ import groovy.lang.MetaClassImpl;
 import groovy.lang.MetaMethod;
 import org.codehaus.groovy.runtime.callsite.CallSite;
 import org.codehaus.groovy.runtime.callsite.GroovySunClassLoader;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.lang.ref.SoftReference;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.concurrent.atomic.AtomicInteger;
 
@@ -76,7 +76,7 @@ public class ClassLoaderForClassArtifacts extends ClassLoader 
{
     }
 
     public Constructor defineClassAndGetConstructor(final String name, final 
byte[] bytes) {
-        final Class cls = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<Class>) () -> 
define(name, bytes));
+        final Class cls = 
AccessController.doPrivileged((PrivilegedAction<Class>) () -> define(name, 
bytes));
 
         if (cls != null) {
             try {
diff --git a/src/main/java/org/codehaus/groovy/reflection/ReflectionUtils.java 
b/src/main/java/org/codehaus/groovy/reflection/ReflectionUtils.java
index 2510911b3e..f14a2aca65 100644
--- a/src/main/java/org/codehaus/groovy/reflection/ReflectionUtils.java
+++ b/src/main/java/org/codehaus/groovy/reflection/ReflectionUtils.java
@@ -28,6 +28,7 @@ import java.lang.invoke.MethodType;
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Array;
 import java.lang.reflect.Method;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -206,7 +207,7 @@ public class ReflectionUtils {
     }
 
     public static Optional<AccessibleObject> 
makeAccessibleInPrivilegedAction(final AccessibleObject ao) {
-        return 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<Optional<AccessibleObject>>)
 () -> makeAccessible(ao));
+        return 
AccessController.doPrivileged((PrivilegedAction<Optional<AccessibleObject>>) () 
-> makeAccessible(ao));
     }
 
     // to be run in PrivilegedAction!
diff --git a/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java 
b/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
index e1c6a571a7..2c78c968f9 100644
--- a/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
+++ b/src/main/java/org/codehaus/groovy/reflection/SunClassLoader.java
@@ -19,13 +19,13 @@
 package org.codehaus.groovy.reflection;
 
 import org.codehaus.groovy.control.CompilerConfiguration;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import org.objectweb.asm.ClassReader;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.MethodVisitor;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.HashMap;
 import java.util.Map;
@@ -46,7 +46,7 @@ public class SunClassLoader extends ClassLoader {
     static {
         SunClassLoader res;
         try {
-            res = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<SunClassLoader>) () 
-> {
+            res = 
AccessController.doPrivileged((PrivilegedAction<SunClassLoader>) () -> {
                 try {
                     return new SunClassLoader();
                 } catch (Throwable e) {
diff --git 
a/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java 
b/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java
index 7941235eb8..4800461a33 100644
--- 
a/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java
+++ 
b/src/main/java/org/codehaus/groovy/reflection/stdclasses/CachedSAMClass.java
@@ -26,11 +26,11 @@ import org.codehaus.groovy.reflection.ClassInfo;
 import org.codehaus.groovy.reflection.ReflectionCache;
 import org.codehaus.groovy.runtime.ConvertedClosure;
 import org.codehaus.groovy.transform.trait.Traits;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
 import java.lang.reflect.Proxy;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Arrays;
 import java.util.Collections;
@@ -103,7 +103,7 @@ public class CachedSAMClass extends CachedClass {
     @SuppressWarnings("removal") // TODO a future Groovy version should remove 
the security check
     private static Method[] getDeclaredMethods(final Class c) {
         try {
-            Method[] methods = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<Method[]>) 
c::getDeclaredMethods);
+            Method[] methods = 
AccessController.doPrivileged((PrivilegedAction<Method[]>) 
c::getDeclaredMethods);
             if (methods!=null) return methods;
         } catch (java.security.AccessControlException ace) {
             // swallow and do as if no method is available
diff --git 
a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java 
b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
index fcc75a2745..b25ca8e4aa 100644
--- a/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
+++ b/src/main/java/org/codehaus/groovy/runtime/DefaultGroovyMethods.java
@@ -109,7 +109,6 @@ import org.codehaus.groovy.util.ListBufferedIterator;
 import org.codehaus.groovy.util.LongArrayIterable;
 import org.codehaus.groovy.util.LongArrayIterator;
 import org.codehaus.groovy.util.ShortArrayIterator;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
@@ -126,6 +125,7 @@ import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.math.RoundingMode;
 import java.net.URL;
+import java.security.AccessController;
 import java.security.CodeSource;
 import java.security.PrivilegedAction;
 import java.text.MessageFormat;
@@ -462,7 +462,7 @@ public class DefaultGroovyMethods extends 
DefaultGroovyMethodsSupport {
                     if (groovyObject && field.getName().equals("metaClass")) {
                         continue;
                     }
-                    
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<Object>) () -> {
+                    AccessController.doPrivileged((PrivilegedAction<Object>) 
() -> {
                         ReflectionUtils.trySetAccessible(field);
                         return null;
                     });
diff --git 
a/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java 
b/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
index 5a3d3804bb..16beccdabd 100644
--- a/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
+++ b/src/main/java/org/codehaus/groovy/runtime/ProxyGeneratorAdapter.java
@@ -34,7 +34,6 @@ import org.codehaus.groovy.control.Phases;
 import org.codehaus.groovy.control.SourceUnit;
 import org.codehaus.groovy.tools.GroovyClass;
 import org.codehaus.groovy.transform.trait.Traits;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.ClassWriter;
 import org.objectweb.asm.Label;
@@ -45,6 +44,7 @@ import java.lang.reflect.Constructor;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -134,11 +134,11 @@ public class ProxyGeneratorAdapter extends ClassVisitor {
     private static final String[] EMPTY_STRING_ARRAY = new String[0];
 
     static {
-        List<String> names = new ArrayList<String>();
+        List<String> names = new ArrayList<>();
         for (Method method : GroovyObject.class.getMethods()) {
             names.add(method.getName());
         }
-        GROOVYOBJECT_METHOD_NAMESS = new HashSet<String>(names);
+        GROOVYOBJECT_METHOD_NAMESS = new HashSet<>(names);
     }
 
     private final Class<?> superClass;
@@ -181,8 +181,8 @@ public class ProxyGeneratorAdapter extends ClassVisitor {
             final Class delegateClass) {
         super(ASM_API_VERSION, new ClassWriter(ClassWriter.COMPUTE_MAXS | 
ClassWriter.COMPUTE_FRAMES));
         this.loader = proxyLoader != null ? createInnerLoader(proxyLoader, 
interfaces) : findClassLoader(superClass, interfaces);
-        this.visitedMethods = new LinkedHashSet<Object>();
-        this.delegatedClosures = closureMap.isEmpty() ? 
EMPTY_DELEGATECLOSURE_MAP : new HashMap<String, Boolean>();
+        this.visitedMethods = new LinkedHashSet<>();
+        this.delegatedClosures = closureMap.isEmpty() ? 
EMPTY_DELEGATECLOSURE_MAP : new HashMap<>();
         boolean wildcard = false;
         for (Map.Entry<Object, Object> entry : closureMap.entrySet()) {
             String name = entry.getKey().toString();
@@ -286,8 +286,14 @@ public class ProxyGeneratorAdapter extends ClassVisitor {
         return traits;
     }
 
+    @SuppressWarnings("removal") // TODO a future Groovy version should create 
the loader not as a privileged action
+    private GroovyClassLoader createClassLoader(ClassLoader parentLoader) {
+        return 
AccessController.doPrivileged((PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(parentLoader));
+    }
+
+    @SuppressWarnings("removal") // TODO a future Groovy version should create 
the loader not as a privileged action
     private static InnerLoader createInnerLoader(final ClassLoader parent, 
final Class<?>[] interfaces) {
-        return 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<InnerLoader>) () -> 
new InnerLoader(parent, interfaces));
+        return AccessController.doPrivileged((PrivilegedAction<InnerLoader>) 
() -> new InnerLoader(parent, interfaces));
     }
 
     private InnerLoader findClassLoader(final Class<?> clazz, final Class<?>[] 
interfaces) {
@@ -297,9 +303,9 @@ public class ProxyGeneratorAdapter extends ClassVisitor {
     }
 
     private static Set<String> createDelegateMethodList(final Class<?> 
superClass, final Class<?> delegateClass, final Class<?>[] interfaces) {
-        Set<String> selectedMethods = new HashSet<String>();
-        List<Method> interfaceMethods = new ArrayList<Method>();
-        List<Method> superClassMethods = new ArrayList<Method>();
+        Set<String> selectedMethods = new HashSet<>();
+        List<Method> interfaceMethods = new ArrayList<>();
+        List<Method> superClassMethods = new ArrayList<>();
         Collections.addAll(superClassMethods, superClass.getDeclaredMethods());
         if (interfaces != null) {
             for (Class<?> thisInterface : interfaces) {
@@ -311,7 +317,7 @@ public class ProxyGeneratorAdapter extends ClassVisitor {
                 }
             }
         }
-        List<Method> additionalMethods = getInheritedMethods(delegateClass, 
new ArrayList<Method>());
+        List<Method> additionalMethods = getInheritedMethods(delegateClass, 
new ArrayList<>());
         for (Method method : additionalMethods) {
             if (method.getName().indexOf('$') != -1)
                 continue;
@@ -363,7 +369,7 @@ public class ProxyGeneratorAdapter extends ClassVisitor {
 
     @Override
     public void visit(final int version, final int access, final String name, 
final String signature, final String superName, final String[] interfaces) {
-        Set<String> interfacesSet = new LinkedHashSet<String>();
+        Set<String> interfacesSet = new LinkedHashSet<>();
         if (interfaces != null) Collections.addAll(interfacesSet, interfaces);
         for (Class<?> extraInterface : classList) {
             if (extraInterface.isInterface()) 
interfacesSet.add(BytecodeHelper.getClassInternalName(extraInterface));
@@ -865,7 +871,7 @@ public class ProxyGeneratorAdapter extends ClassVisitor {
                 for (Class<?> c : interfaces) {
                     if (c.getClassLoader() != parent) {
                         if (internalClassLoaders == null)
-                            internalClassLoaders = new 
ArrayList<ClassLoader>(interfaces.length);
+                            internalClassLoaders = new 
ArrayList<>(interfaces.length);
                         if 
(!internalClassLoaders.contains(c.getClassLoader())) {
                             internalClassLoaders.add(c.getClassLoader());
                         }
diff --git 
a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java 
b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
index 22de80c2c4..5fe58fbae8 100644
--- a/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
+++ b/src/main/java/org/codehaus/groovy/runtime/callsite/CallSiteArray.java
@@ -25,11 +25,12 @@ import groovy.lang.MetaClassImpl;
 import org.codehaus.groovy.reflection.ClassInfo;
 import org.codehaus.groovy.runtime.GroovyCategorySupport;
 import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.stream.IntStream;
 
+
 public final class CallSiteArray {
     public static final Object[] NOPARAM = new Object[0];
     public final CallSite[] array;
@@ -59,7 +60,7 @@ public final class CallSiteArray {
     }
 
     private static CallSite createCallStaticSite(CallSite callSite, final 
Class receiver, Object[] args) {
-        VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<Void>) () 
-> {
+        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
             try {
                 Class.forName(receiver.getName(), true, 
receiver.getClassLoader());
             } catch (Exception e) {
diff --git 
a/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java 
b/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
index dcb9bce9b3..d16dcc97d1 100644
--- 
a/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
+++ 
b/src/main/java/org/codehaus/groovy/runtime/callsite/GroovySunClassLoader.java
@@ -19,13 +19,13 @@
 package org.codehaus.groovy.runtime.callsite;
 
 import org.codehaus.groovy.reflection.SunClassLoader;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import org.objectweb.asm.ClassReader;
 import org.objectweb.asm.ClassVisitor;
 import org.objectweb.asm.ClassWriter;
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 
 import static 
org.codehaus.groovy.control.CompilerConfiguration.ASM_API_VERSION;
@@ -35,7 +35,7 @@ public class GroovySunClassLoader extends SunClassLoader {
     public static final SunClassLoader sunVM;
 
     static {
-        sunVM = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<SunClassLoader>) () 
-> {
+        sunVM = 
AccessController.doPrivileged((PrivilegedAction<SunClassLoader>) () -> {
             try {
                 if (SunClassLoader.sunVM != null) {
                     return new GroovySunClassLoader();
diff --git a/src/main/java/org/codehaus/groovy/tools/GroovyStarter.java 
b/src/main/java/org/codehaus/groovy/tools/GroovyStarter.java
index 21e7001ff8..4bffd7237b 100644
--- a/src/main/java/org/codehaus/groovy/tools/GroovyStarter.java
+++ b/src/main/java/org/codehaus/groovy/tools/GroovyStarter.java
@@ -18,11 +18,10 @@
  */
 package org.codehaus.groovy.tools;
 
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
-
 import java.io.FileInputStream;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 
 /**
@@ -100,7 +99,7 @@ public class GroovyStarter {
             }
         }
         // create loader and execute main class
-        ClassLoader loader = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<RootLoader>) () -> 
new RootLoader(lc));
+        ClassLoader loader = 
AccessController.doPrivileged((PrivilegedAction<RootLoader>) () -> new 
RootLoader(lc));
         Method m=null;
         try {
             Class c = loader.loadClass(lc.getMainClass());
diff --git 
a/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java 
b/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java
index 1e66bcc39a..c654cdf8e6 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavacJavaCompiler.java
@@ -27,7 +27,6 @@ import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.control.messages.ExceptionMessage;
 import org.codehaus.groovy.control.messages.SimpleMessage;
 import org.codehaus.groovy.runtime.DefaultGroovyMethods;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.File;
 import java.io.IOException;
@@ -35,6 +34,7 @@ import java.net.URISyntaxException;
 import java.net.URL;
 import java.net.URLClassLoader;
 import java.nio.charset.Charset;
+import java.security.AccessController;
 import java.security.CodeSource;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
@@ -189,7 +189,7 @@ public class JavacJavaCompiler implements JavaCompiler {
             }
 
             try {
-                CodeSource codeSource = 
VMPluginFactory.getPlugin().doPrivileged(
+                CodeSource codeSource = AccessController.doPrivileged(
                         (PrivilegedAction<CodeSource>) () -> 
GroovyObject.class.getProtectionDomain().getCodeSource());
                 if (codeSource != null) {
                     paths.add(new 
File(codeSource.getLocation().toURI()).getPath());
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java 
b/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java
index a3c62ab979..3ba797e91c 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/VMPlugin.java
@@ -29,9 +29,6 @@ import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Method;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
 import java.util.Collections;
 import java.util.Map;
 import java.util.Set;
@@ -149,7 +146,8 @@ public interface VMPlugin {
      * @param <T> the type of the value returned by the PrivilegedAction's run 
method
      * @return the value returned by the action's run method
      */
-    <T> T doPrivileged(PrivilegedAction<T> action);
+    @Deprecated
+    <T> T doPrivileged(java.security.PrivilegedAction<T> action);
 
     /**
      * Performs the specified PrivilegedExceptionAction with privileges 
enabled on platforms
@@ -159,7 +157,8 @@ public interface VMPlugin {
      * @param <T> the type of the value returned by the PrivilegedAction's run 
method
      * @return the value returned by the action's run method
      */
-    <T> T doPrivileged(PrivilegedExceptionAction<T> action) throws 
PrivilegedActionException;
+    @Deprecated
+    <T> T doPrivileged(java.security.PrivilegedExceptionAction<T> action) 
throws java.security.PrivilegedActionException;
 
     /**
      * transform meta method.
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java 
b/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
index cf015f3657..77f5a6a401 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
@@ -68,9 +68,6 @@ import java.lang.reflect.TypeVariable;
 import java.lang.reflect.WildcardType;
 import java.security.AccessController;
 import java.security.Permission;
-import java.security.PrivilegedAction;
-import java.security.PrivilegedActionException;
-import java.security.PrivilegedExceptionAction;
 import java.util.Arrays;
 import java.util.List;
 import java.util.Optional;
@@ -624,18 +621,22 @@ public class Java8 implements VMPlugin {
     }
 
     @Override
-    public <T> T doPrivileged(PrivilegedAction<T> action) {
-        return AccessController.doPrivileged(action);
+    public MetaMethod transformMetaMethod(final MetaClass metaClass, final 
MetaMethod metaMethod, final Class<?> caller) {
+        return metaMethod;
     }
 
     @Override
-    public <T> T doPrivileged(PrivilegedExceptionAction<T> action) throws 
PrivilegedActionException {
-        return AccessController.doPrivileged(action);
+    @Deprecated
+    @SuppressWarnings("removal") // TODO a future Groovy version will remove 
this method
+    public <T> T doPrivileged(java.security.PrivilegedAction<T> action) {
+        throw new UnsupportedOperationException("doPrivileged is no longer 
supported");
     }
 
     @Override
-    public MetaMethod transformMetaMethod(final MetaClass metaClass, final 
MetaMethod metaMethod, final Class<?> caller) {
-        return metaMethod;
+    @Deprecated
+    @SuppressWarnings("removal") // TODO a future Groovy version will remove 
this method
+    public <T> T doPrivileged(java.security.PrivilegedExceptionAction<T> 
action) throws java.security.PrivilegedActionException {
+        throw new UnsupportedOperationException("doPrivileged is no longer 
supported");
     }
 
     @Override
@@ -669,7 +670,7 @@ public class Java8 implements VMPlugin {
 
     private Object getInvokeSpecialHandleFallback(final Method method, final 
Object receiver) {
         if (!method.isAccessible()) {
-            AccessController.doPrivileged((PrivilegedAction<Object>) () -> {
+            
AccessController.doPrivileged((java.security.PrivilegedAction<Object>) () -> {
                 ReflectionUtils.trySetAccessible(method);
                 return null;
             });
@@ -714,7 +715,7 @@ public class Java8 implements VMPlugin {
             try {
                 if (!lookup.isAccessible()) {
                     final Constructor<MethodHandles.Lookup> finalReference = 
lookup;
-                    AccessController.doPrivileged((PrivilegedAction<Object>) 
() -> {
+                    
AccessController.doPrivileged((java.security.PrivilegedAction<Object>) () -> {
                         ReflectionUtils.trySetAccessible(finalReference);
                         return null;
                     });
diff --git a/src/test/groovy/security/SecurityTest.java 
b/src/test/groovy/security/SecurityTest.java
index 53c51db997..cae37ec757 100644
--- a/src/test/groovy/security/SecurityTest.java
+++ b/src/test/groovy/security/SecurityTest.java
@@ -20,12 +20,12 @@ package groovy.security;
 
 import groovy.lang.GroovyCodeSource;
 import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import org.junit.Ignore;
 
 import java.io.File;
 import java.io.IOException;
 import java.net.URL;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.security.Security;
 import java.util.PropertyPermission;
@@ -63,7 +63,7 @@ public class SecurityTest extends SecurityTestSupport {
         // Use our privileged access in order to prevent checks lower in the 
call stack.  Otherwise we would have
         // to grant access to IDE unit test runners and unit test libs.  We 
only care about testing the call stack
         // higher upstream from this point of execution.
-        VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<Void>) () 
-> {
+        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
             Security.setProperty("package.access", "javax.print");
             return null;
         });
diff --git a/src/test/groovy/security/SecurityTestSupport.java 
b/src/test/groovy/security/SecurityTestSupport.java
index 719c621656..be33f9fdd6 100644
--- a/src/test/groovy/security/SecurityTestSupport.java
+++ b/src/test/groovy/security/SecurityTestSupport.java
@@ -29,12 +29,12 @@ import junit.framework.TestResult;
 import junit.framework.TestSuite;
 import junit.textui.ResultPrinter;
 import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintStream;
 import java.security.AccessControlException;
+import java.security.AccessController;
 import java.security.Permission;
 import java.security.Policy;
 import java.security.PrivilegedAction;
@@ -92,7 +92,7 @@ public abstract class SecurityTestSupport extends 
GroovyTestCase {
     }
 
     protected GroovyClassLoader loader =
-            VMPluginFactory.getPlugin().doPrivileged(
+            AccessController.doPrivileged(
                     (PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(SecurityTestSupport.class.getClassLoader())
             );
 
@@ -132,7 +132,7 @@ public abstract class SecurityTestSupport extends 
GroovyTestCase {
             }
         }
         currentClassLoader = Thread.currentThread().getContextClassLoader();
-        VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction) () -> {
+        AccessController.doPrivileged((PrivilegedAction) () -> {
             Thread.currentThread().setUncaughtExceptionHandler(new 
Thread.UncaughtExceptionHandler() {
                 @Override
                 public void uncaughtException(Thread t, Throwable e) {
@@ -145,7 +145,7 @@ public abstract class SecurityTestSupport extends 
GroovyTestCase {
     }
 
     protected void tearDown() {
-        VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction) () -> {
+        AccessController.doPrivileged((PrivilegedAction) () -> {
             System.setSecurityManager(securityManager);
             Thread.currentThread().setContextClassLoader(currentClassLoader);
             return null;
@@ -271,7 +271,7 @@ public abstract class SecurityTestSupport extends 
GroovyTestCase {
         // Use our privileged access in order to prevent checks lower in the 
call stack.  Otherwise we would have
         // to grant access to IDE unit test runners and unit test libs.  We 
only care about testing the call stack
         // higher upstream from this point of execution.
-        VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<Void>) () 
-> {
+        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
             GroovyCodeSource gcs = null;
             try {
                 gcs = new GroovyCodeSource(file);
@@ -296,7 +296,7 @@ public abstract class SecurityTestSupport extends 
GroovyTestCase {
         // Use our privileged access in order to prevent checks lower in the 
call stack.  Otherwise we would have
         // to grant access to IDE unit test runners and unit test libs.  We 
only care about testing the call stack
         // higher upstream from this point of execution.
-        VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<Void>) () 
-> {
+        AccessController.doPrivileged((PrivilegedAction<Void>) () -> {
             parseAndExecute(new GroovyCodeSource(scriptStr, 
generateClassName(), effectiveCodeBase), missingPermission);
             return null;
         });
diff --git a/src/test/org/apache/groovy/parser/antlr4/TestUtils.groovy 
b/src/test/org/apache/groovy/parser/antlr4/TestUtils.groovy
index 125562a242..c8aae4bc70 100644
--- a/src/test/org/apache/groovy/parser/antlr4/TestUtils.groovy
+++ b/src/test/org/apache/groovy/parser/antlr4/TestUtils.groovy
@@ -46,8 +46,8 @@ import org.codehaus.groovy.control.ParserPlugin
 import org.codehaus.groovy.control.ParserPluginFactory
 import org.codehaus.groovy.control.SourceUnit
 import org.codehaus.groovy.syntax.Token
-import org.codehaus.groovy.vmplugin.VMPluginFactory
 
+import java.security.AccessController
 import java.security.PrivilegedAction
 import java.util.zip.ZipEntry
 import java.util.zip.ZipFile
@@ -222,7 +222,7 @@ final class TestUtils {
     }
 
     private static ModuleNode buildAST(File sourceFile, CompilerConfiguration 
config) {
-        def loader = VMPluginFactory.getPlugin().doPrivileged({ ->
+        def loader = AccessController.doPrivileged({ ->
             new GroovyClassLoader()
         } as PrivilegedAction<GroovyClassLoader>)
 
@@ -242,7 +242,7 @@ final class TestUtils {
     }
 
     private static ModuleNode buildAST(String sourceText, 
CompilerConfiguration config) {
-        def loader = VMPluginFactory.getPlugin().doPrivileged({ ->
+        def loader = AccessController.doPrivileged({ ->
             new GroovyClassLoader()
         } as PrivilegedAction<GroovyClassLoader>)
 
diff --git 
a/src/testFixtures/groovy/org/codehaus/groovy/classgen/TestSupport.java 
b/src/testFixtures/groovy/org/codehaus/groovy/classgen/TestSupport.java
index d882724a6c..0f60cca183 100644
--- a/src/testFixtures/groovy/org/codehaus/groovy/classgen/TestSupport.java
+++ b/src/testFixtures/groovy/org/codehaus/groovy/classgen/TestSupport.java
@@ -34,7 +34,6 @@ import org.codehaus.groovy.ast.expr.MethodCallExpression;
 import org.codehaus.groovy.ast.stmt.ExpressionStatement;
 import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import org.junit.Ignore;
 import org.objectweb.asm.Opcodes;
 
@@ -45,6 +44,7 @@ import java.io.File;
 import java.lang.reflect.Field;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 
 /**
@@ -57,7 +57,7 @@ public class TestSupport extends GroovyTestCase implements 
Opcodes {
 
     final ClassLoader parentLoader = getClass().getClassLoader();
     protected final GroovyClassLoader loader =
-            VMPluginFactory.getPlugin().doPrivileged(
+            AccessController.doPrivileged(
                     (PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(parentLoader)
             );
     final CompileUnit unit = new CompileUnit(loader, new 
CompilerConfiguration());
@@ -137,7 +137,7 @@ public class TestSupport extends GroovyTestCase implements 
Opcodes {
     protected void assertScript(final String text, final String scriptName) 
throws Exception {
         log.info("About to execute script");
         log.info(text);
-        GroovyCodeSource gcs = VMPluginFactory.getPlugin().doPrivileged(
+        GroovyCodeSource gcs = AccessController.doPrivileged(
                 (PrivilegedAction<GroovyCodeSource>) () -> new 
GroovyCodeSource(text, scriptName, "/groovy/testSupport")
         );
         Class<?> groovyClass = loader.parseClass(gcs);
diff --git 
a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/CompileTaskSupport.java
 
b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/CompileTaskSupport.java
index 24523c3325..56ba6949f2 100644
--- 
a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/CompileTaskSupport.java
+++ 
b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/CompileTaskSupport.java
@@ -26,11 +26,11 @@ import org.apache.tools.ant.types.Path;
 import org.apache.tools.ant.types.Reference;
 import org.codehaus.groovy.control.CompilerConfiguration;
 import org.codehaus.groovy.tools.ErrorReporter;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.File;
 import java.io.PrintWriter;
 import java.io.Writer;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 
 /**
@@ -136,7 +136,7 @@ public abstract class CompileTaskSupport
 
     protected GroovyClassLoader createClassLoader() {
         GroovyClassLoader gcl =
-                VMPluginFactory.getPlugin().doPrivileged(
+                AccessController.doPrivileged(
                         (PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(ClassLoader.getSystemClassLoader(), config));
 
         Path path = getClasspath();
diff --git 
a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java 
b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java
index 4d15d2d80c..c44e2bfc87 100644
--- a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java
+++ b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovy.java
@@ -46,7 +46,6 @@ import org.codehaus.groovy.reflection.ReflectionUtils;
 import org.codehaus.groovy.runtime.InvokerHelper;
 import org.codehaus.groovy.runtime.ResourceGroovyMethods;
 import org.codehaus.groovy.tools.ErrorReporter;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
@@ -63,6 +62,7 @@ import java.io.Reader;
 import java.io.Writer;
 import java.lang.reflect.Field;
 import java.nio.charset.Charset;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.List;
 import java.util.Vector;
@@ -563,7 +563,7 @@ public class Groovy extends Java {
 
         final String scriptName = computeScriptName();
         final GroovyClassLoader classLoader =
-                VMPluginFactory.getPlugin().doPrivileged(
+                AccessController.doPrivileged(
                         (PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(baseClassLoader));
         addClassPathes(classLoader);
         configureCompiler();
diff --git 
a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovyc.java 
b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovyc.java
index 76a6861df8..64dc16fa8c 100644
--- a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovyc.java
+++ b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/Groovyc.java
@@ -42,7 +42,6 @@ import org.codehaus.groovy.runtime.DefaultGroovyStaticMethods;
 import org.codehaus.groovy.tools.ErrorReporter;
 import org.codehaus.groovy.tools.FileSystemCompiler;
 import org.codehaus.groovy.tools.javac.JavaAwareCompilationUnit;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 import org.objectweb.asm.ClassVisitor;
 import picocli.CommandLine;
 
@@ -54,6 +53,7 @@ import java.io.Writer;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.nio.charset.Charset;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -1443,7 +1443,7 @@ public class Groovyc extends MatchingTask {
             }
         }
 
-        GroovyClassLoader groovyLoader = 
VMPluginFactory.getPlugin().doPrivileged(
+        GroovyClassLoader groovyLoader = AccessController.doPrivileged(
                 (PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(loader, configuration));
         if (!forceLookupUnnamedFiles) {
             // in normal case we don't need to do script lookups
diff --git 
a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/RootLoaderRef.java
 
b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/RootLoaderRef.java
index 247c34ca40..a8d96b0c7a 100644
--- 
a/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/RootLoaderRef.java
+++ 
b/subprojects/groovy-ant/src/main/java/org/codehaus/groovy/ant/RootLoaderRef.java
@@ -26,8 +26,8 @@ import org.apache.tools.ant.types.Path;
 import org.apache.tools.ant.types.Reference;
 import org.codehaus.groovy.tools.LoaderConfiguration;
 import org.codehaus.groovy.tools.RootLoader;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 
 /**
@@ -88,7 +88,7 @@ public class RootLoaderRef extends MatchingTask {
             }
             lc.addFile(s);
         }
-        AntClassLoader loader = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<AntClassLoader>) () 
-> new AntClassLoader(new RootLoader(lc), true));
+        AntClassLoader loader = 
AccessController.doPrivileged((PrivilegedAction<AntClassLoader>) () -> new 
AntClassLoader(new RootLoader(lc), true));
         project.addReference(name, loader);
     }
 
diff --git 
a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy 
b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
index 81c12c32a6..1cdfd464d5 100644
--- 
a/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
+++ 
b/subprojects/groovy-console/src/main/groovy/groovy/console/ui/Console.groovy
@@ -60,6 +60,7 @@ import org.codehaus.groovy.vmplugin.VMPluginFactory
 
 import javax.swing.Action
 import javax.swing.Icon
+import javax.swing.JApplet
 import javax.swing.JFileChooser
 import javax.swing.JFrame
 import javax.swing.JLabel
@@ -414,6 +415,19 @@ class Console implements CaretListener, HyperlinkListener, 
ComponentListener, Fo
         run(frameConsoleDelegates)
     }
 
+    @Deprecated
+    void run(JApplet applet) {
+        run([
+                rootContainerDelegate: {
+                    containingWindows += 
SwingUtilities.getRoot(applet.getParent())
+                    applet
+                },
+                menuBarDelegate      : { arg ->
+                    current.JMenuBar = build(arg)
+                }
+        ])
+    }
+
     void run(Map defaults) {
 
         swing = new SwingBuilder()
diff --git 
a/subprojects/groovy-jsr223/src/main/java/org/codehaus/groovy/jsr223/GroovyScriptEngineImpl.java
 
b/subprojects/groovy-jsr223/src/main/java/org/codehaus/groovy/jsr223/GroovyScriptEngineImpl.java
index 8de6304b30..540a155435 100644
--- 
a/subprojects/groovy-jsr223/src/main/java/org/codehaus/groovy/jsr223/GroovyScriptEngineImpl.java
+++ 
b/subprojects/groovy-jsr223/src/main/java/org/codehaus/groovy/jsr223/GroovyScriptEngineImpl.java
@@ -62,7 +62,6 @@ import org.codehaus.groovy.runtime.MetaClassHelper;
 import org.codehaus.groovy.runtime.MethodClosure;
 import org.codehaus.groovy.util.ManagedConcurrentValueMap;
 import org.codehaus.groovy.util.ReferenceBundle;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import javax.script.AbstractScriptEngine;
 import javax.script.Bindings;
@@ -80,6 +79,7 @@ import java.io.Reader;
 import java.io.Writer;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 
 /**
@@ -109,7 +109,7 @@ public class GroovyScriptEngineImpl extends 
AbstractScriptEngine implements Comp
     }
 
     public GroovyScriptEngineImpl() {
-        this(VMPluginFactory.getPlugin().doPrivileged(new 
PrivilegedAction<GroovyClassLoader>() {
+        this(AccessController.doPrivileged(new 
PrivilegedAction<GroovyClassLoader>() {
             @Override
             public GroovyClassLoader run() {
                 return new GroovyClassLoader(getParentLoader(), new 
CompilerConfiguration(CompilerConfiguration.DEFAULT));
diff --git a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java 
b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
index 946e1ac024..5551f70d23 100644
--- a/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
+++ b/subprojects/groovy-sql/src/main/java/groovy/sql/Sql.java
@@ -27,10 +27,10 @@ import groovy.transform.stc.ClosureParams;
 import groovy.transform.stc.FromString;
 import groovy.transform.stc.SimpleType;
 import org.codehaus.groovy.runtime.InvokerHelper;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import javax.sql.DataSource;
 
+import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 import java.sql.CallableStatement;
@@ -4302,7 +4302,7 @@ public class Sql implements AutoCloseable {
             // read, and the policy shouldn't have to list them all.
             Connection con;
             try {
-                con = VMPluginFactory.getPlugin().doPrivileged(new 
PrivilegedExceptionAction<Connection>() {
+                con = AccessController.doPrivileged(new 
PrivilegedExceptionAction<Connection>() {
                     @Override
                     public Connection run() throws SQLException {
                         return dataSource.getConnection();
diff --git 
a/subprojects/groovy-swing/src/main/java/org/apache/groovy/swing/binding/ClosureTriggerBinding.java
 
b/subprojects/groovy-swing/src/main/java/org/apache/groovy/swing/binding/ClosureTriggerBinding.java
index 4f6cce1049..44b6905480 100644
--- 
a/subprojects/groovy-swing/src/main/java/org/apache/groovy/swing/binding/ClosureTriggerBinding.java
+++ 
b/subprojects/groovy-swing/src/main/java/org/apache/groovy/swing/binding/ClosureTriggerBinding.java
@@ -22,7 +22,6 @@ import groovy.lang.Closure;
 import groovy.lang.GroovyObjectSupport;
 import groovy.lang.Reference;
 import org.codehaus.groovy.reflection.ReflectionUtils;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.lang.reflect.AccessibleObject;
 import java.lang.reflect.Constructor;
@@ -73,7 +72,7 @@ public class ClosureTriggerBinding implements TriggerBinding, 
SourceBinding {
             final Class closureClass = closure.getClass();
 
             // do in privileged block since we may be looking at private stuff
-            Closure closureLocalCopy = 
VMPluginFactory.getPlugin().doPrivileged(new PrivilegedAction<Closure>() {
+            Closure closureLocalCopy = 
java.security.AccessController.doPrivileged(new PrivilegedAction<Closure>() {
                 @Override
                 public Closure run() {
                     // assume closures have only 1 constructor, of the form 
(Object, Reference*)
diff --git 
a/subprojects/groovy-templates/src/main/groovy/groovy/text/GStringTemplateEngine.java
 
b/subprojects/groovy-templates/src/main/groovy/groovy/text/GStringTemplateEngine.java
index 0d43e6f396..5ec22b7112 100644
--- 
a/subprojects/groovy-templates/src/main/groovy/groovy/text/GStringTemplateEngine.java
+++ 
b/subprojects/groovy-templates/src/main/groovy/groovy/text/GStringTemplateEngine.java
@@ -27,11 +27,11 @@ import groovy.lang.GroovyRuntimeException;
 import groovy.lang.Writable;
 import org.apache.groovy.util.SystemUtil;
 import org.codehaus.groovy.control.CompilationFailedException;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.IOException;
 import java.io.Reader;
 import java.lang.reflect.InvocationTargetException;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -193,7 +193,7 @@ public class GStringTemplateEngine extends TemplateEngine {
             final GroovyClassLoader loader =
                     REUSE_CLASS_LOADER && parentLoader instanceof 
GroovyClassLoader
                             ? (GroovyClassLoader) parentLoader
-                            : 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<GroovyClassLoader>) 
() -> new GroovyClassLoader(parentLoader));
+                            : createClassLoader(parentLoader);
             final Class<?> groovyClass;
             try {
                 groovyClass = loader.parseClass(new 
GroovyCodeSource(templateExpressions.toString(), "GStringTemplateScript" + 
counter.incrementAndGet() + ".groovy", "x"));
@@ -214,6 +214,11 @@ public class GStringTemplateEngine extends TemplateEngine {
             }
         }
 
+        @SuppressWarnings("removal") // TODO a future Groovy version should 
create the loader not as a privileged action
+        private GroovyClassLoader createClassLoader(ClassLoader parentLoader) {
+            return 
AccessController.doPrivileged((PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(parentLoader));
+        }
+
         private static void appendCharacter(final char c,
                                             final StringBuilder 
templateExpressions,
                                             final boolean writingString) {
diff --git 
a/subprojects/groovy-templates/src/main/groovy/groovy/text/StreamingTemplateEngine.java
 
b/subprojects/groovy-templates/src/main/groovy/groovy/text/StreamingTemplateEngine.java
index 8f5a210aed..65907d3003 100644
--- 
a/subprojects/groovy-templates/src/main/groovy/groovy/text/StreamingTemplateEngine.java
+++ 
b/subprojects/groovy-templates/src/main/groovy/groovy/text/StreamingTemplateEngine.java
@@ -32,13 +32,13 @@ import org.codehaus.groovy.control.messages.Message;
 import org.codehaus.groovy.control.messages.SyntaxErrorMessage;
 import org.codehaus.groovy.runtime.StackTraceUtils;
 import org.codehaus.groovy.syntax.SyntaxException;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.IOException;
 import java.io.LineNumberReader;
 import java.io.Reader;
 import java.io.StringReader;
 import java.lang.reflect.InvocationTargetException;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.ArrayList;
 import java.util.List;
@@ -595,7 +595,7 @@ public class StreamingTemplateEngine extends TemplateEngine 
{
         }
 
         private Closure createTemplateClosure(List<StringSection> sections, 
final ClassLoader parentLoader, StringBuilder target) throws 
ClassNotFoundException {
-            final GroovyClassLoader loader = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<GroovyClassLoader>) 
() -> new GroovyClassLoader(parentLoader));
+            final GroovyClassLoader loader = createClassLoader(parentLoader);
             final Class<?> groovyClass;
             try {
                 groovyClass = loader.parseClass(new 
GroovyCodeSource(target.toString(), TEMPLATE_SCRIPT_PREFIX + 
COUNTER.incrementAndGet() + ".groovy", "x"));
@@ -619,6 +619,11 @@ public class StreamingTemplateEngine extends 
TemplateEngine {
             return result;
         }
 
+        @SuppressWarnings("removal") // TODO a future Groovy version should 
create the loader not as a privileged action
+        private GroovyClassLoader createClassLoader(ClassLoader parentLoader) {
+            return 
AccessController.doPrivileged((PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(parentLoader));
+        }
+
         /**
          * Parses a non curly dollar preceded identifier of the type
          * '$bird' in the following template example:
diff --git 
a/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupTemplateEngine.java
 
b/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupTemplateEngine.java
index 9317bf1a7c..abbbd0eed8 100644
--- 
a/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupTemplateEngine.java
+++ 
b/subprojects/groovy-templates/src/main/groovy/groovy/text/markup/MarkupTemplateEngine.java
@@ -35,7 +35,6 @@ import org.codehaus.groovy.control.SourceUnit;
 import org.codehaus.groovy.control.customizers.ASTTransformationCustomizer;
 import org.codehaus.groovy.control.customizers.CompilationCustomizer;
 import org.codehaus.groovy.runtime.DefaultGroovyMethods;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.File;
 import java.io.IOException;
@@ -44,6 +43,7 @@ import java.io.StringReader;
 import java.net.MalformedURLException;
 import java.net.URL;
 import java.net.URLClassLoader;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.Collections;
 import java.util.LinkedHashMap;
@@ -101,7 +101,7 @@ public class MarkupTemplateEngine extends TemplateEngine {
                     }
             );
         }
-        groovyClassLoader = 
VMPluginFactory.getPlugin().doPrivileged((PrivilegedAction<TemplateGroovyClassLoader>)
 () -> new TemplateGroovyClassLoader(parentLoader, compilerConfiguration));
+        groovyClassLoader = 
AccessController.doPrivileged((PrivilegedAction<TemplateGroovyClassLoader>) () 
-> new TemplateGroovyClassLoader(parentLoader, compilerConfiguration));
         if (DEBUG_BYTECODE) {
             
compilerConfiguration.setBytecodePostprocessor(BytecodeDumper.STANDARD_ERR);
         }
@@ -116,7 +116,7 @@ public class MarkupTemplateEngine extends TemplateEngine {
      * @param tplConfig         template engine configuration
      */
     public MarkupTemplateEngine(final ClassLoader parentLoader, final File 
templateDirectory, TemplateConfiguration tplConfig) {
-        this(VMPluginFactory.getPlugin().doPrivileged(
+        this(AccessController.doPrivileged(
                 new PrivilegedAction<URLClassLoader>() {
                     @Override
                     public URLClassLoader run() {
diff --git 
a/subprojects/groovy-test/src/main/java/groovy/test/AllTestSuite.java 
b/subprojects/groovy-test/src/main/java/groovy/test/AllTestSuite.java
index a9b800279b..757be72844 100644
--- a/subprojects/groovy-test/src/main/java/groovy/test/AllTestSuite.java
+++ b/subprojects/groovy-test/src/main/java/groovy/test/AllTestSuite.java
@@ -26,10 +26,10 @@ import junit.framework.TestCase;
 import junit.framework.TestSuite;
 import org.codehaus.groovy.control.CompilationFailedException;
 import org.apache.groovy.test.ScriptTestAdapter;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.File;
 import java.io.IOException;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 import java.util.List;
 import java.util.logging.Logger;
@@ -78,7 +78,7 @@ public class AllTestSuite extends TestSuite {
     private static final Logger LOG = 
Logger.getLogger(AllTestSuite.class.getName());
     private static final ClassLoader JAVA_LOADER = 
AllTestSuite.class.getClassLoader();
     private static final GroovyClassLoader GROOVY_LOADER =
-            VMPluginFactory.getPlugin().doPrivileged(
+            AccessController.doPrivileged(
                     (PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(JAVA_LOADER)
             );
 
diff --git 
a/subprojects/groovy-test/src/main/java/groovy/test/GroovyTestSuite.java 
b/subprojects/groovy-test/src/main/java/groovy/test/GroovyTestSuite.java
index 71dd2eb2e7..eb1553e733 100644
--- a/subprojects/groovy-test/src/main/java/groovy/test/GroovyTestSuite.java
+++ b/subprojects/groovy-test/src/main/java/groovy/test/GroovyTestSuite.java
@@ -25,11 +25,12 @@ import junit.framework.TestCase;
 import junit.framework.TestSuite;
 import junit.textui.TestRunner;
 import org.apache.groovy.test.ScriptTestAdapter;
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
 
 import java.io.File;
+import java.security.AccessController;
 import java.security.PrivilegedAction;
 
+
 /**
  * A TestSuite which will run a Groovy unit test case inside any Java IDE
  * either as a unit test case or as an application.
@@ -51,7 +52,7 @@ public class GroovyTestSuite extends TestSuite {
     protected static String file = null;
 
     protected final GroovyClassLoader loader =
-            VMPluginFactory.getPlugin().doPrivileged(
+            AccessController.doPrivileged(
                     (PrivilegedAction<GroovyClassLoader>) () -> new 
GroovyClassLoader(GroovyTestSuite.class.getClassLoader())
             );
 
diff --git 
a/subprojects/groovy-xml/src/main/java/groovy/xml/FactorySupport.java 
b/subprojects/groovy-xml/src/main/java/groovy/xml/FactorySupport.java
index 7066362618..a6d57c7c60 100644
--- a/subprojects/groovy-xml/src/main/java/groovy/xml/FactorySupport.java
+++ b/subprojects/groovy-xml/src/main/java/groovy/xml/FactorySupport.java
@@ -18,11 +18,10 @@
  */
 package groovy.xml;
 
-import org.codehaus.groovy.vmplugin.VMPluginFactory;
-
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 import javax.xml.parsers.SAXParserFactory;
+import java.security.AccessController;
 import java.security.PrivilegedActionException;
 import java.security.PrivilegedExceptionAction;
 
@@ -33,7 +32,7 @@ public class FactorySupport {
     static Object createFactory(PrivilegedExceptionAction action) throws 
ParserConfigurationException {
         Object factory;
         try {
-            factory = VMPluginFactory.getPlugin().doPrivileged(action);
+            factory = AccessController.doPrivileged(action);
         } catch (PrivilegedActionException pae) {
             Exception e = pae.getException();
             if (e instanceof ParserConfigurationException) {

Reply via email to