コード例 #1
0
  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;
  }
コード例 #2
0
ファイル: HandleBuilder.java プロジェクト: 0904681074/lombok
  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;
  }