Details
Description
whenever annotation parameters are specified in byte-code, the Java5 vm-plugin does not include those annotations as AnnotationNode instances when configuring a ClassNode for that particular class.
the following code is from a local test-case:
void testParameterAnnotation() {
GroovyClassLoader gcl = new GroovyClassLoader()
gcl.parseClass """
import java.lang.annotation.*
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@interface MethodAnnotation {}
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@interface ParameterAnnotation {}
interface MyInterface {
@MethodAnnotation
def method(@ParameterAnnotation def param)
}
"""
GroovyCodeSource codeSource = new GroovyCodeSource("""
class MyInterfaceImpl implements MyInterface {
def method(def param) {}
}
""", "script" + System.currentTimeMillis() + ".groovy", "/groovy/script")
CompilationUnit cu = new CompilationUnit(CompilerConfiguration.DEFAULT, codeSource.codeSource, gcl)
cu.addSource(codeSource.getName(), codeSource.scriptText);
cu.compile(CompilePhase.FINALIZATION.phaseNumber)
def classNode = cu.getClassNode("MyInterfaceImpl")
def interfaceClassNode = classNode.getInterfaces().find { it.nameWithoutPackage == 'MyInterface' }
def methodNode = interfaceClassNode.getDeclaredMethods("method")[0]
// check if the AnnotationNode for 'MethodAnnotation' has been created
assert methodNode.getAnnotations().any { AnnotationNode an -> an.classNode.nameWithoutPackage == 'MethodAnnotation' }
// this one will fail, since parameter annotations are ignored by Java5Plugin (and above)
assert methodNode.getParameters()[0].getAnnotations().any { AnnotationNode an -> an.classNode.nameWithoutPackage == 'ParameterAnnotation' }
}
Activity
blackdrag blackdrag
made changes -
| Field | Original Value | New Value |
|---|---|---|
| Assignee | Jochen Theodorou [ blackdrag ] | |
| Fix Version/s | 1.7.11 [ 17244 ] | |
| Fix Version/s | 1.8.1 [ 17223 ] |
blackdrag blackdrag
made changes -
| Priority | Major [ 3 ] | Blocker [ 1 ] |
blackdrag blackdrag
made changes -
| Priority | Blocker [ 1 ] | Major [ 3 ] |
blackdrag blackdrag
made changes -
| Status | Open [ 1 ] | Closed [ 6 ] |
| Resolution | Fixed [ 1 ] |
I make this blocker only because I want to ensure it gets in the next release, not because the issue is fatal