Jochen,
plus... it would be really really nice if someone could tell me how a
non-anonymous class in a method has to look like with javap, so that I
can know from there if it is no anonymous and finally fix he flags for
Groovy's class generation.
Every entry in InnerClass attribute contains 4 fields:
(1) inner_class_info_index;
(2) outer_class_info_index;
(3) inner_name_index;
(4) inner_class_access_flags.
The following InnerClass attribute is generated for your test case:
InnerClasses:
#2; // class test$_run_closure1
It corresponds to the following entry in InnerClass attribute:
inner_class_info = #2 // class test$_run_closure1
outer_class_info_index = #0
inner_name_index = #0
inner_class_access_flags = 0
According to JVMS [1], it corresponds to an anonymous class:
"
4.7.6. The InnerClasses Attribute
...
outer_class_info_index
If C is not a member of a class or an interface (that is, if C is ... an
anonymous class (JLS §15.9.5)), the value of the outer_class_info_index
item must be zero.
...
inner_name_index
If C is anonymous (JLS §15.9.5), the value of the inner_name_index item
must be zero.
...
"
In order to make the class non-anonymous again, you have to specify
inner_name_index and, optionally, outer_class_info_index.
Best regards,
Vladimir Ivanov
[1]
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-4.html#jvms-4.7.6