public java.util.List<JavacNode> addFieldsToBuilder( JavacNode builderType, java.util.List<Name> namesOfParameters, java.util.List<JCExpression> typesOfParameters, JCTree source) { int len = namesOfParameters.size(); java.util.List<JavacNode> existing = new ArrayList<JavacNode>(); for (JavacNode child : builderType.down()) { if (child.getKind() == Kind.FIELD) existing.add(child); } java.util.List<JavacNode> out = new ArrayList<JavacNode>(); top: for (int i = len - 1; i >= 0; i--) { Name name = namesOfParameters.get(i); for (JavacNode exists : existing) { Name n = ((JCVariableDecl) exists.get()).name; if (n.equals(name)) { out.add(exists); continue top; } } JavacTreeMaker maker = builderType.getTreeMaker(); JCModifiers mods = maker.Modifiers(Flags.PRIVATE); JCVariableDecl newField = maker.VarDef( mods, name, cloneType(maker, typesOfParameters.get(i), source, builderType.getContext()), null); out.add(injectField(builderType, newField)); } Collections.reverse(out); return out; }