List of usage examples for com.google.common.collect PeekingIterator next
@Override E next();
The objects returned by consecutive calls to #peek() then #next() are guaranteed to be equal to each other.
From source file:com.google.googlejavaformat.java.JavaInputAstVisitor.java
private void visitStatements(List<? extends StatementTree> statements) { boolean first = true; PeekingIterator<StatementTree> it = Iterators.peekingIterator(statements.iterator()); dropEmptyDeclarations();/*w w w .j ava2 s .com*/ while (it.hasNext()) { StatementTree tree = it.next(); builder.forcedBreak(); if (!first) { builder.blankLineWanted(BlankLineWanted.PRESERVE); } markForPartialFormat(); first = false; List<VariableTree> fragments = variableFragments(it, tree); if (!fragments.isEmpty()) { visitVariables(fragments, DeclarationKind.NONE, canLocalHaveHorizontalAnnotations(fragments.get(0).getModifiers())); } else { scan(tree, null); } } }
From source file:com.google.googlejavaformat.java.JavaInputAstVisitor.java
@Override public Void visitForLoop(ForLoopTree node, Void unused) { sync(node);// ww w. ja v a 2 s . c o m token("for"); builder.space(); token("("); builder.open(plusFour); builder.open(node.getInitializer().size() > 1 && node.getInitializer().get(0).getKind() == Tree.Kind.EXPRESSION_STATEMENT ? plusFour : ZERO); if (!node.getInitializer().isEmpty()) { if (node.getInitializer().get(0).getKind() == VARIABLE) { PeekingIterator<StatementTree> it = Iterators.peekingIterator(node.getInitializer().iterator()); visitVariables(variableFragments(it, it.next()), DeclarationKind.NONE, Direction.HORIZONTAL); } else { boolean first = true; builder.open(ZERO); for (StatementTree t : node.getInitializer()) { if (!first) { token(","); builder.breakOp(" "); } scan(((ExpressionStatementTree) t).getExpression(), null); first = false; } token(";"); builder.close(); } } else { token(";"); } builder.close(); builder.breakOp(" "); if (node.getCondition() != null) { scan(node.getCondition(), null); } token(";"); if (!node.getUpdate().isEmpty()) { builder.breakOp(" "); builder.open(node.getUpdate().size() <= 1 ? ZERO : plusFour); boolean firstUpdater = true; for (ExpressionStatementTree updater : node.getUpdate()) { if (!firstUpdater) { token(","); builder.breakToFill(" "); } scan(updater.getExpression(), null); firstUpdater = false; } builder.guessToken(";"); builder.close(); } else { builder.space(); } builder.close(); token(")"); visitStatement(node.getStatement(), CollapseEmptyOrNot.YES, AllowLeadingBlankLine.YES, AllowTrailingBlankLine.NO); return null; }
From source file:com.google.googlejavaformat.java.JavaInputAstVisitor.java
/** Add a list of declarations. */ void addBodyDeclarations(List<? extends Tree> bodyDeclarations, BracesOrNot braces, FirstDeclarationsOrNot first0) { if (bodyDeclarations.isEmpty()) { if (braces.isYes()) { builder.space();/* ww w . ja v a2s . com*/ tokenBreakTrailingComment("{", plusTwo); builder.blankLineWanted(BlankLineWanted.NO); builder.open(ZERO); token("}", plusTwo); builder.close(); } } else { if (braces.isYes()) { builder.space(); tokenBreakTrailingComment("{", plusTwo); builder.open(ZERO); } builder.open(plusTwo); boolean first = first0.isYes(); boolean lastOneGotBlankLineBefore = false; PeekingIterator<Tree> it = Iterators.peekingIterator(bodyDeclarations.iterator()); while (it.hasNext()) { Tree bodyDeclaration = it.next(); dropEmptyDeclarations(); builder.forcedBreak(); boolean thisOneGetsBlankLineBefore = bodyDeclaration.getKind() != VARIABLE || hasJavaDoc(bodyDeclaration); if (first) { builder.blankLineWanted(PRESERVE); } else if (!first && (thisOneGetsBlankLineBefore || lastOneGotBlankLineBefore)) { builder.blankLineWanted(YES); } markForPartialFormat(); if (bodyDeclaration.getKind() == VARIABLE) { visitVariables(variableFragments(it, bodyDeclaration), DeclarationKind.FIELD, fieldAnnotationDirection(((VariableTree) bodyDeclaration).getModifiers())); } else { scan(bodyDeclaration, null); } first = false; lastOneGotBlankLineBefore = thisOneGetsBlankLineBefore; } dropEmptyDeclarations(); builder.forcedBreak(); builder.close(); builder.forcedBreak(); markForPartialFormat(); if (braces.isYes()) { builder.blankLineWanted(BlankLineWanted.NO); token("}", plusTwo); builder.close(); } } }
From source file:com.google.googlejavaformat.java.JavaInputAstVisitor.java
/** Returns the number of columns if the arguments arg laid out in a grid, or else {@code -1}. */ private int argumentsAreTabular(List<? extends ExpressionTree> arguments) { if (arguments.isEmpty()) { return -1; }/* w w w.j a v a 2 s. c om*/ List<List<ExpressionTree>> rows = new ArrayList<>(); PeekingIterator<ExpressionTree> it = Iterators.peekingIterator(arguments.iterator()); int start0 = actualColumn(it.peek()); { List<ExpressionTree> row = new ArrayList<>(); row.add(it.next()); while (it.hasNext() && actualColumn(it.peek()) > start0) { row.add(it.next()); } if (!it.hasNext()) { return -1; } if (rowLength(row) <= 1) { return -1; } rows.add(row); } while (it.hasNext()) { List<ExpressionTree> row = new ArrayList<>(); int start = actualColumn(it.peek()); if (start != start0) { return -1; } row.add(it.next()); while (it.hasNext() && actualColumn(it.peek()) > start0) { row.add(it.next()); } rows.add(row); } int size0 = rows.get(0).size(); if (!expressionsAreParallel(rows, 0, rows.size())) { return -1; } for (int i = 1; i < size0; i++) { if (!expressionsAreParallel(rows, i, rows.size() / 2 + 1)) { return -1; } } // if there are only two rows, they must be the same length if (rows.size() == 2) { if (size0 == rows.get(1).size()) { return size0; } return -1; } // allow a ragged trailing row for >= 3 columns for (int i = 1; i < rows.size() - 1; i++) { if (size0 != rows.get(i).size()) { return -1; } } if (size0 < getLast(rows).size()) { return -1; } return size0; }
From source file:com.google.googlejavaformat.java.JavaInputAstVisitor.java
/** * The parser expands multi-variable declarations into separate single-variable declarations. All * of the fragments in the original declaration have the same start position, so we use that as a * signal to collect them and preserve the multi-variable declaration in the output. * * <p>e.g. {@code int x, y;} is parsed as {@code int x; int y;}. *//*from w ww . ja v a 2s. c o m*/ private List<VariableTree> variableFragments(PeekingIterator<? extends Tree> it, Tree first) { List<VariableTree> fragments = new ArrayList<>(); if (first.getKind() == VARIABLE) { int start = getStartPosition(first); fragments.add((VariableTree) first); while (it.hasNext() && it.peek().getKind() == VARIABLE && getStartPosition(it.peek()) == start) { fragments.add((VariableTree) it.next()); } } return fragments; }