You might actually don't need the @CompileStatic annotation in this
example. Here is what the bytecode decompiled to the Java class looks like
(an example without static compilation enabled):

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by FernFlower decompiler)
//

public @interface SomeAnnotation {
    Class<?>[] someAttribute() default {};
}


This is exactly what you could expect from using static compilation.
However, if your annotation has some other methods where using the static
compilation useful, you can annotate problematic method
with @CompileDynamic, something like this:

import groovy.transform.CompileDynamic
import groovy.transform.CompileStatic

@CompileStatic
@interface SomeAnnotation {

    @CompileDynamic
    Class<?>[] someAttribute() default []
}


On Tue, Mar 9, 2021 at 12:30 PM Damir Murat <damir.mu...@gmail.com> wrote:

> Without static compilation, annotation defined as bellow works as expected:
>
> @interface SomeAnnitation {
>  Class<?>[] someAttribute default []
> }
>
> However, with static compilation,
>
> @CompileStatic
> @interface SomeAnnitation {
>  Class<?>[] someAttribute default []
> }
>
> I'm getting an error saying "Cannot return value of type java.util.List <E
> extends java.lang.Object> on method returning type java.lang.Class <?>[]"
>
> I tried several things but failed. Is there a way to do this in Groovy, or
> should I just create the annotation in Java?
>
> Tnx,
> Damir Murat
>

Reply via email to