This is an automated email from the ASF dual-hosted git repository.
paulk pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/groovy.git
The following commit(s) were added to refs/heads/master by this push:
new 799c8cd786 GROOVY-11906 VMPlugin cleanup for Groovy 6: - Created
v17/Java17.java extending Java16 - Updated VMPluginFactory to use only Java17
- Deprecated Java8, Java9, Java10, Java16 for removal - Left existing
auxiliary files in place - Added @SuppressWarnings("removal") at call sites
using the old classes
799c8cd786 is described below
commit 799c8cd7866902bd8116d1fb02a8d8790b3df81b
Author: Paul King <[email protected]>
AuthorDate: Mon Apr 6 11:39:56 2026 +1000
GROOVY-11906 VMPlugin cleanup for Groovy 6:
- Created v17/Java17.java extending Java16
- Updated VMPluginFactory to use only Java17
- Deprecated Java8, Java9, Java10, Java16 for removal
- Left existing auxiliary files in place
- Added @SuppressWarnings("removal") at call sites using the old classes
---
.../ast/decompiled/FormalParameterParser.java | 1 +
.../groovy/ast/decompiled/TypeSignatureParser.java | 1 +
.../codehaus/groovy/vmplugin/VMPluginFactory.java | 4 +--
.../org/codehaus/groovy/vmplugin/v10/Java10.java | 5 ++++
.../org/codehaus/groovy/vmplugin/v16/Java16.java | 5 ++++
.../vmplugin/{v10/Java10.java => v17/Java17.java} | 30 ++++++++++------------
.../org/codehaus/groovy/vmplugin/v8/Java8.java | 17 +++---------
.../org/codehaus/groovy/vmplugin/v8/Selector.java | 1 +
.../org/codehaus/groovy/vmplugin/v9/Java9.java | 5 ++++
9 files changed, 36 insertions(+), 33 deletions(-)
diff --git
a/src/main/java/org/codehaus/groovy/ast/decompiled/FormalParameterParser.java
b/src/main/java/org/codehaus/groovy/ast/decompiled/FormalParameterParser.java
index 55de8532cb..e3da547419 100644
---
a/src/main/java/org/codehaus/groovy/ast/decompiled/FormalParameterParser.java
+++
b/src/main/java/org/codehaus/groovy/ast/decompiled/FormalParameterParser.java
@@ -41,6 +41,7 @@ abstract class FormalParameterParser extends SignatureVisitor
{
this.resolver = resolver;
}
+ @SuppressWarnings("removal")
protected void flushTypeParameter() {
if (currentTypeParameter != null) {
ClassNode ref =
Java8.configureTypeVariableReference(currentTypeParameter);
diff --git
a/src/main/java/org/codehaus/groovy/ast/decompiled/TypeSignatureParser.java
b/src/main/java/org/codehaus/groovy/ast/decompiled/TypeSignatureParser.java
index c623f61b79..a85cc40067 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/TypeSignatureParser.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/TypeSignatureParser.java
@@ -55,6 +55,7 @@ abstract class TypeSignatureParser extends SignatureVisitor {
private final List<GenericsType> arguments = new ArrayList<>();
@Override
+ @SuppressWarnings("removal")
public void visitTypeVariable(final String name) {
finished(Java8.configureTypeVariableReference(name));
}
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/VMPluginFactory.java
b/src/main/java/org/codehaus/groovy/vmplugin/VMPluginFactory.java
index 8e8dbe38e1..2f68df6024 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/VMPluginFactory.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/VMPluginFactory.java
@@ -31,9 +31,7 @@ import java.util.Map;
public class VMPluginFactory {
private static final Map<Integer,String> PLUGIN_MAP = Maps.of(
- // NOTE: Declare the vm plugin entries in *descending* order!
- 16, "org.codehaus.groovy.vmplugin.v16.Java16",
- 10, "org.codehaus.groovy.vmplugin.v10.Java10"
+ 17, "org.codehaus.groovy.vmplugin.v17.Java17"
);
private static final VMPlugin PLUGIN = createPlugin();
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v10/Java10.java
b/src/main/java/org/codehaus/groovy/vmplugin/v10/Java10.java
index 787259c246..6e4d442234 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v10/Java10.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v10/Java10.java
@@ -22,6 +22,11 @@ import org.codehaus.groovy.vmplugin.v9.Java9;
import java.util.Arrays;
+/**
+ * @deprecated Use {@link org.codehaus.groovy.vmplugin.v17.Java17} instead.
Groovy 6.0 requires JDK 17+.
+ */
+@Deprecated(since = "6.0.0", forRemoval = true)
+@SuppressWarnings("removal")
public class Java10 extends Java9 {
@Override
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v16/Java16.java
b/src/main/java/org/codehaus/groovy/vmplugin/v16/Java16.java
index 46bbcd5f45..31ffe028a8 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v16/Java16.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v16/Java16.java
@@ -33,6 +33,11 @@ import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
+/**
+ * @deprecated Use {@link org.codehaus.groovy.vmplugin.v17.Java17} instead.
Groovy 6.0 requires JDK 17+.
+ */
+@Deprecated(since = "6.0.0", forRemoval = true)
+@SuppressWarnings("removal")
public class Java16 extends Java10 {
@Override
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v10/Java10.java
b/src/main/java/org/codehaus/groovy/vmplugin/v17/Java17.java
similarity index 64%
copy from src/main/java/org/codehaus/groovy/vmplugin/v10/Java10.java
copy to src/main/java/org/codehaus/groovy/vmplugin/v17/Java17.java
index 787259c246..103c9cd20f 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v10/Java10.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v17/Java17.java
@@ -16,27 +16,23 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.codehaus.groovy.vmplugin.v10;
+package org.codehaus.groovy.vmplugin.v17;
-import org.codehaus.groovy.vmplugin.v9.Java9;
+import org.codehaus.groovy.vmplugin.v16.Java16;
-import java.util.Arrays;
-
-public class Java10 extends Java9 {
+/**
+ * Java 17 based functions. Groovy 6.0 requires JDK 17 as the minimum version.
+ * <p>
+ * This plugin subsumes all functionality from earlier version-specific plugins
+ * (Java8 through Java16) into a single entry point for the VM plugin system.
+ *
+ * @since 6.0.0
+ */
+@SuppressWarnings("removal")
+public class Java17 extends Java16 {
@Override
public int getVersion() {
- return 10;
- }
-
- @Override
- public Class<?>[] getPluginDefaultGroovyMethods() {
- Class<?>[] answer = super.getPluginDefaultGroovyMethods();
-
- final int n = answer.length;
- answer = Arrays.copyOf(answer, n + 1);
- answer[n] = PluginDefaultGroovyMethods.class;
-
- return answer;
+ return 17;
}
}
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 5da3938fcf..2cab339d36 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
@@ -63,11 +63,9 @@ import java.lang.reflect.Member;
import java.lang.reflect.Method;
import java.lang.reflect.Modifier;
import java.lang.reflect.ParameterizedType;
-import java.lang.reflect.ReflectPermission;
import java.lang.reflect.Type;
import java.lang.reflect.TypeVariable;
import java.lang.reflect.WildcardType;
-import java.security.Permission;
import java.util.Arrays;
import java.util.List;
@@ -75,12 +73,14 @@ import java.util.List;
* Java 8 based functions.
*
* @since 2.5.0
+ * @deprecated Use {@link org.codehaus.groovy.vmplugin.v17.Java17} instead.
Groovy 6.0 requires JDK 17+.
*/
+@Deprecated(since = "6.0.0", forRemoval = true)
public class Java8 implements VMPlugin {
private static final Method[] EMPTY_METHOD_ARRAY = new Method[0];
private static final Annotation[] EMPTY_ANNOTATION_ARRAY = new
Annotation[0];
- private static final Permission ACCESS_PERMISSION = new
ReflectPermission("suppressAccessChecks");
+
public static GenericsType configureTypeVariableDefinition(final ClassNode
base, final ClassNode[] bounds) {
ClassNode redirect = base.redirect();
@@ -529,17 +529,7 @@ public class Java8 implements VMPlugin {
* @return the check result
*/
@Override
- @SuppressWarnings("removal") // TODO a future Groovy version should skip
the permission check
public boolean checkCanSetAccessible(final AccessibleObject
accessibleObject, final Class<?> callerClass) {
- SecurityManager sm = System.getSecurityManager();
- try {
- if (sm != null) {
- sm.checkPermission(ACCESS_PERMISSION);
- }
- } catch (SecurityException e) {
- return false;
- }
-
if (accessibleObject instanceof Constructor<?> c) {
if (c.getDeclaringClass() == Class.class) {
return false; // Cannot make a java.lang.Class constructor
accessible
@@ -607,6 +597,7 @@ public class Java8 implements VMPlugin {
//--------------------------------------------------------------------------
@Deprecated(since = "5.0.0")
+ @SuppressWarnings("removal")
public static MethodHandles.Lookup of(final Class<?> targetClass) {
return ((Java8) VMPluginFactory.getPlugin()).newLookup(targetClass);
}
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
index de93f46c08..3a50eb750a 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Selector.java
@@ -325,6 +325,7 @@ public abstract class Selector {
} else if (mp instanceof CachedField && !mp.isStatic()) {
try {
// GROOVY-9144, GROOVY-9596: get lookup for sender and
unreflect before forcing access
+ @SuppressWarnings("removal")
MethodHandles.Lookup lookup = ((Java8)
VMPluginFactory.getPlugin()).newLookup(sender);
handle = ((CachedField) mp).asAccessMethod(lookup);
} catch (IllegalAccessException e) {
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
index cf213d0690..10b67b831f 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
@@ -53,6 +53,11 @@ import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.stream.Collectors;
+/**
+ * @deprecated Use {@link org.codehaus.groovy.vmplugin.v17.Java17} instead.
Groovy 6.0 requires JDK 17+.
+ */
+@Deprecated(since = "6.0.0", forRemoval = true)
+@SuppressWarnings("removal")
public class Java9 extends Java8 {
@Override