You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by em...@apache.org on 2023/07/31 17:31:50 UTC

[groovy] branch master updated: one map

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

emilles 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 06169fd3d9 one map
06169fd3d9 is described below

commit 06169fd3d99a29350c4b013adaa2460c898b4a22
Author: Eric Milles <er...@thomsonreuters.com>
AuthorDate: Mon Jul 31 12:09:58 2023 -0500

    one map
---
 .../org/codehaus/groovy/vmplugin/v16/Java16.java   | 23 +++------
 .../org/codehaus/groovy/vmplugin/v8/Java8.java     | 56 ++++++++++------------
 .../org/codehaus/groovy/vmplugin/v9/Java9.java     | 21 +++-----
 3 files changed, 37 insertions(+), 63 deletions(-)

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 7c438c2504..11cf439b49 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v16/Java16.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v16/Java16.java
@@ -26,34 +26,23 @@ import org.codehaus.groovy.ast.CompileUnit;
 import org.codehaus.groovy.ast.RecordComponentNode;
 import org.codehaus.groovy.vmplugin.v10.Java10;
 
-import java.lang.annotation.ElementType;
 import java.lang.invoke.MethodHandle;
 import java.lang.reflect.Method;
 import java.lang.reflect.Proxy;
 import java.util.Arrays;
-import java.util.EnumMap;
-import java.util.Map;
 import java.util.stream.Collectors;
 
