public void testJSDocAttachment13() {
   AstRoot root = parse("({/** attach me */ get 'foo'() {}});");
   assertNotNull(root.getComments());
   assertEquals(1, root.getComments().size());
   ExpressionStatement st = (ExpressionStatement) root.getFirstChild();
   ParenthesizedExpression pt = (ParenthesizedExpression) st.getExpression();
   ObjectLiteral lit = (ObjectLiteral) pt.getExpression();
   StringLiteral stringLit = (StringLiteral) lit.getElements().get(0).getLeft();
   assertNotNull(stringLit.getJsDoc());
 }
 public void testJSDocAttachment10() {
   AstRoot root = parse("({foo: /** attach me */ (bar)});");
   assertNotNull(root.getComments());
   assertEquals(1, root.getComments().size());
   ExpressionStatement st = (ExpressionStatement) root.getFirstChild();
   ParenthesizedExpression pt = (ParenthesizedExpression) st.getExpression();
   ObjectLiteral lit = (ObjectLiteral) pt.getExpression();
   ParenthesizedExpression parens = (ParenthesizedExpression) lit.getElements().get(0).getRight();
   assertNotNull(parens.getJsDoc());
 }
 public void testJSDocAttachment9() {
   AstRoot root = parse("({/** attach me */ foo: 2});");
   assertNotNull(root.getComments());
   assertEquals(1, root.getComments().size());
   ExpressionStatement st = (ExpressionStatement) root.getFirstChild();
   ParenthesizedExpression pt = (ParenthesizedExpression) st.getExpression();
   ObjectLiteral lit = (ObjectLiteral) pt.getExpression();
   Name objLitKey = (Name) lit.getElements().get(0).getLeft();
   assertNotNull(objLitKey.getJsDoc());
 }
 public void testJSDocAttachment6() {
   AstRoot root = parse("({1: /** don't attach me */ 2, 3: 4});");
   assertNotNull(root.getComments());
   assertEquals(1, root.getComments().size());
   ExpressionStatement st = (ExpressionStatement) root.getFirstChild();
   ParenthesizedExpression pt = (ParenthesizedExpression) st.getExpression();
   ObjectLiteral lit = (ObjectLiteral) pt.getExpression();
   for (ObjectProperty el : lit.getElements()) {
     assertNull(el.getLeft().getJsDoc());
     assertNull(el.getRight().getJsDoc());
   }
 }
  public void testObjectLitLocation() {
    AstNode root =
        parse(
            "\nvar foo =\n"
                + "{ \n"
                + "'A' : 'A', \n"
                + "'B' : 'B', \n"
                + "'C' : \n"
                + "      'C' \n"
                + "};\n");

    VariableDeclaration firstVarDecl = (VariableDeclaration) root.getFirstChild();
    List<VariableInitializer> vars1 = firstVarDecl.getVariables();
    VariableInitializer firstInitializer = vars1.get(0);
    Name firstVarName = (Name) firstInitializer.getTarget();

    ObjectLiteral objectLiteral = (ObjectLiteral) firstInitializer.getInitializer();
    List<ObjectProperty> props = objectLiteral.getElements();
    ObjectProperty firstObjectLit = props.get(0);
    ObjectProperty secondObjectLit = props.get(1);
    ObjectProperty thirdObjectLit = props.get(2);

    AstNode firstKey = firstObjectLit.getLeft();
    AstNode firstValue = firstObjectLit.getRight();
    AstNode secondKey = secondObjectLit.getLeft();
    AstNode secondValue = secondObjectLit.getRight();
    AstNode thirdKey = thirdObjectLit.getLeft();
    AstNode thirdValue = thirdObjectLit.getRight();

    assertEquals(1, firstVarName.getLineno());
    assertEquals(2, objectLiteral.getLineno());
    assertEquals(3, firstObjectLit.getLineno());
    assertEquals(3, firstKey.getLineno());
    assertEquals(3, firstValue.getLineno());

    assertEquals(4, secondKey.getLineno());
    assertEquals(4, secondValue.getLineno());

    assertEquals(5, thirdKey.getLineno());
    assertEquals(6, thirdValue.getLineno());
  }
 /**
  * Visits this node, the target, and each argument. If there is a trailing initializer node,
  * visits that last.
  */
 @Override
 public void visit(NodeVisitor v) {
   if (v.visit(this)) {
     target.visit(v);
     for (AstNode arg : getArguments()) {
       arg.visit(v);
     }
     if (initializer != null) {
       initializer.visit(v);
     }
   }
 }
 @Override
 public String toSource(int depth) {
   StringBuilder sb = new StringBuilder();
   sb.append(makeIndent(depth));
   sb.append("new ");
   sb.append(target.toSource(0));
   sb.append("(");
   if (arguments != null) {
     printList(arguments, sb);
   }
   sb.append(")");
   if (initializer != null) {
     sb.append(" ");
     sb.append(initializer.toSource(0));
   }
   return sb.toString();
 }
 /**
  * Sets initializer object. Rhino supports an experimental syntax of the form {@code new expr [ (
  * arglist ) ] [initializer]}, in which initializer is an object literal that is used to set
  * additional properties on the newly-created {@code expr} object.
  *
  * @param initializer extra initializer object. Can be {@code null}.
  */
 public void setInitializer(ObjectLiteral initializer) {
   this.initializer = initializer;
   if (initializer != null) initializer.setParent(this);
 }