GROOVY-8669: Groovy class does not compile if the ValueType of an annotation is 
not on the classpath


Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/239d4dcc
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/239d4dcc
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/239d4dcc

Branch: refs/heads/GROOVY_2_5_X
Commit: 239d4dcccd59332c23f897c530bcf72d36fd5201
Parents: 7d7f837
Author: Paul King <[email protected]>
Authored: Sun Aug 19 19:56:20 2018 +1000
Committer: Paul King <[email protected]>
Committed: Sun Aug 19 23:29:32 2018 +1000

----------------------------------------------------------------------
 .../org/codehaus/groovy/ast/decompiled/Annotations.java | 12 ++++++++++--
 1 file changed, 10 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/groovy/blob/239d4dcc/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
----------------------------------------------------------------------
diff --git a/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java 
b/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
index 2974d00..297dbb0 100644
--- a/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
+++ b/src/main/java/org/codehaus/groovy/ast/decompiled/Annotations.java
@@ -48,14 +48,22 @@ class Annotations {
 
         AnnotationNode node = new DecompiledAnnotationNode(classNode);
         for (Map.Entry<String, Object> entry : annotation.members.entrySet()) {
-            node.addMember(entry.getKey(), 
annotationValueToExpression(entry.getValue(), resolver));
+            addMemberIfFound(resolver, node, entry);
         }
         return node;
     }
 
+    private static void addMemberIfFound(AsmReferenceResolver resolver, 
AnnotationNode node, Map.Entry<String, Object> entry) {
+        Expression value = annotationValueToExpression(entry.getValue(), 
resolver);
+        if (value != null) {
+            node.addMember(entry.getKey(), value);
+        }
+    }
+
     private static Expression annotationValueToExpression(Object value, 
AsmReferenceResolver resolver) {
         if (value instanceof TypeWrapper) {
-            return new 
ClassExpression(resolver.resolveType(Type.getType(((TypeWrapper) value).desc)));
+            ClassNode type = 
resolver.resolveClassNullable(Type.getType(((TypeWrapper) 
value).desc).getClassName());
+            return type != null ? new ClassExpression(type) : null;
         }
 
         if (value instanceof EnumConstantWrapper) {

Reply via email to