You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by pa...@apache.org on 2023/05/21 06:44:46 UTC

[groovy] 01/02: GROOVY-11062: Annotation collection isn't properly handling enum annotation attribute values

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

commit 27bc0fd2430b906820e13817691ab5f9187b57ed
Author: Paul King <pa...@asert.com.au>
AuthorDate: Wed May 17 19:49:13 2023 +1000

    GROOVY-11062: Annotation collection isn't properly handling enum annotation attribute values
---
 .../org/codehaus/groovy/tools/javac/JavaStubGenerator.java    |  2 ++
 .../groovy/transform/AnnotationCollectorTransform.java        | 11 ++++++++++-
 2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
index 5e46f81bb0..a28cb9e58a 100644
--- a/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
+++ b/src/main/java/org/codehaus/groovy/tools/javac/JavaStubGenerator.java
@@ -994,6 +994,8 @@ public class JavaStubGenerator {
                 val = writer.toString();
             } else if (constValue instanceof Number || constValue instanceof Boolean) {
                 val = constValue.toString();
+            } else if (constValue instanceof Enum) {
+                val = constValue.getClass().getName() + "." + constValue.toString();
             } else {
                 val = "\"" + escapeSpecialChars(constValue.toString()) + "\"";
                 replaceDollars = false;
diff --git a/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java b/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
index 0505a6ae06..2c5e090f30 100644
--- a/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
+++ b/src/main/java/org/codehaus/groovy/transform/AnnotationCollectorTransform.java
@@ -52,6 +52,8 @@ import java.util.ListIterator;
 import java.util.Map;
 import java.util.Set;
 
+import static org.codehaus.groovy.ast.tools.GeneralUtils.classX;
+import static org.codehaus.groovy.ast.tools.GeneralUtils.propX;
 import static org.codehaus.groovy.transform.trait.TraitComposer.COMPILESTATIC_CLASSNODE;
 import static org.objectweb.asm.Opcodes.ACC_ABSTRACT;
 import static org.objectweb.asm.Opcodes.ACC_ANNOTATION;
@@ -158,7 +160,8 @@ public class AnnotationCollectorTransform {
             if (e instanceof AnnotationConstantExpression) {
                 AnnotationConstantExpression ace = (AnnotationConstantExpression) e;
                 return serialize((AnnotationNode) ace.getValue());
-            } else if (e instanceof ListExpression) {
+            }
+            if (e instanceof ListExpression) {
                 boolean annotationConstant = false;
                 ListExpression le = (ListExpression) e;
                 List<Expression> list = le.getExpressions();
@@ -171,6 +174,12 @@ public class AnnotationCollectorTransform {
                 if (annotationConstant) type = type.makeArray();
                 return new ArrayExpression(type, newList);
             }
+            if (e instanceof ConstantExpression) {
+                Object obj = ((ConstantExpression) e).getValue();
+                if (obj instanceof Enum) {
+                    return propX(classX(obj.getClass()), e);
+                }
+            }
             return e;
         }