Following Roel's interest in my proposition, I've been toiling away on
Lombok's code. I have successfully changed the Javac handler to
generate varargs when the last parameter is an array, but the Eclipse
Handler is giving me a hard time. Here is my Javac (working, tested)
code :
lombok.javac.handlers.HandleConstructor.createConstructor(AccessLevel,
JavacNode, List<JavacNode>, boolean, JCTree)
...
Iterator<JavacNode> i = fields.iterator();
while (i.hasNext()) {
JavacNode fieldNode = i.next();
...
long flags = Flags.FINAL;
if (field.vartype.getTag() == JCTree.TYPEARRAY && !i.hasNext())
flags |= Flags.VARARGS;
JCVariableDecl param = maker.VarDef(maker.Modifiers(flags,
nonNulls.appendList(nullables)),
field.name, field.vartype, null);
...
and here is what I have now in Eclipse, which seems like it could work
(but doesnt) :
lombok.javac.handlers.HandleConstructor.createConstructor(AccessLevel,
JavacNode, List<JavacNode>, boolean, JCTree)
...
Iterator<EclipseNode> i = fields.iterator();
while (i.hasNext()) {
EclipseNode fieldNode = i.next();
...
Argument parameter = new Argument(
field.name, fieldPos,
copyType(field.type, source), Modifier.FINAL);
if (field.binding != null) {
if ((field.binding.tagBits & TagBits.IsArrayType) != 0 && !
i.hasNext()) {
parameter.type.bits |= ASTNode.IsVarArgs;
}
}
setGeneratedBy(parameter, source);
...
I've taken the "parameter.type.bits |= ASTNode.IsVarArgs" bit from
lombok's own PatchDelegate class, but I do not get the expected
effect. The generated constructor only takes a regular array and
introspecting it does not return isVarArgs() == true.
Any Eclipse AST masters out there to help me out?
Francis