com.google.caja.lexer.TokenConsumer

Here are the examples of the java api class com.google.caja.lexer.TokenConsumer taken from open source projects.

1. SwitchStmt#render()

Project: caja
File: SwitchStmt.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    String label = getRenderedLabel();
    if (null != label) {
        out.consume(label);
        out.consume(":");
    }
    Iterator<? extends ParseTreeNode> it = children().iterator();
    out.consume("switch");
    out.consume("(");
    it.next().render(rc);
    out.consume(")");
    out.consume("{");
    while (it.hasNext()) {
        SwitchCase caseStmt = (SwitchCase) it.next();
        caseStmt.render(rc);
    }
    out.mark(FilePosition.endOfOrNull(getFilePosition()));
    out.consume("}");
}

2. ForLoop#render()

Project: caja
File: ForLoop.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    String label = getRenderedLabel();
    if (null != label) {
        out.consume(label);
        out.consume(":");
    }
    out.consume("for");
    out.consume("(");
    if (!(initializer instanceof Noop)) {
        initializer.render(rc);
    }
    out.consume(JsMinimalPrinter.NOOP);
    if (!(condition instanceof BooleanLiteral && ((BooleanLiteral) condition).getValue())) {
        condition.render(rc);
    }
    out.consume(JsMinimalPrinter.NOOP);
    if (!(increment instanceof Noop)) {
        increment.render(rc);
    }
    out.consume(")");
    getBody().renderBlock(rc, false);
}

3. ForEachLoop#render()

Project: caja
File: ForEachLoop.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    String label = getRenderedLabel();
    if (null != label) {
        out.consume(label);
        out.consume(":");
    }
    out.consume("for");
    out.consume("(");
    keyReceiver.render(rc);
    out.consume("in");
    container.render(rc);
    out.consume(")");
    body.renderBlock(rc, false);
}

4. DoWhileLoop#render()

Project: caja
File: DoWhileLoop.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    String label = getRenderedLabel();
    if (null != label) {
        out.consume(label);
        out.consume(":");
    }
    out.consume("do");
    body.renderBlock(rc, true);
    out.consume("while");
    out.consume("(");
    condition.render(rc);
    out.consume(")");
}

5. WhileLoop#render()

Project: caja
File: WhileLoop.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    String label = getRenderedLabel();
    if (null != label) {
        out.consume(label);
        out.consume(":");
    }
    out.consume("while");
    out.consume("(");
    condition.render(rc);
    out.consume(")");
    body.renderBlock(rc, false);
}

6. ObjectConstructor#render()

Project: caja
File: ObjectConstructor.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    out.consume("{");
    boolean seen = false;
    for (ObjProperty prop : children()) {
        if (seen) {
            out.consume(",");
            out.consume("\n");
        } else {
            seen = true;
        }
        prop.render(rc);
    }
    out.mark(FilePosition.endOfOrNull(getFilePosition()));
    out.consume("}");
}

7. FunctionDeclaration#render()

Project: caja
File: FunctionDeclaration.java
@Override
public void render(RenderContext rc) {
    FunctionConstructor fc = getInitializer();
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    out.consume("function");
    getIdentifier().render(rc);
    out.consume("(");
    boolean seen = false;
    for (FormalParam p : fc.getParams()) {
        if (seen) {
            out.consume(",");
        } else {
            seen = true;
        }
        p.render(rc);
    }
    out.consume(")");
    fc.getBody().renderBlock(rc, false);
}

8. ArrayConstructor#render()

Project: caja
File: ArrayConstructor.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    FilePosition pos = getFilePosition();
    out.mark(pos);
    out.consume("[");
    Expression last = null;
    for (Expression e : children()) {
        if (last != null) {
            out.consume(",");
        }
        last = e;
        if (!Operation.is(e, Operator.COMMA)) {
            if (!(e instanceof Elision)) {
                e.render(rc);
            }
        } else {
            out.consume("(");
            e.render(rc);
            out.consume(")");
        }
    }
    out.mark(FilePosition.endOfOrNull(pos));
    out.consume("]");
}

9. SetterProperty#render()

Project: caja
File: SetterProperty.java
public void render(RenderContext r) {
    TokenConsumer out = r.getOut();
    out.mark(getFilePosition());
    out.consume("set");
    out.consume(" ");
    // ES5 allows quoted property names after get/set, but many ES3
    // implementations that implement a getter/setter abbreviated syntax
    // do not, and it introduces no ambiguity.
    renderPropertyName(r, true);
    FunctionConstructor fn = getFunction();
    fn.renderActuals(r);
    fn.renderBody(r);
}

