Why does @MapConstructor(includeSuperProperties = true) in the code below throw e.g. java.lang.NoSuchMethodError: groovy.A2: method <init>()V not found ? Giving @MapConstructor(pre={super(args)}) seems to be doing what I want, i.e. also initialize the super classes...
(It is great that @MapConstructor supports final class members btw)

class GroovyMapConstructorSpike {
  @Test @Ignore @CompileStatic void mapConstructorTest() {
final a0 =new A0([x0:11,s0:"aa"])
    final a1 =new A1([x0:111,s0:"aaa",x1:222,s1:"bbb"])
    final a2 =new A2([x0:111,s0:"aaa",x1:222,s1:"bbb",x2:3333,s2:"cccc"])
    final a3 =new 
A3([x0:111,s0:"aaa",x1:222,s1:"bbb",x2:3333,s2:"cccc",x3:44444,s3:"ddddd"])
    println"a0=$a0" println"a1=$a1" println"a2=$a2" println"a3=$a3" }
}

@MapConstructor @ToString class A0 {
  final int x0 final Strings0 }

@MapConstructor(pre={super(args)})@ToString(includeSuper =true)class A1extends 
A0 {
  final int x1 final Strings1 }

@MapConstructor(pre={super(args)})@ToString(includeSuper =true)class A2extends 
A1 {
  final int x2 final Strings2 }

//@MapConstructor(includeSuperProperties = true) @ToString(includeSuper = true) class A3 extends A2 { // java.lang.NoSuchMethodError: groovy.A2: method <init>()V not found //@MapConstructor(includeSuperFields = true) @ToString(includeSuper = true) class A3 extends A2 { // java.lang.NoSuchMethodError: groovy.A2: method <init>()V not found @MapConstructor(pre={super(args)})@ToString(includeSuper =true)class A3extends A2 {// works final int x3 final Strings3 }


Result:

a0=groovy.A0(11, aa)
a1=groovy.A1(222, bbb, groovy.A0(111, aaa))
a2=groovy.A2(3333, cccc, groovy.A1(222, bbb, groovy.A0(111, aaa)))
a3=groovy.A3(44444, ddddd, groovy.A2(3333, cccc, groovy.A1(222, bbb, groovy.A0(111, aaa))))

Cheers,
mg



Reply via email to