public JCExpression createTypeReference(JavacNode type) { java.util.List<String> list = new ArrayList<String>(); list.add(type.getName()); JavacNode tNode = type.up(); while (tNode != null && tNode.getKind() == Kind.TYPE) { list.add(tNode.getName()); tNode = tNode.up(); } Collections.reverse(list); JavacTreeMaker maker = type.getTreeMaker(); JCExpression chain = maker.Ident(type.toName(list.get(0))); for (int i = 1; i < list.size(); i++) { chain = maker.Select(chain, type.toName(list.get(i))); } return chain; }
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; }