10. GetterProperty#render()

Project: caja
File: GetterProperty.java
public void render(RenderContext r) {
    TokenConsumer out = r.getOut();
    out.mark(getFilePosition());
    out.consume("get");
    out.consume(" ");
    // ES5 allows quoted property names after get/set, but many ES3
    // implementations that implement a getter/setter abbreviated syntax
    // do not, and it introduces no ambiguity.
    renderPropertyName(r, true);
    FunctionConstructor fn = getFunction();
    fn.renderActuals(r);
    fn.renderBody(r);
}

11. Nodes#render()

Project: caja
File: Nodes.java
private static void render(DocumentType docType, Node node, Namespaces ns, RenderContext rc, boolean renderUnsafe) {
    StringBuilder sb = new StringBuilder(1 << 18);
    if (null != docType) {
        String rendering = renderDocumentType(docType);
        if (null != rendering) {
            sb.append(rendering);
        }
    }
    new Renderer(rc, sb, rc.markupRenderMode(), ns).render(node, ns, renderUnsafe);
    TokenConsumer out = rc.getOut();
    FilePosition pos = getFilePositionFor(node);
    out.mark(FilePosition.startOf(pos));
    out.consume(sb.toString());
    out.mark(FilePosition.endOf(pos));
}

12. MultiDeclaration#render()

Project: caja
File: MultiDeclaration.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    if (children().isEmpty()) {
        throw new SomethingWidgyHappenedError("Empty MultiDeclaration");
    }
    out.consume("var");
    boolean seen = false;
    for (Declaration decl : children()) {
        if (seen) {
            out.consume(",");
        } else {
            seen = true;
        }
        decl.renderShort(rc);
    }
}

13. FunctionConstructor#renderActuals()

Project: caja
File: FunctionConstructor.java
void renderActuals(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.consume("(");
    boolean seen = false;
    for (FormalParam e : params) {
        if (seen) {
            out.consume(",");
        } else {
            seen = true;
        }
        e.render(rc);
    }
    out.consume(")");
}

14. CajaTestCase#minify()

Project: caja
File: CajaTestCase.java
protected static String minify(ParseTreeNode node) {
    if (node == null) {
        return null;
    }
    // Make sure it's a JS node.
    StringBuilder sb = new StringBuilder();
    if (!(node.makeRenderer(sb, null) instanceof JsPrettyPrinter)) {
        throw new ClassCastException(node.getClass().getName());
    }
    TokenConsumer tc = new JsMinimalPrinter(sb);
    node.render(new RenderContext(tc));
    tc.noMoreTokens();
    return sb.toString();
}

15. ParseTreeNodeTest#testRenderPostRemove2()

Project: caja
File: ParseTreeNodeTest.java
public final void testRenderPostRemove2() {
    doRemove(1);
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = new JsPrettyPrinter(sb);
    root.render(new RenderContext(tc));
    tc.noMoreTokens();
    assertEquals("$0: {\n" + "  $5: {\n" + "    6;\n" + "    7;\n" + "    8;\n" + "  }\n" + "}", sb.toString());
}

16. ParseTreeNodeTest#testRenderPostRemove()

Project: caja
File: ParseTreeNodeTest.java
public final void testRenderPostRemove() {
    doRemove(5);
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = new JsPrettyPrinter(sb);
    root.render(new RenderContext(tc));
    tc.noMoreTokens();
    assertEquals("$0: {\n" + "  $1: {\n" + "    2;\n" + "    3;\n" + "    4;\n" + "  }\n" + "}", sb.toString());
}

17. ParseTreeNodeTest#testRenderPostReplace()

Project: caja
File: ParseTreeNodeTest.java
public final void testRenderPostReplace() {
    doReplace();
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = new JsPrettyPrinter(sb);
    root.render(new RenderContext(tc));
    tc.noMoreTokens();
    assertEquals("$0: {\n" + "  $1: {\n" + "    2;\n" + "    3;\n" + "    4;\n" + "  }\n" + "  $9: {\n" + "    10;\n" + "    11;\n" + "    12;\n" + "  }\n" + "}", sb.toString());
}

18. ParseTreeNodeTest#testRender()

