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) {
