Macro classes and related types

Christopher Smith <[email protected]>
Newsgroups gmane.comp.lang.groovy.user
Message-ID <CAG+8NVoHBsCYXigPF8kofYCGAqoW-idvO-++jd9yoZTUhss22A@mail.gmail.com>
I am attempting to use a macro class to implement an SPI interface, and the
implemented class is essentially a registration (a name and an associated
JVM Class) to be read during bootstrap later. I have this implemented in
Java using an annotation processor and Freemarker, interpolating the values
(class name, type name, class literal) and then adding it as a source file.
I'm now making an ASTT to do the same natively in Groovy.

I have MacroClass correctly generating a .class file with the desired
constant values inside the typeName() and typeClass() methods, but it's a
bare Groovy class. When I try to say this:

```
new MacroClass() {
  class TypeReg extends com.example.TypeRegistration {
  }
}
```

the compiler tells me
```
You are not allowed to implement the class 'com.example.TypeRegistration',
use extends instead.
```

I tried various $v incantations, which all produced syntax errors.

In addition, adding `@groovy.transform.CompileStatic` or
`@groovy.transform.stc.POJO` on top of `class TypeReg` results in
```
class groovy.transform.CompileStatic is not an annotation in
@groovy.transform.CompileStatic
```

I'm not particular in what manner I add the "plain POGO" instructions, so
if I can programmatically invoke the behavior, that's fine with me, but I
would prefer to trim the 80% excess bytecode off the generated class.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.