Project: caja
File: ParseTreeNodeTest.java
public final void testRender() {
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = new JsPrettyPrinter(sb);
    root.render(new RenderContext(tc));
    tc.noMoreTokens();
    assertEquals("$0: {\n" + "  $1: {\n" + "    2;\n" + "    3;\n" + "    4;\n" + "  }\n" + "  $5: {\n" + "    6;\n" + "    7;\n" + "    8;\n" + "  }\n" + "}", sb.toString());
}

19. ParserTest#runRenderTest()

Project: caja
File: ParserTest.java
private void runRenderTest(String testFile, String goldenFile) throws Exception {
    Statement parseTree = js(fromResource(testFile));
    checkFilePositionInvariants(parseTree);
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = new JsPrettyPrinter(sb);
    RenderContext rc = new RenderContext(tc);
    parseTree.render(rc);
    tc.noMoreTokens();
    sb.append('\n');
    String golden = TestUtil.readResource(getClass(), goldenFile);
    String actual = sb.toString();
    assertEquals(actual, golden, actual);
}

20. ValueProperty#render()

Project: caja
File: ValueProperty.java
public void render(RenderContext rc) {
    Expression value = children().get(1);
    TokenConsumer out = rc.getOut();
    renderPropertyName(rc, false);
    out.consume(":");
    if (!Operation.is(value, Operator.COMMA)) {
        value.render(rc);
    } else {
        out.mark(value.getFilePosition());
        out.consume("(");
        value.render(rc);
        out.consume(")");
    }
}

21. RenderedExpression#render()

Project: caja
File: RenderedExpression.java
private static String render(ParseTreeNode n, boolean minify) {
    StringBuilder buf = new StringBuilder();
    TokenConsumer tc;
    if (minify) {
        tc = new JsMinimalPrinter(new Concatenator(buf));
    } else {
        tc = new JsPrettyPrinter(new Concatenator(buf));
    }
    RenderContext rc = new RenderContext(tc);
    n.render(rc);
    tc.noMoreTokens();
    return buf.toString();
}

22. Operation#renderParam()

Project: caja
File: Operation.java
private void renderParam(int i, RenderContext rc) {
    TokenConsumer out = rc.getOut();
    ParseTreeNode e = children().get(i);
    out.mark(e.getFilePosition());
    if (!parenthesize(op, 0 == i, (Expression) e)) {
        e.render(rc);
    } else {
        out.consume("(");
        e.render(rc);
        out.mark(FilePosition.endOfOrNull(getFilePosition()));
        out.consume(")");
    }
}

23. Declaration#renderShort()

Project: caja
File: Declaration.java
/**
   * Renders the short form without the "var" keyword.
   * This is used in multi declarations, such as in
   * {@code for (var a = 0, b = 1, ...)}.
   */
void renderShort(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    if (identifier.getName() == null) {
        throw new IllegalStateException("null name for declaration at " + getFilePosition());
    }
    identifier.render(rc);
    if (null != initializer) {
        out.consume("=");
        boolean isComma = Operation.is(initializer, Operator.COMMA);
        if (isComma) {
            out.consume("(");
        }
        initializer.render(rc);
        if (isComma) {
            out.consume(")");
        }
    }
}

24. Block#renderBody()

Project: caja
File: Block.java
public void renderBody(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    for (Statement stmt : children()) {
        out.mark(stmt.getFilePosition());
        stmt.render(rc);
        if (!stmt.isTerminal()) {
            out.mark(FilePosition.endOfOrNull(stmt.getFilePosition()));
            out.consume(";");
        }
    }
    out.mark(FilePosition.endOfOrNull(getFilePosition()));
}

25. UncajoledModule#render()

Project: caja
File: UncajoledModule.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.consume("/* Start Uncajoled Module */");
    out.consume("throw");
    out.consume("'Uncajoled Module must never be executed'");
    out.consume(";");
    getModuleBody().render(rc);
    out.consume("/* End Uncajoled Module */");
}

26. TranslatedCode#render()

Project: caja
File: TranslatedCode.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.consume("/* Start translated code */");
    out.consume("throw");
    out.consume("'Translated code must never be executed'");
    out.consume(";");
    children().get(0).render(rc);
    out.consume("/* End translated code */");
}

27. CatchStmt#render()

Project: caja
File: CatchStmt.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    out.consume("catch");
    out.consume("(");
    out.mark(exception.getFilePosition());
    exception.getIdentifier().render(rc);
    out.consume(")");
    body.renderBlock(rc, false);
}

