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;
}