-/**
- * Additional Java 16 based functions will be added here as needed.
- */
+import static java.lang.annotation.ElementType.RECORD_COMPONENT;
+
 public class Java16 extends Java10 {
-    private Map<ElementType, Integer> elementTypeTargetMap;
 
-    @Override
-    public int getVersion() {
-        return 16;
+    {
+        elementTypeToTarget.put(RECORD_COMPONENT, AnnotationNode.RECORD_COMPONENT_TARGET);
     }
 
     @Override
-    protected Map<ElementType, Integer> getElementTypeTargetMap() {
-        if (null == elementTypeTargetMap) {
-            Map<ElementType, Integer> ettm = new EnumMap<>(super.getElementTypeTargetMap());
-            ettm.put(ElementType.RECORD_COMPONENT, AnnotationNode.RECORD_COMPONENT_TARGET);
-            elementTypeTargetMap = ettm;
-        }
-        return elementTypeTargetMap;
+    public int getVersion() {
+        return 16;
     }
 
     @Override
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 2054be36ba..31d66923cf 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v8/Java8.java
@@ -83,19 +83,6 @@ public class Java8 implements VMPlugin {
     private static final Annotation[] EMPTY_ANNOTATION_ARRAY = new Annotation[0];
     private static final Permission ACCESS_PERMISSION = new ReflectPermission("suppressAccessChecks");
 
-    private static final Map<ElementType, Integer> ELEMENT_TYPE_TARGET_MAP = new EnumMap<>(Maps.of(
-        ElementType.TYPE, AnnotationNode.TYPE_TARGET,
-        ElementType.CONSTRUCTOR, AnnotationNode.CONSTRUCTOR_TARGET,
-        ElementType.METHOD, AnnotationNode.METHOD_TARGET,
-        ElementType.FIELD, AnnotationNode.FIELD_TARGET,
-        ElementType.PARAMETER, AnnotationNode.PARAMETER_TARGET,
-        ElementType.LOCAL_VARIABLE, AnnotationNode.LOCAL_VARIABLE_TARGET,
-        ElementType.ANNOTATION_TYPE, AnnotationNode.ANNOTATION_TARGET,
-        ElementType.PACKAGE, AnnotationNode.PACKAGE_TARGET,
-        ElementType.TYPE_PARAMETER, AnnotationNode.TYPE_PARAMETER_TARGET,
-        ElementType.TYPE_USE, AnnotationNode.TYPE_USE_TARGET
-    ));
-
     public static GenericsType configureTypeVariableDefinition(final ClassNode base, final ClassNode[] cBounds) {
         ClassNode redirect = base.redirect();
         base.setRedirect(null);
@@ -146,6 +133,8 @@ public class Java8 implements VMPlugin {
         }
     }
 
+    //--------------------------------------------------------------------------
+
     @Override
     public Class<?>[] getPluginDefaultGroovyMethods() {
         return new Class[]{PluginDefaultGroovyMethods.class};
@@ -161,17 +150,6 @@ public class Java8 implements VMPlugin {
         return 8;
     }
 
-    protected Map<ElementType, Integer> getElementTypeTargetMap() {
-        return ELEMENT_TYPE_TARGET_MAP;
-    }
-
-    protected int getElementCode(final ElementType value) {
-        Integer code = getElementTypeTargetMap().get(value);
-        if (null != code) return code;
-
-        throw new GroovyBugError("unsupported Target " + value);
-    }
-
     @Override
     public void setAdditionalClassInformation(final ClassNode cn) {
         setGenericsTypes(cn);
@@ -363,10 +341,22 @@ public class Java8 implements VMPlugin {
 
     //
 
+    protected final Map<ElementType, Integer> elementTypeToTarget = new EnumMap<>(Maps.of(
+        ElementType.TYPE,            AnnotationNode.TYPE_TARGET,
+        ElementType.FIELD,           AnnotationNode.FIELD_TARGET,
+        ElementType.METHOD,          AnnotationNode.METHOD_TARGET,
+        ElementType.PARAMETER,       AnnotationNode.PARAMETER_TARGET,
+        ElementType.CONSTRUCTOR,     AnnotationNode.CONSTRUCTOR_TARGET,
+        ElementType.LOCAL_VARIABLE,  AnnotationNode.LOCAL_VARIABLE_TARGET,
+        ElementType.ANNOTATION_TYPE, AnnotationNode.ANNOTATION_TARGET,
+        ElementType.PACKAGE,         AnnotationNode.PACKAGE_TARGET,
+        ElementType.TYPE_PARAMETER,  AnnotationNode.TYPE_PARAMETER_TARGET,
+        ElementType.TYPE_USE,        AnnotationNode.TYPE_USE_TARGET
+    ));
+
     @Override
     public void configureAnnotationNodeFromDefinition(final AnnotationNode definition, final AnnotationNode root) {
-        ClassNode type = definition.getClassNode();
-        final String typeName = type.getName();
+        String typeName = definition.getClassNode().getName();
         if ("java.lang.annotation.Retention".equals(typeName)) {
             Expression exp = definition.getMember("value");
             if (!(exp instanceof PropertyExpression)) return;
@@ -377,16 +367,18 @@ public class Java8 implements VMPlugin {
         } else if ("java.lang.annotation.Target".equals(typeName)) {
             Expression exp = definition.getMember("value");
             if (!(exp instanceof ListExpression)) return;
-            ListExpression le = (ListExpression) exp;
-            int bitmap = 0;
-            for (Expression e : le.getExpressions()) {
+            ListExpression list = (ListExpression) exp;
+            int targets = 0;
+            for (Expression e : list.getExpressions()) {
                 if (!(e instanceof PropertyExpression)) return;
                 PropertyExpression element = (PropertyExpression) e;
                 String name = element.getPropertyAsString();
-                ElementType value = ElementType.valueOf(name);
-                bitmap |= getElementCode(value);
+                ElementType type = ElementType.valueOf(name);
+                Integer target = elementTypeToTarget.get(type);
+                if (target == null) throw new GroovyBugError("unsupported Target " + type);
+                targets |= target.intValue();
             }
-            root.setAllowedTargets(bitmap);
+            root.setAllowedTargets(targets);
         }
     }
 
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 5f8fbfd37a..14d37343db 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v9/Java9.java
@@ -23,14 +23,12 @@ import groovy.lang.GroovyRuntimeException;
 import groovy.lang.MetaClass;
 import groovy.lang.MetaMethod;
 import org.codehaus.groovy.GroovyBugError;
-import org.codehaus.groovy.ast.AnnotationNode;
 import org.codehaus.groovy.reflection.CachedClass;
 import org.codehaus.groovy.reflection.CachedMethod;
 import org.codehaus.groovy.reflection.ReflectionUtils;
 import org.codehaus.groovy.runtime.DefaultGroovyMethods;
 import org.codehaus.groovy.vmplugin.v8.Java8;
 
-import java.lang.annotation.ElementType;
 import java.lang.invoke.MethodHandle;
 import java.lang.invoke.MethodHandles;
 import java.lang.module.ModuleDescriptor;
@@ -47,7 +45,6 @@ import java.net.URI;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Collections;
-import java.util.EnumMap;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -61,22 +58,18 @@ import java.util.logging.Level;
 import java.util.logging.Logger;
 import java.util.stream.Collectors;
 
+import static java.lang.annotation.ElementType.MODULE;
+import static org.codehaus.groovy.ast.AnnotationNode.TYPE_TARGET;
+
 public class Java9 extends Java8 {
-    private Map<ElementType, Integer> elementTypeTargetMap;
 
-    @Override
-    public int getVersion() {
-        return 9;
+    {
+        elementTypeToTarget.put(MODULE, TYPE_TARGET); // TODO Add MODULE_TARGET?
     }
 
     @Override
-    protected Map<ElementType, Integer> getElementTypeTargetMap() {
-        if (null == elementTypeTargetMap) {
-            Map<ElementType, Integer> ettm = new EnumMap<>(super.getElementTypeTargetMap());
-            ettm.put(ElementType.MODULE, AnnotationNode.TYPE_TARGET); // TODO Add MODULE_TARGET too?
-            elementTypeTargetMap = ettm;
-        }
-        return elementTypeTargetMap;
+    public int getVersion() {
+        return 9;
     }
 
     @Override