28. WithStmt#render()

Project: caja
File: WithStmt.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.consume("with");
    out.consume("(");
    getScopeObject().render(rc);
    out.consume(")");
    getBody().renderBlock(rc, false);
}

29. SwitchCase#render()

Project: caja
File: SwitchCase.java
public final void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    renderHead(rc);
    out.consume(":");
    out.consume("\n");
    Block body = getBody();
    rc.getOut().mark(body.getFilePosition());
    body.renderBody(rc);
}

30. Block#renderBlock()

Project: caja
File: Block.java
@Override
public void renderBlock(RenderContext rc, boolean terminate) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    out.consume("{");
    renderBody(rc);
    out.consume("}");
}

31. FunctionConstructor#render()

Project: caja
File: FunctionConstructor.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    out.consume("function");
    String name = identifier.getName();
    if (null != name) {
        out.consume(name);
    }
    renderActuals(rc);
    renderBody(rc);
}

32. Declaration#render()

Project: caja
File: Declaration.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    out.consume("var");
    renderShort(rc);
}

33. DebuggerStmt#render()

Project: caja
File: DebuggerStmt.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    out.consume("debugger");
}

34. ContinueStmt#render()

Project: caja
File: ContinueStmt.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    out.consume("continue");
    if (null != label && !"".equals(label)) {
        out.consume(label);
    }
}

35. BreakStmt#render()

Project: caja
File: BreakStmt.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    out.consume("break");
    if (null != label && !"".equals(label)) {
        out.consume(label);
    }
}

36. CajaTestCase#renderProgram()

Project: caja
File: CajaTestCase.java
/**
   * Returns a source code string for the given program without surrounding
   * curly braces.
   */
public static String renderProgram(Block program) {
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = program.makeRenderer(sb, null);
    program.renderBody(new RenderContext(tc));
    tc.noMoreTokens();
    return sb.toString();
}

37. CajaTestCase#render()

Project: caja
File: CajaTestCase.java
public static String render(ParseTreeNode node) {
    if (node == null) {
        return null;
    }
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = node.makeRenderer(sb, null);
    node.render(new RenderContext(tc));
    tc.noMoreTokens();
    return sb.toString();
}

38. ParseTreeNodeTest#testRenderPostInsert3()

Project: caja
File: ParseTreeNodeTest.java
public final void testRenderPostInsert3() {
    doInsert(-1);
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = new JsPrettyPrinter(sb);
    root.render(new RenderContext(tc));
    tc.noMoreTokens();
    assertEquals("$0: {\n" + "  $1: {\n" + "    2;\n" + "    3;\n" + "    4;\n" + "  }\n" + "  $5: {\n" + "    6;\n" + "    7;\n" + "    8;\n" + "  }\n" + "  $9: {\n" + "    10;\n" + "    11;\n" + "    12;\n" + "  }\n" + "}", sb.toString());
}

39. ParseTreeNodeTest#testRenderPostInsert2()

Project: caja
File: ParseTreeNodeTest.java
public final void testRenderPostInsert2() {
    doInsert(1);
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = new JsPrettyPrinter(sb);
    root.render(new RenderContext(tc));
    tc.noMoreTokens();
    assertEquals("$0: {\n" + "  $9: {\n" + "    10;\n" + "    11;\n" + "    12;\n" + "  }\n" + "  $1: {\n" + "    2;\n" + "    3;\n" + "    4;\n" + "  }\n" + "  $5: {\n" + "    6;\n" + "    7;\n" + "    8;\n" + "  }\n" + "}", sb.toString());
}

40. ParseTreeNodeTest#testRenderPostInsert()

Project: caja
File: ParseTreeNodeTest.java
public final void testRenderPostInsert() {
    doInsert(5);
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = new JsPrettyPrinter(sb);
    root.render(new RenderContext(tc));
    tc.noMoreTokens();
    assertEquals("$0: {\n" + "  $1: {\n" + "    2;\n" + "    3;\n" + "    4;\n" + "  }\n" + "  $9: {\n" + "    10;\n" + "    11;\n" + "    12;\n" + "  }\n" + "  $5: {\n" + "    6;\n" + "    7;\n" + "    8;\n" + "  }\n" + "}", sb.toString());
}

41. ParserTest#assertMinified()

