To summarize the current status
First try:
public @interface Version {
byte value();
}
class Foo {
@Version(0x01) String bar
}
Error: Attribute 'value' should have type 'java.lang.Byte'; but found
type 'int' in @Version
Second try:
public @interface Version {
byte value();
}
class Foo {
@Version(1 as byte) String bar
}
Expected '(byte) 1' to be an inline constant of type byte in @Version
at line: 6, column: 14
Attribute 'value' should have type 'java.lang.Byte'; but found type
'java.lang.Object' in @Version
at line: -1, column: -1
Third try:
public @interface Version {
byte value();
}
class Foo {
public static final byte ONE = 0b01
@Version(ONE) String bar
}
Expected 'ONE' to be an inline constant of type byte not a field expression
in @Version
at line: 7, column: 12
Attribute 'value' should have type 'java.lang.Byte'; but found type
'java.lang.Object' in @Version
at line: -1, column: -1
This is a very sad story.
p
On Wed, Jan 15, 2020 at 11:14 PM Simon Sadedin <[email protected]> wrote:
> >I'm getting the following error:
> >
> > Error:Groovyc: Attribute 'value' should have type 'java.lang.Byte'; but
> found type 'java.lang.Integer' in @Version
>
> I have a similar type of problem where I cannot find any way to invoke
> Arrays.fill() for the byte version - even with explicit workarounds that
> should ensure a primitive byte is passed, for example:
>
> def result = new byte[10][10]
> final Byte minusOne = -1
> for(int i=0; i<10; ++i) {
> Arrays.fill(result, 0, dim, minusOne.byteValue())
> }
>
> It happens with and without CompileStatic and results in:
>
> java.lang.ArrayStoreException: java.lang.Byte
> at java.util.Arrays.fill(Arrays.java:3155)
>
> For these kind of cases I'm left having to create little Java stub
> workarounds to get it to call the right underlying Java API.
>
> Would be nice to have at least a way to work around this!
>
> Cheers,
>
> Simon
>
>
>