示例#1
0
  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;
  }