Project: caja
File: ParserTest.java
private void assertMinified(String code, String expectedRendering) throws Exception {
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = new JsMinimalPrinter(sb);
    RenderContext rc = new RenderContext(tc);
    js(fromString(code)).children().get(0).render(rc);
    tc.noMoreTokens();
    assertEquals(code, expectedRendering, sb.toString());
}

42. ParserTest#assertRender()

Project: caja
File: ParserTest.java
private void assertRender(String code, String expectedRendering) throws Exception {
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = new JsPrettyPrinter(sb);
    RenderContext rc = new RenderContext(tc);
    js(fromString(code)).children().get(0).render(rc);
    tc.noMoreTokens();
    assertEquals(code, expectedRendering, sb.toString());
}

43. RegexpLiteral#render()

Project: caja
File: RegexpLiteral.java
@Override
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    String body = value.getMatchText();
    String mods = value.getModifiers();
    if ("".equals(body) || !areRegexpModifiersValid(mods)) {
        // (new (/./.constructor))('', 'g')
        out.consume("(");
        out.consume("new");
        out.consume("(");
        out.consume("/./");
        out.consume(".");
        out.consume("constructor");
        out.consume(")");
        out.consume("(");
        StringLiteral.renderUnquotedValue(body, rc);
        out.consume(",");
        StringLiteral.renderUnquotedValue(mods, rc);
        out.consume(")");
        out.consume(")");
    } else {
        StringBuilder sb = new StringBuilder();
        sb.append('/');
        Escaping.normalizeRegex(body, sb);
        sb.append('/');
        sb.append(mods);
        out.consume(sb.toString());
    }
}

44. Operation#render()

Project: caja
File: Operation.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    switch(op.getType()) {
        case PREFIX:
            out.consume(op.getSymbol());
            renderParam(0, rc);
            if (op == Operator.CONSTRUCTOR) {
                // We emit zero-arg constructors without (), because it's shorter,
                // but that has implications in parenthesize() below.
                int n = children().size();
                if (1 < n) {
                    out.consume("(");
                    for (int k = 1; k < n; k++) {
                        if (1 < k) {
                            out.consume(",");
                        }
                        renderParam(k, rc);
                    }
                    out.consume(")");
                }
            }
            break;
        case POSTFIX:
            renderParam(0, rc);
            out.mark(FilePosition.endOfOrNull(getFilePosition()));
            out.consume(op.getSymbol());
            break;
        case INFIX:
            renderParam(0, rc);
            switch(getOperator()) {
                default:
                    // These spaces are necessary for security.
                    // If they are not present, then rendered javascript might include
                    // the strings ]]> or </script> which would prevent it from being
                    // safely embedded in HTML or XML.
                    out.consume(" ");
                    out.consume(op.getSymbol());
                    out.consume(" ");
                    renderParam(1, rc);
                    break;
                case MEMBER_ACCESS:
                    renderMemberAccess(rc);
                    break;
                case COMMA:
                    out.consume(op.getSymbol());
                    renderParam(1, rc);
                    break;
            }
            break;
        case BRACKET:
            // Note that FUNCTION_CALL is a BRACKET operator; this is why we can
            // have any number of child expressions, not just two.
            renderParam(0, rc);
            out.consume(op.getOpeningSymbol());
            boolean seen = false;
            for (ParseTreeNode e : children().subList(1, children().size())) {
                if (seen) {
                    out.consume(",");
                } else {
                    seen = true;
                }
                // make sure that comma operators are properly escaped
                if (!parenthesize(Operator.COMMA, false, (Expression) e)) {
                    e.render(rc);
                } else {
                    out.consume("(");
                    e.render(rc);
                    out.mark(FilePosition.endOfOrNull(e.getFilePosition()));
                    out.consume(")");
                }
            }
            out.mark(FilePosition.endOfOrNull(getFilePosition()));
            out.consume(op.getClosingSymbol());
            break;
        case TERNARY:
            renderParam(0, rc);
            out.consume(op.getOpeningSymbol());
            out.consume(" ");
            renderParam(1, rc);
            out.consume(op.getClosingSymbol());
            out.consume(" ");
            renderParam(2, rc);
            break;
    }
}

45. LabeledStmtWrapper#render()

Project: caja
File: LabeledStmtWrapper.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    String label = getRenderedLabel();
    if (null != label) {
        out.consume(label);
        out.consume(":");
    }
    getBody().render(rc);
}

