GROOVY-9323: AST for precompiled classes loaded from the classpath does not contain constructor annotation information
diff --git a/src/main/java/org/codehaus/groovy/transform/InheritConstructorsASTTransformation.java b/src/main/java/org/codehaus/groovy/transform/InheritConstructorsASTTransformation.java
index 254b087..d9cd063 100644
--- a/src/main/java/org/codehaus/groovy/transform/InheritConstructorsASTTransformation.java
+++ b/src/main/java/org/codehaus/groovy/transform/InheritConstructorsASTTransformation.java
@@ -96,7 +96,7 @@
if (isExisting(classNode, params)) return;
ConstructorNode added = addGeneratedConstructor(classNode, consNode.getModifiers(), params, consNode.getExceptions(), block(ctorSuperS(args(theArgs))));
if (copyConstructorAnnotations) {
- added.addAnnotations(copyAnnotatedNodeAnnotations(consNode, ANNOTATION));
+ added.addAnnotations(copyAnnotatedNodeAnnotations(consNode, ANNOTATION, false));
}
}
diff --git a/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java b/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java
index 0f3b668..db0fc3f 100644
--- a/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java
+++ b/src/main/java/org/codehaus/groovy/vmplugin/v5/Java5.java
@@ -26,6 +26,7 @@
import org.codehaus.groovy.ast.ClassHelper;
import org.codehaus.groovy.ast.ClassNode;
import org.codehaus.groovy.ast.CompileUnit;
+import org.codehaus.groovy.ast.ConstructorNode;
import org.codehaus.groovy.ast.FieldNode;
import org.codehaus.groovy.ast.GenericsType;
import org.codehaus.groovy.ast.MethodNode;
@@ -396,7 +397,8 @@
}
Parameter[] params = params1;
ClassNode[] exceptions = makeClassNodes(compileUnit, ctor.getGenericExceptionTypes(), ctor.getExceptionTypes());
- classNode.addConstructor(ctor.getModifiers(), params, exceptions, null);
+ ConstructorNode cn = classNode.addConstructor(ctor.getModifiers(), params, exceptions, null);
+ setAnnotationMetaData(ctor.getAnnotations(), cn);
}
Class sc = clazz.getSuperclass();
diff --git a/src/test/org/codehaus/groovy/transform/InheritConstructorsTransformTest.groovy b/src/test/org/codehaus/groovy/transform/InheritConstructorsTransformTest.groovy
index 03230ff..c3f1aea 100644
--- a/src/test/org/codehaus/groovy/transform/InheritConstructorsTransformTest.groovy
+++ b/src/test/org/codehaus/groovy/transform/InheritConstructorsTransformTest.groovy
@@ -224,4 +224,19 @@
assert message.contains('Cannot call OrderPublisher <RoundingMode>#<init>(java.util.Set <RoundingMode>) with arguments [java.util.HashSet <Date>]')
}
-}
\ No newline at end of file
+ // GROOVY-9323
+ void testAnnotationsCopiedForConstructorsFromPrecompiledClass() {
+ assertScript '''
+ @groovy.transform.InheritConstructors(constructorAnnotations=true)
+ class MyChildException extends org.codehaus.groovy.transform.MyException9323 {}
+
+ def annos = MyChildException.constructors[0].annotations*.annotationType().simpleName
+ assert annos.contains('Generated') && annos.contains('Deprecated')
+ '''
+ }
+}
+
+class MyException9323 extends RuntimeException {
+ @Deprecated
+ MyException9323() {}
+}