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

Reply via email to