46. ExpressionStmt#render()

Project: caja
File: ExpressionStmt.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    Expression e = getExpression();
    if (e instanceof FunctionConstructor || e instanceof ObjectConstructor || startsWithRegex(e)) {
        // We need to parenthesize Object constructors because otherwise an
        // object constructor with only one entry:
        //   { x : 4 }
        // is ambiguous.  It could be a block containing a labeled expression
        // statement, and depending on semicolon insertion.
        // We need to parenthesize Function constructors because otherwise
        // we might output something like
        //   function a () {
        //     ;
        //   };
        // which is interpreted as two statements -- a declaration and a noop for
        // the semicolon.
        // Rhino fails to parse
        //   if(...)/foo/.test(x)?bar:baz;
        // so we parenthesize operator trees whose left-most operand is a regex
        // literal.
        out.consume("(");
        e.render(rc);
        out.consume(")");
    } else {
        e.render(rc);
    }
}

47. Conditional#render()

Project: caja
File: Conditional.java
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    out.mark(getFilePosition());
    List<? extends ParseTreeNode> children = children();
    int i = 0;
    int n = children.size();
    for (; i + 2 <= n; i += 2) {
        Expression condition = (Expression) children.get(i);
        Statement body = (Statement) children.get(i + 1);
        if (i != 0) {
            out.consume("else");
        }
        out.consume("if");
        out.consume("(");
        condition.render(rc);
        out.consume(")");
        boolean hanging = body.hasHangingConditional();
        if (hanging) {
            out.consume("{");
        }
        body.renderBlock(rc, i + 2 < n);
        if (hanging) {
            out.consume("}");
        }
    }
    if (i < n) {
        Statement body = (Statement) children.get(i);
        out.consume("else");
        body.renderBlock(rc, false);
    }
}

48. Linter#render()

Project: caja
File: Linter.java
private static String render(ParseTreeNode node) {
    StringBuilder sb = new StringBuilder();
    TokenConsumer tc = node.makeRenderer(sb, null);
    node.render(new RenderContext(tc));
    tc.noMoreTokens();
    return sb.toString();
}

49. RealLiteral#render()

Project: caja
File: RealLiteral.java
@Override
public void render(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    // environment.
    if (Double.isNaN(value)) {
        out.consume("(");
        out.consume("0");
        out.consume("/");
        out.consume("0");
        out.consume(")");
    } else if (Double.isInfinite(value)) {
        out.consume("(");
        if (value < 0) {
            out.consume("-");
        }
        out.consume("1");
        out.consume("/");
        out.consume("0");
        out.consume(")");
    } else if (value == 0 && (1d / value) < 0) {
        out.consume("(");
        out.consume("-");
        out.consume("0");
        out.consume(")");
    } else {
        super.render(rc);
    }
}

50. Operation#renderMemberAccess()

Project: caja
File: Operation.java
private void renderMemberAccess(RenderContext rc) {
    TokenConsumer out = rc.getOut();
    if (isKeywordAccess()) {
        out.consume(Operator.SQUARE_BRACKET.getOpeningSymbol());
        StringLiteral.renderUnquotedValue(getMemberName(), rc);
        out.consume(Operator.SQUARE_BRACKET.getClosingSymbol());
    } else {
        out.consume(op.getSymbol());
        renderParam(1, rc);
    }
}

51. ObjProperty#renderPropertyName()

Project: caja
File: ObjProperty.java
protected final void renderPropertyName(RenderContext rc, boolean preferUnquoted) {
    StringLiteral key = (StringLiteral) children().get(0);
    TokenConsumer out = rc.getOut();
    boolean unquoted = preferUnquoted;
    switch(rc.propertyNameQuotingMode()) {
        case NO_QUOTES:
            unquoted = true;
            break;
        case PRESERVE_QUOTES:
            String name = key.getValue();
            if (name.length() == 0) {
                unquoted = true;
            } else {
                char ch = name.charAt(0);
                if (ch != '"' && ch != '\'') {
                    unquoted = true;
                }
            }
            break;
        default:
            break;
    }
    if (unquoted || preferUnquoted) {
        String uqVal = key.getUnquotedValue();
        if (ParserBase.isJavascriptIdentifier(uqVal) && !("get".equals(uqVal) || "set".equals(uqVal))) {
            out.mark(key.getFilePosition());
            out.consume(uqVal);
            return;
        }
    }
    key.render(rc);
}