Class JavaInputAstVisitor

  • All Implemented Interfaces:
    com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>

    public class JavaInputAstVisitor
    extends com.sun.source.util.TreePathScanner<java.lang.Void,​java.lang.Void>
    An AST visitor that builds a stream of Ops to format from the given CompilationUnitTree.
    • Constructor Summary

      Constructors 
      Constructor Description
      JavaInputAstVisitor​(OpsBuilder builder, int indentMultiplier)
      The Visitor constructor.
    • Method Summary

      All Methods Static Methods Instance Methods Concrete Methods 
      Modifier and Type Method Description
      private java.lang.Integer actualColumn​(com.sun.source.tree.ExpressionTree expression)  
      (package private) void addArguments​(java.util.List<? extends com.sun.source.tree.ExpressionTree> arguments, Indent plusIndent)
      Add arguments to a method invocation, etc.
      protected void addBodyDeclarations​(java.util.List<? extends com.sun.source.tree.Tree> bodyDeclarations, JavaInputAstVisitor.BracesOrNot braces, JavaInputAstVisitor.FirstDeclarationsOrNot first0)
      Add a list of declarations.
      (package private) void addTypeArguments​(java.util.List<? extends com.sun.source.tree.Tree> typeArguments, Indent plusIndent)
      Helper methods for method invocations.
      private boolean ambiguousUnaryOperator​(com.sun.source.tree.UnaryTree node, java.lang.String operatorName)  
      private void argList​(java.util.List<? extends com.sun.source.tree.ExpressionTree> arguments)  
      private int argumentsAreTabular​(java.util.List<? extends com.sun.source.tree.ExpressionTree> arguments)
      Returns the number of columns if the arguments arg laid out in a grid, or else -1.
      private static com.google.common.collect.ImmutableList<Op> breakFillList​(java.util.Optional<Output.BreakTag> breakTag)  
      private static com.google.common.collect.ImmutableList<Op> breakList​(java.util.Optional<Output.BreakTag> breakTag)  
      private static JavaInputAstVisitor.Direction canLocalHaveHorizontalAnnotations​(com.sun.source.tree.ModifiersTree modifiers)
      Can a local with a set of modifiers be declared with horizontal annotations? This is currently true if there is at most one parameterless annotation, and no others.
      private void checkForTypeAnnotation​(com.sun.source.tree.ImportTree node)  
      private void classDeclarationTypeList​(java.lang.String token, java.util.List<? extends com.sun.source.tree.Tree> types)  
      private void declareMany​(java.util.List<com.sun.source.tree.VariableTree> fragments, JavaInputAstVisitor.Direction annotationDirection)  
      protected int declareOne​(JavaInputAstVisitor.DeclarationKind kind, JavaInputAstVisitor.Direction annotationsDirection, java.util.Optional<com.sun.source.tree.ModifiersTree> modifiers, com.sun.source.tree.Tree type, javax.lang.model.element.Name name, java.lang.String op, java.lang.String equals, java.util.Optional<com.sun.source.tree.ExpressionTree> initializer, java.util.Optional<java.lang.String> trailing, java.util.Optional<com.sun.source.tree.ExpressionTree> receiverExpression, java.util.Optional<DimensionHelpers.TypeWithDims> typeWithDims)
      Declare one variable or variable-like thing.
      private void dotExpressionArgsAndParen​(com.sun.source.tree.ExpressionTree expression, Indent tyargIndent, Indent indent)  
      private void dotExpressionUpToArgs​(com.sun.source.tree.ExpressionTree expression, java.util.Optional<Output.BreakTag> tyargTag)  
      protected void dropEmptyDeclarations()
      Skips over extra semi-colons at the top-level, or in a class member declaration lists.
      private static boolean expressionsAreParallel​(java.util.List<java.util.List<com.sun.source.tree.ExpressionTree>> rows, int column, int atLeastM)
      Returns true if atLeastM of the expressions in the given column are the same kind.
      private static JavaInputAstVisitor.Direction fieldAnnotationDirection​(com.sun.source.tree.ModifiersTree modifiers)
      Should a field with a set of modifiers be declared with horizontal annotations? This is currently true if all annotations are parameterless annotations.
      private boolean fillFirstArgument​(com.sun.source.tree.ExpressionTree e, java.util.List<com.sun.source.tree.ExpressionTree> items, Indent indent)  
      private static com.google.common.collect.ImmutableList<Op> forceBreakList​(java.util.Optional<Output.BreakTag> breakTag)  
      private void formatAnnotationOrModifier​(java.util.Deque<JavaInputAstVisitor.AnnotationOrModifier> modifiers)  
      private void formatArrayIndices​(java.util.Deque<com.sun.source.tree.ExpressionTree> indices)
      Lays out one or more array indices.
      (package private) Output.BreakTag genSym()  
      private static com.sun.source.tree.ExpressionTree getArrayBase​(com.sun.source.tree.ExpressionTree node)
      Returns the base expression of an erray access, e.g.
      private static java.util.Deque<com.sun.source.tree.ExpressionTree> getArrayIndices​(com.sun.source.tree.ExpressionTree expression)
      Returns all array indices for the given expression, e.g.
      private static com.sun.source.tree.ExpressionTree getMethodReceiver​(com.sun.source.tree.MethodInvocationTree methodInvocation)  
      private static java.util.Optional<? extends Input.Token> getNextToken​(Input input, int position)  
      protected java.util.List<? extends com.sun.source.tree.Tree> getPermitsClause​(com.sun.source.tree.ClassTree node)
      Gets the permits clause for the given node.
      private static javax.lang.model.element.Name getSimpleName​(com.sun.source.tree.ImportTree importTree)  
      private boolean handleLogStatement​(com.sun.source.tree.MethodInvocationTree node)
      Special-cases log statements, to output:
      protected void handleModule​(boolean afterFirstToken, com.sun.source.tree.CompilationUnitTree node)  
      private static java.util.List<java.lang.Long> handleStream​(java.util.List<com.sun.source.tree.ExpressionTree> parts)  
      private boolean hasJavaDoc​(com.sun.source.tree.Tree bodyDeclaration)
      Does this declaration have javadoc preceding it?
      private boolean hasOnlyShortItems​(java.util.List<? extends com.sun.source.tree.ExpressionTree> expressions)  
      private boolean hasTrailingToken​(Input input, java.util.List<? extends com.sun.source.tree.Tree> nodes, java.lang.String token)
      Does this list of trees end with the specified token?
      private static <T> java.util.stream.Stream<java.lang.Long> indexes​(java.util.stream.Stream<T> stream, com.google.common.base.Predicate<T> predicate)  
      private boolean inExpression()  
      private static boolean isArrayValue​(com.sun.source.tree.ExpressionTree argument)  
      private boolean isFormatMethod​(java.util.List<? extends com.sun.source.tree.ExpressionTree> arguments)
      Identifies String formatting methods like String.format(java.lang.String, java.lang.Object...) which we prefer to format as:
      private static boolean isModifier​(java.lang.String token)  
      private boolean isStringConcat​(com.sun.source.tree.ExpressionTree first)  
      (package private) boolean isTypeAnnotation​(com.sun.source.tree.AnnotationTree annotationTree)  
      private static boolean isUnaryMinusLiteral​(java.lang.String literalTreeSource)  
      protected void markForPartialFormat()  
      private void maybeAddDims​(java.util.Deque<com.sun.source.tree.ExpressionTree> dimExpressions, java.util.Deque<java.util.List<? extends com.sun.source.tree.AnnotationTree>> annotations)
      The compiler does not always preserve the concrete syntax of annotated array dimensions, and mixed-notation array dimensions.
      private void maybeAddDims​(java.util.Deque<java.util.List<? extends com.sun.source.tree.AnnotationTree>> annotations)  
      private void methodBody​(com.sun.source.tree.MethodTree node)  
      (package private) static int rowLength​(java.util.List<? extends com.sun.source.tree.ExpressionTree> row)  
      java.lang.Void scan​(com.sun.source.tree.Tree tree, java.lang.Void unused)  
      private static com.google.common.collect.ImmutableList<java.lang.String> simpleNames​(java.util.Deque<com.sun.source.tree.ExpressionTree> stack)
      Returns the simple names of expressions in a "." chain.
      (package private) JavaInputAstVisitor.DeclarationModifiersAndTypeAnnotations splitModifiers​(com.sun.source.tree.ModifiersTree modifiersTree, java.util.List<? extends com.sun.source.tree.AnnotationTree> annotations)
      Examines the token stream to convert the modifiers for a declaration into a JavaInputAstVisitor.DeclarationModifiersAndTypeAnnotations.
      private void splitToken​(java.lang.String operatorName)  
      protected void sync​(com.sun.source.tree.Tree node)
      Sync to position in the input.
      protected void token​(java.lang.String token)
      Emit a Doc.Token.
      protected void token​(java.lang.String token, Indent plusIndentCommentsBefore)
      Emit a Doc.Token.
      (package private) void tokenBreakTrailingComment​(java.lang.String token, Indent breakAndIndentTrailingComment)
      Emit a Doc.Token, and breaks and indents trailing javadoc or block comments.
      java.lang.String toString()  
      private static com.google.common.collect.ImmutableSetMultimap<java.lang.String,​java.lang.String> typeAnnotations()  
      protected void typeDeclarationModifiers​(com.sun.source.tree.ModifiersTree modifiers)  
      protected void typeParametersRest​(java.util.List<? extends com.sun.source.tree.TypeParameterTree> typeParameters, Indent plusIndent)
      Does not omit the leading "<", which should be associated with the type name.
      private com.sun.tools.javac.tree.JCTree.Tag unaryTag​(com.sun.source.tree.ExpressionTree expression)  
      private static DimensionHelpers.TypeWithDims variableFragmentDims​(boolean afterFirstToken, int leadingDims, com.sun.source.tree.Tree type)  
      private static java.util.List<com.sun.source.tree.VariableTree> variableFragments​(com.google.common.collect.PeekingIterator<? extends com.sun.source.tree.Tree> it, com.sun.source.tree.Tree first)
      The parser expands multi-variable declarations into separate single-variable declarations.
      protected void variableName​(javax.lang.model.element.Name name)  
      (package private) void verticalAnnotations​(java.util.List<com.sun.source.tree.AnnotationTree> annotations)  
      boolean visit​(javax.lang.model.element.Name name)  
      (package private) void visitAndBreakModifiers​(com.sun.source.tree.ModifiersTree modifiers, JavaInputAstVisitor.Direction annotationDirection, java.util.Optional<Output.BreakTag> declarationAnnotationBreak)
      Output combined modifiers and annotations and the trailing break.
      private void visitAnnotatedArrayType​(com.sun.source.tree.Tree node)  
      java.lang.Void visitAnnotatedType​(com.sun.source.tree.AnnotatedTypeTree node, java.lang.Void unused)  
      java.lang.Void visitAnnotation​(com.sun.source.tree.AnnotationTree node, java.lang.Void unused)  
      void visitAnnotationArgument​(com.sun.source.tree.AssignmentTree node)  
      protected void visitAnnotations​(java.util.List<? extends com.sun.source.tree.AnnotationTree> annotations, JavaInputAstVisitor.BreakOrNot breakBefore, JavaInputAstVisitor.BreakOrNot breakAfter)
      Helper method for annotations.
      void visitAnnotationType​(com.sun.source.tree.ClassTree node)  
      java.lang.Void visitArrayAccess​(com.sun.source.tree.ArrayAccessTree node, java.lang.Void unused)  
      boolean visitArrayInitializer​(java.util.List<? extends com.sun.source.tree.ExpressionTree> expressions)  
      java.lang.Void visitArrayType​(com.sun.source.tree.ArrayTypeTree node, java.lang.Void unused)  
      java.lang.Void visitAssert​(com.sun.source.tree.AssertTree node, java.lang.Void unused)  
      java.lang.Void visitAssignment​(com.sun.source.tree.AssignmentTree node, java.lang.Void unused)  
      java.lang.Void visitBinary​(com.sun.source.tree.BinaryTree node, java.lang.Void unused)  
      protected void visitBlock​(com.sun.source.tree.BlockTree node, JavaInputAstVisitor.CollapseEmptyOrNot collapseEmptyOrNot, JavaInputAstVisitor.AllowLeadingBlankLine allowLeadingBlankLine, JavaInputAstVisitor.AllowTrailingBlankLine allowTrailingBlankLine)
      Helper method for blocks.
      java.lang.Void visitBlock​(com.sun.source.tree.BlockTree node, java.lang.Void unused)  
      java.lang.Void visitBreak​(com.sun.source.tree.BreakTree node, java.lang.Void unused)  
      java.lang.Void visitCase​(com.sun.source.tree.CaseTree node, java.lang.Void unused)  
      java.lang.Void visitCatch​(com.sun.source.tree.CatchTree node, java.lang.Void unused)  
      private void visitCatchClause​(com.sun.source.tree.CatchTree node, JavaInputAstVisitor.AllowTrailingBlankLine allowTrailingBlankLine)
      Helper method for CatchTrees.
      java.lang.Void visitClass​(com.sun.source.tree.ClassTree tree, java.lang.Void unused)  
      void visitClassDeclaration​(com.sun.source.tree.ClassTree node)  
      java.lang.Void visitCompilationUnit​(com.sun.source.tree.CompilationUnitTree node, java.lang.Void unused)  
      java.lang.Void visitCompoundAssignment​(com.sun.source.tree.CompoundAssignmentTree node, java.lang.Void unused)  
      java.lang.Void visitConditionalExpression​(com.sun.source.tree.ConditionalExpressionTree node, java.lang.Void unused)  
      java.lang.Void visitContinue​(com.sun.source.tree.ContinueTree node, java.lang.Void unused)  
      private void visitDirective​(java.lang.String name, java.lang.String separator, com.sun.source.tree.ExpressionTree nameExpression, @Nullable java.util.List<? extends com.sun.source.tree.ExpressionTree> items)  
      (package private) void visitDot​(com.sun.source.tree.ExpressionTree node0)
      Output a "." node.
      private void visitDotWithPrefix​(java.util.List<com.sun.source.tree.ExpressionTree> items, boolean needDot, java.util.Collection<java.lang.Integer> prefixes, Doc.FillMode prefixFillMode)
      Output a chain of dereferences where some prefix should be treated as a single syntactic unit, either because it looks like a type name or because there is only a single method invocation in the chain.
      java.lang.Void visitDoWhileLoop​(com.sun.source.tree.DoWhileLoopTree node, java.lang.Void unused)  
      java.lang.Void visitEmptyStatement​(com.sun.source.tree.EmptyStatementTree node, java.lang.Void unused)  
      java.lang.Void visitEnhancedForLoop​(com.sun.source.tree.EnhancedForLoopTree node, java.lang.Void unused)  
      private void visitEnumConstantDeclaration​(com.sun.source.tree.VariableTree enumConstant)  
      boolean visitEnumDeclaration​(com.sun.source.tree.ClassTree node)  
      java.lang.Void visitExports​(com.sun.source.tree.ExportsTree node, java.lang.Void unused)  
      java.lang.Void visitExpressionStatement​(com.sun.source.tree.ExpressionStatementTree node, java.lang.Void unused)  
      java.lang.Void visitForLoop​(com.sun.source.tree.ForLoopTree node, java.lang.Void unused)  
      protected void visitFormals​(java.util.Optional<com.sun.source.tree.VariableTree> receiver, java.util.List<? extends com.sun.source.tree.VariableTree> parameters)  
      java.lang.Void visitIdentifier​(com.sun.source.tree.IdentifierTree node, java.lang.Void unused)  
      java.lang.Void visitIf​(com.sun.source.tree.IfTree node, java.lang.Void unused)  
      java.lang.Void visitImport​(com.sun.source.tree.ImportTree node, java.lang.Void unused)  
      java.lang.Void visitInstanceOf​(com.sun.source.tree.InstanceOfTree node, java.lang.Void unused)  
      java.lang.Void visitIntersectionType​(com.sun.source.tree.IntersectionTypeTree node, java.lang.Void unused)  
      java.lang.Void visitLabeledStatement​(com.sun.source.tree.LabeledStatementTree node, java.lang.Void unused)  
      java.lang.Void visitLambdaExpression​(com.sun.source.tree.LambdaExpressionTree node, java.lang.Void unused)  
      java.lang.Void visitLiteral​(com.sun.source.tree.LiteralTree node, java.lang.Void unused)  
      java.lang.Void visitMemberReference​(com.sun.source.tree.MemberReferenceTree node, java.lang.Void unused)  
      java.lang.Void visitMemberSelect​(com.sun.source.tree.MemberSelectTree node, java.lang.Void unused)  
      java.lang.Void visitMethod​(com.sun.source.tree.MethodTree node, java.lang.Void unused)  
      java.lang.Void visitMethodInvocation​(com.sun.source.tree.MethodInvocationTree node, java.lang.Void unused)  
      private com.google.common.collect.ImmutableList<com.sun.source.tree.AnnotationTree> visitModifiers​(JavaInputAstVisitor.DeclarationModifiersAndTypeAnnotations splitModifiers, JavaInputAstVisitor.Direction annotationsDirection, java.util.Optional<Output.BreakTag> declarationAnnotationBreak)  
      protected com.google.common.collect.ImmutableList<com.sun.source.tree.AnnotationTree> visitModifiers​(com.sun.source.tree.ModifiersTree modifiersTree, JavaInputAstVisitor.Direction annotationsDirection, java.util.Optional<Output.BreakTag> declarationAnnotationBreak)
      Output combined modifiers and annotations and returns the trailing break.
      java.lang.Void visitModifiers​(com.sun.source.tree.ModifiersTree node, java.lang.Void unused)  
      protected com.google.common.collect.ImmutableList<com.sun.source.tree.AnnotationTree> visitModifiers​(com.sun.source.tree.ModifiersTree modifiersTree, java.util.List<? extends com.sun.source.tree.AnnotationTree> annotationTrees, JavaInputAstVisitor.Direction annotationsDirection, java.util.Optional<Output.BreakTag> declarationAnnotationBreak)  
      java.lang.Void visitModule​(com.sun.source.tree.ModuleTree node, java.lang.Void unused)  
      private void visitName​(com.sun.source.tree.Tree node)
      Helper method for import declarations, names, and qualified names.
      java.lang.Void visitNewArray​(com.sun.source.tree.NewArrayTree node, java.lang.Void unused)  
      java.lang.Void visitNewClass​(com.sun.source.tree.NewClassTree node, java.lang.Void unused)  
      java.lang.Void visitOpens​(com.sun.source.tree.OpensTree node, java.lang.Void unused)  
      private void visitPackage​(com.sun.source.tree.ExpressionTree packageName, java.util.List<? extends com.sun.source.tree.AnnotationTree> packageAnnotations)  
      java.lang.Void visitParameterizedType​(com.sun.source.tree.ParameterizedTypeTree node, java.lang.Void unused)  
      java.lang.Void visitParenthesized​(com.sun.source.tree.ParenthesizedTree node, java.lang.Void unused)  
      java.lang.Void visitPrimitiveType​(com.sun.source.tree.PrimitiveTypeTree node, java.lang.Void unused)  
      java.lang.Void visitProvides​(com.sun.source.tree.ProvidesTree node, java.lang.Void unused)  
      private void visitRegularDot​(java.util.List<com.sun.source.tree.ExpressionTree> items, boolean needDot)
      Output a "regular" chain of dereferences, possibly in builder-style.
      java.lang.Void visitRequires​(com.sun.source.tree.RequiresTree node, java.lang.Void unused)  
      java.lang.Void visitReturn​(com.sun.source.tree.ReturnTree node, java.lang.Void unused)  
      (package private) boolean visitSingleMemberAnnotation​(com.sun.source.tree.AnnotationTree node)  
      private void visitStatement​(com.sun.source.tree.StatementTree node, JavaInputAstVisitor.CollapseEmptyOrNot collapseEmptyOrNot, JavaInputAstVisitor.AllowLeadingBlankLine allowLeadingBlank, JavaInputAstVisitor.AllowTrailingBlankLine allowTrailingBlank)
      Helper method for statements.
      protected void visitStatements​(java.util.List<? extends com.sun.source.tree.StatementTree> statements)  
      protected void visitSwitch​(com.sun.source.tree.ExpressionTree expression, java.util.List<? extends com.sun.source.tree.CaseTree> cases)  
      java.lang.Void visitSwitch​(com.sun.source.tree.SwitchTree node, java.lang.Void unused)  
      java.lang.Void visitSynchronized​(com.sun.source.tree.SynchronizedTree node, java.lang.Void unused)  
      java.lang.Void visitThrow​(com.sun.source.tree.ThrowTree node, java.lang.Void unused)  
      private void visitThrowsClause​(java.util.List<? extends com.sun.source.tree.ExpressionTree> thrownExceptionTypes)  
      private void visitToDeclare​(JavaInputAstVisitor.DeclarationKind kind, JavaInputAstVisitor.Direction annotationsDirection, com.sun.source.tree.VariableTree node, java.util.Optional<com.sun.source.tree.ExpressionTree> initializer, java.lang.String equals, java.util.Optional<java.lang.String> trailing)  
      java.lang.Void visitTry​(com.sun.source.tree.TryTree node, java.lang.Void unused)  
      java.lang.Void visitTypeCast​(com.sun.source.tree.TypeCastTree node, java.lang.Void unused)  
      java.lang.Void visitTypeParameter​(com.sun.source.tree.TypeParameterTree node, java.lang.Void unused)  
      java.lang.Void visitUnary​(com.sun.source.tree.UnaryTree node, java.lang.Void unused)  
      java.lang.Void visitUnionType​(com.sun.source.tree.UnionTypeTree node, java.lang.Void unused)  
      private void visitUnionType​(com.sun.source.tree.VariableTree declaration)
      Formats a union type declaration in a catch clause.
      java.lang.Void visitUses​(com.sun.source.tree.UsesTree node, java.lang.Void unused)  
      java.lang.Void visitVariable​(com.sun.source.tree.VariableTree node, java.lang.Void unused)  
      (package private) void visitVariables​(java.util.List<com.sun.source.tree.VariableTree> fragments, JavaInputAstVisitor.DeclarationKind declarationKind, JavaInputAstVisitor.Direction annotationDirection)  
      java.lang.Void visitWhileLoop​(com.sun.source.tree.WhileLoopTree node, java.lang.Void unused)  
      java.lang.Void visitWildcard​(com.sun.source.tree.WildcardTree node, java.lang.Void unused)  
      private static void walkInfix​(int precedence, com.sun.source.tree.ExpressionTree expression, java.util.List<com.sun.source.tree.ExpressionTree> operands, java.util.List<java.lang.String> operators)
      Accumulate the operands and operators.
      • Methods inherited from class com.sun.source.util.TreePathScanner

        getCurrentPath, scan
      • Methods inherited from class com.sun.source.util.TreeScanner

        reduce, scan, visitErroneous, visitOther, visitPackage
      • Methods inherited from class java.lang.Object

        clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
    • Field Detail

      • TYPE_ANNOTATIONS

        private static final com.google.common.collect.ImmutableMultimap<java.lang.String,​java.lang.String> TYPE_ANNOTATIONS
      • indentMultiplier

        protected final int indentMultiplier
      • typeAnnotationSimpleNames

        private final java.util.Set<javax.lang.model.element.Name> typeAnnotationSimpleNames
      • MAX_ITEM_LENGTH_FOR_FILLING

        private static final int MAX_ITEM_LENGTH_FOR_FILLING
        Allow multi-line filling (of array initializers, argument lists, and boolean expressions) for items with length less than or equal to this threshold.
        See Also:
        Constant Field Values
      • inExpression

        private final java.util.Deque<java.lang.Boolean> inExpression
        A record of whether we have visited into an expression.
      • COMPACT_RECORD_CONSTRUCTOR

        protected static final long COMPACT_RECORD_CONSTRUCTOR
        See Also:
        Constant Field Values
      • LOG_METHODS

        static final com.google.common.collect.ImmutableSet<java.lang.String> LOG_METHODS
      • FORMAT_SPECIFIER

        private static final java.util.regex.Pattern FORMAT_SPECIFIER
    • Constructor Detail

      • JavaInputAstVisitor

        public JavaInputAstVisitor​(OpsBuilder builder,
                                   int indentMultiplier)
        The Visitor constructor.
        Parameters:
        builder - the OpsBuilder
    • Method Detail

      • typeAnnotations

        private static com.google.common.collect.ImmutableSetMultimap<java.lang.String,​java.lang.String> typeAnnotations()
      • breakList

        private static final com.google.common.collect.ImmutableList<Op> breakList​(java.util.Optional<Output.BreakTag> breakTag)
      • breakFillList

        private static final com.google.common.collect.ImmutableList<Op> breakFillList​(java.util.Optional<Output.BreakTag> breakTag)
      • forceBreakList

        private static final com.google.common.collect.ImmutableList<Op> forceBreakList​(java.util.Optional<Output.BreakTag> breakTag)
      • inExpression

        private boolean inExpression()
      • scan

        public java.lang.Void scan​(com.sun.source.tree.Tree tree,
                                   java.lang.Void unused)
        Overrides:
        scan in class com.sun.source.util.TreePathScanner<java.lang.Void,​java.lang.Void>
      • visitCompilationUnit

        public java.lang.Void visitCompilationUnit​(com.sun.source.tree.CompilationUnitTree node,
                                                   java.lang.Void unused)
        Specified by:
        visitCompilationUnit in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitCompilationUnit in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • handleModule

        protected void handleModule​(boolean afterFirstToken,
                                    com.sun.source.tree.CompilationUnitTree node)
      • dropEmptyDeclarations

        protected void dropEmptyDeclarations()
        Skips over extra semi-colons at the top-level, or in a class member declaration lists.
      • visitClass

        public java.lang.Void visitClass​(com.sun.source.tree.ClassTree tree,
                                         java.lang.Void unused)
        Specified by:
        visitClass in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitClass in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitAnnotationType

        public void visitAnnotationType​(com.sun.source.tree.ClassTree node)
      • visitArrayAccess

        public java.lang.Void visitArrayAccess​(com.sun.source.tree.ArrayAccessTree node,
                                               java.lang.Void unused)
        Specified by:
        visitArrayAccess in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitArrayAccess in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitNewArray

        public java.lang.Void visitNewArray​(com.sun.source.tree.NewArrayTree node,
                                            java.lang.Void unused)
        Specified by:
        visitNewArray in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitNewArray in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitArrayInitializer

        public boolean visitArrayInitializer​(java.util.List<? extends com.sun.source.tree.ExpressionTree> expressions)
      • hasOnlyShortItems

        private boolean hasOnlyShortItems​(java.util.List<? extends com.sun.source.tree.ExpressionTree> expressions)
      • visitArrayType

        public java.lang.Void visitArrayType​(com.sun.source.tree.ArrayTypeTree node,
                                             java.lang.Void unused)
        Specified by:
        visitArrayType in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitArrayType in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitAnnotatedArrayType

        private void visitAnnotatedArrayType​(com.sun.source.tree.Tree node)
      • visitAssert

        public java.lang.Void visitAssert​(com.sun.source.tree.AssertTree node,
                                          java.lang.Void unused)
        Specified by:
        visitAssert in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitAssert in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitAssignment

        public java.lang.Void visitAssignment​(com.sun.source.tree.AssignmentTree node,
                                              java.lang.Void unused)
        Specified by:
        visitAssignment in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitAssignment in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitBlock

        public java.lang.Void visitBlock​(com.sun.source.tree.BlockTree node,
                                         java.lang.Void unused)
        Specified by:
        visitBlock in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitBlock in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitCompoundAssignment

        public java.lang.Void visitCompoundAssignment​(com.sun.source.tree.CompoundAssignmentTree node,
                                                      java.lang.Void unused)
        Specified by:
        visitCompoundAssignment in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitCompoundAssignment in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitBreak

        public java.lang.Void visitBreak​(com.sun.source.tree.BreakTree node,
                                         java.lang.Void unused)
        Specified by:
        visitBreak in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitBreak in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitTypeCast

        public java.lang.Void visitTypeCast​(com.sun.source.tree.TypeCastTree node,
                                            java.lang.Void unused)
        Specified by:
        visitTypeCast in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitTypeCast in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitNewClass

        public java.lang.Void visitNewClass​(com.sun.source.tree.NewClassTree node,
                                            java.lang.Void unused)
        Specified by:
        visitNewClass in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitNewClass in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitConditionalExpression

        public java.lang.Void visitConditionalExpression​(com.sun.source.tree.ConditionalExpressionTree node,
                                                         java.lang.Void unused)
        Specified by:
        visitConditionalExpression in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitConditionalExpression in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitContinue

        public java.lang.Void visitContinue​(com.sun.source.tree.ContinueTree node,
                                            java.lang.Void unused)
        Specified by:
        visitContinue in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitContinue in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitDoWhileLoop

        public java.lang.Void visitDoWhileLoop​(com.sun.source.tree.DoWhileLoopTree node,
                                               java.lang.Void unused)
        Specified by:
        visitDoWhileLoop in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitDoWhileLoop in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitEmptyStatement

        public java.lang.Void visitEmptyStatement​(com.sun.source.tree.EmptyStatementTree node,
                                                  java.lang.Void unused)
        Specified by:
        visitEmptyStatement in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitEmptyStatement in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitEnhancedForLoop

        public java.lang.Void visitEnhancedForLoop​(com.sun.source.tree.EnhancedForLoopTree node,
                                                   java.lang.Void unused)
        Specified by:
        visitEnhancedForLoop in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitEnhancedForLoop in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitEnumConstantDeclaration

        private void visitEnumConstantDeclaration​(com.sun.source.tree.VariableTree enumConstant)
      • visitEnumDeclaration

        public boolean visitEnumDeclaration​(com.sun.source.tree.ClassTree node)
      • visitMemberReference

        public java.lang.Void visitMemberReference​(com.sun.source.tree.MemberReferenceTree node,
                                                   java.lang.Void unused)
        Specified by:
        visitMemberReference in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitMemberReference in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitExpressionStatement

        public java.lang.Void visitExpressionStatement​(com.sun.source.tree.ExpressionStatementTree node,
                                                       java.lang.Void unused)
        Specified by:
        visitExpressionStatement in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitExpressionStatement in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitVariable

        public java.lang.Void visitVariable​(com.sun.source.tree.VariableTree node,
                                            java.lang.Void unused)
        Specified by:
        visitVariable in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitVariable in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • variableFragmentDims

        private static DimensionHelpers.TypeWithDims variableFragmentDims​(boolean afterFirstToken,
                                                                          int leadingDims,
                                                                          com.sun.source.tree.Tree type)
      • visitForLoop

        public java.lang.Void visitForLoop​(com.sun.source.tree.ForLoopTree node,
                                           java.lang.Void unused)
        Specified by:
        visitForLoop in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitForLoop in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitIf

        public java.lang.Void visitIf​(com.sun.source.tree.IfTree node,
                                      java.lang.Void unused)
        Specified by:
        visitIf in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitIf in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitImport

        public java.lang.Void visitImport​(com.sun.source.tree.ImportTree node,
                                          java.lang.Void unused)
        Specified by:
        visitImport in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitImport in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • checkForTypeAnnotation

        private void checkForTypeAnnotation​(com.sun.source.tree.ImportTree node)
      • getSimpleName

        private static javax.lang.model.element.Name getSimpleName​(com.sun.source.tree.ImportTree importTree)
      • visitBinary

        public java.lang.Void visitBinary​(com.sun.source.tree.BinaryTree node,
                                          java.lang.Void unused)
        Specified by:
        visitBinary in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitBinary in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitInstanceOf

        public java.lang.Void visitInstanceOf​(com.sun.source.tree.InstanceOfTree node,
                                              java.lang.Void unused)
        Specified by:
        visitInstanceOf in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitInstanceOf in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitIntersectionType

        public java.lang.Void visitIntersectionType​(com.sun.source.tree.IntersectionTypeTree node,
                                                    java.lang.Void unused)
        Specified by:
        visitIntersectionType in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitIntersectionType in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitLabeledStatement

        public java.lang.Void visitLabeledStatement​(com.sun.source.tree.LabeledStatementTree node,
                                                    java.lang.Void unused)
        Specified by:
        visitLabeledStatement in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitLabeledStatement in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitLambdaExpression

        public java.lang.Void visitLambdaExpression​(com.sun.source.tree.LambdaExpressionTree node,
                                                    java.lang.Void unused)
        Specified by:
        visitLambdaExpression in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitLambdaExpression in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitAnnotation

        public java.lang.Void visitAnnotation​(com.sun.source.tree.AnnotationTree node,
                                              java.lang.Void unused)
        Specified by:
        visitAnnotation in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitAnnotation in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • isArrayValue

        private static boolean isArrayValue​(com.sun.source.tree.ExpressionTree argument)
      • visitAnnotationArgument

        public void visitAnnotationArgument​(com.sun.source.tree.AssignmentTree node)
      • visitAnnotatedType

        public java.lang.Void visitAnnotatedType​(com.sun.source.tree.AnnotatedTypeTree node,
                                                 java.lang.Void unused)
        Specified by:
        visitAnnotatedType in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitAnnotatedType in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitMethod

        public java.lang.Void visitMethod​(com.sun.source.tree.MethodTree node,
                                          java.lang.Void unused)
        Specified by:
        visitMethod in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitMethod in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • methodBody

        private void methodBody​(com.sun.source.tree.MethodTree node)
      • visitMethodInvocation

        public java.lang.Void visitMethodInvocation​(com.sun.source.tree.MethodInvocationTree node,
                                                    java.lang.Void unused)
        Specified by:
        visitMethodInvocation in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitMethodInvocation in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • handleLogStatement

        private boolean handleLogStatement​(com.sun.source.tree.MethodInvocationTree node)
        Special-cases log statements, to output:
        
         logger.atInfo().log(
             "Number of foos: %d, foos.size());
         

        Instead of:

        
         logger
             .atInfo()
             .log(
                 "Number of foos: %d, foos.size());
         
      • handleStream

        private static java.util.List<java.lang.Long> handleStream​(java.util.List<com.sun.source.tree.ExpressionTree> parts)
      • indexes

        private static <T> java.util.stream.Stream<java.lang.Long> indexes​(java.util.stream.Stream<T> stream,
                                                                           com.google.common.base.Predicate<T> predicate)
      • visitMemberSelect

        public java.lang.Void visitMemberSelect​(com.sun.source.tree.MemberSelectTree node,
                                                java.lang.Void unused)
        Specified by:
        visitMemberSelect in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitMemberSelect in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitLiteral

        public java.lang.Void visitLiteral​(com.sun.source.tree.LiteralTree node,
                                           java.lang.Void unused)
        Specified by:
        visitLiteral in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitLiteral in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • isUnaryMinusLiteral

        private static boolean isUnaryMinusLiteral​(java.lang.String literalTreeSource)
      • visitPackage

        private void visitPackage​(com.sun.source.tree.ExpressionTree packageName,
                                  java.util.List<? extends com.sun.source.tree.AnnotationTree> packageAnnotations)
      • visitParameterizedType

        public java.lang.Void visitParameterizedType​(com.sun.source.tree.ParameterizedTypeTree node,
                                                     java.lang.Void unused)
        Specified by:
        visitParameterizedType in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitParameterizedType in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitParenthesized

        public java.lang.Void visitParenthesized​(com.sun.source.tree.ParenthesizedTree node,
                                                 java.lang.Void unused)
        Specified by:
        visitParenthesized in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitParenthesized in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitUnary

        public java.lang.Void visitUnary​(com.sun.source.tree.UnaryTree node,
                                         java.lang.Void unused)
        Specified by:
        visitUnary in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitUnary in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • splitToken

        private void splitToken​(java.lang.String operatorName)
      • ambiguousUnaryOperator

        private boolean ambiguousUnaryOperator​(com.sun.source.tree.UnaryTree node,
                                               java.lang.String operatorName)
      • unaryTag

        private com.sun.tools.javac.tree.JCTree.Tag unaryTag​(com.sun.source.tree.ExpressionTree expression)
      • visitPrimitiveType

        public java.lang.Void visitPrimitiveType​(com.sun.source.tree.PrimitiveTypeTree node,
                                                 java.lang.Void unused)
        Specified by:
        visitPrimitiveType in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitPrimitiveType in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visit

        public boolean visit​(javax.lang.model.element.Name name)
      • visitReturn

        public java.lang.Void visitReturn​(com.sun.source.tree.ReturnTree node,
                                          java.lang.Void unused)
        Specified by:
        visitReturn in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitReturn in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitSingleMemberAnnotation

        boolean visitSingleMemberAnnotation​(com.sun.source.tree.AnnotationTree node)
      • visitCase

        public java.lang.Void visitCase​(com.sun.source.tree.CaseTree node,
                                        java.lang.Void unused)
        Specified by:
        visitCase in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitCase in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitSwitch

        public java.lang.Void visitSwitch​(com.sun.source.tree.SwitchTree node,
                                          java.lang.Void unused)
        Specified by:
        visitSwitch in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitSwitch in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitSwitch

        protected void visitSwitch​(com.sun.source.tree.ExpressionTree expression,
                                   java.util.List<? extends com.sun.source.tree.CaseTree> cases)
      • visitSynchronized

        public java.lang.Void visitSynchronized​(com.sun.source.tree.SynchronizedTree node,
                                                java.lang.Void unused)
        Specified by:
        visitSynchronized in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitSynchronized in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitThrow

        public java.lang.Void visitThrow​(com.sun.source.tree.ThrowTree node,
                                         java.lang.Void unused)
        Specified by:
        visitThrow in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitThrow in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitTry

        public java.lang.Void visitTry​(com.sun.source.tree.TryTree node,
                                       java.lang.Void unused)
        Specified by:
        visitTry in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitTry in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitClassDeclaration

        public void visitClassDeclaration​(com.sun.source.tree.ClassTree node)
      • visitTypeParameter

        public java.lang.Void visitTypeParameter​(com.sun.source.tree.TypeParameterTree node,
                                                 java.lang.Void unused)
        Specified by:
        visitTypeParameter in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitTypeParameter in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitUnionType

        public java.lang.Void visitUnionType​(com.sun.source.tree.UnionTypeTree node,
                                             java.lang.Void unused)
        Specified by:
        visitUnionType in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitUnionType in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitWhileLoop

        public java.lang.Void visitWhileLoop​(com.sun.source.tree.WhileLoopTree node,
                                             java.lang.Void unused)
        Specified by:
        visitWhileLoop in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitWhileLoop in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitWildcard

        public java.lang.Void visitWildcard​(com.sun.source.tree.WildcardTree node,
                                            java.lang.Void unused)
        Specified by:
        visitWildcard in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitWildcard in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • verticalAnnotations

        void verticalAnnotations​(java.util.List<com.sun.source.tree.AnnotationTree> annotations)
      • visitStatements

        protected void visitStatements​(java.util.List<? extends com.sun.source.tree.StatementTree> statements)
      • typeDeclarationModifiers

        protected void typeDeclarationModifiers​(com.sun.source.tree.ModifiersTree modifiers)
      • visitAndBreakModifiers

        void visitAndBreakModifiers​(com.sun.source.tree.ModifiersTree modifiers,
                                    JavaInputAstVisitor.Direction annotationDirection,
                                    java.util.Optional<Output.BreakTag> declarationAnnotationBreak)
        Output combined modifiers and annotations and the trailing break.
      • visitModifiers

        public java.lang.Void visitModifiers​(com.sun.source.tree.ModifiersTree node,
                                             java.lang.Void unused)
        Specified by:
        visitModifiers in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitModifiers in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitModifiers

        @CheckReturnValue
        protected com.google.common.collect.ImmutableList<com.sun.source.tree.AnnotationTree> visitModifiers​(com.sun.source.tree.ModifiersTree modifiersTree,
                                                                                                             JavaInputAstVisitor.Direction annotationsDirection,
                                                                                                             java.util.Optional<Output.BreakTag> declarationAnnotationBreak)
        Output combined modifiers and annotations and returns the trailing break.
      • visitModifiers

        @CheckReturnValue
        protected com.google.common.collect.ImmutableList<com.sun.source.tree.AnnotationTree> visitModifiers​(com.sun.source.tree.ModifiersTree modifiersTree,
                                                                                                             java.util.List<? extends com.sun.source.tree.AnnotationTree> annotationTrees,
                                                                                                             JavaInputAstVisitor.Direction annotationsDirection,
                                                                                                             java.util.Optional<Output.BreakTag> declarationAnnotationBreak)
      • isTypeAnnotation

        boolean isTypeAnnotation​(com.sun.source.tree.AnnotationTree annotationTree)
      • isModifier

        private static boolean isModifier​(java.lang.String token)
      • visitCatch

        public java.lang.Void visitCatch​(com.sun.source.tree.CatchTree node,
                                         java.lang.Void unused)
        Specified by:
        visitCatch in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitCatch in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitUnionType

        private void visitUnionType​(com.sun.source.tree.VariableTree declaration)
        Formats a union type declaration in a catch clause.
      • walkInfix

        private static void walkInfix​(int precedence,
                                      com.sun.source.tree.ExpressionTree expression,
                                      java.util.List<com.sun.source.tree.ExpressionTree> operands,
                                      java.util.List<java.lang.String> operators)
        Accumulate the operands and operators.
      • visitFormals

        protected void visitFormals​(java.util.Optional<com.sun.source.tree.VariableTree> receiver,
                                    java.util.List<? extends com.sun.source.tree.VariableTree> parameters)
      • visitThrowsClause

        private void visitThrowsClause​(java.util.List<? extends com.sun.source.tree.ExpressionTree> thrownExceptionTypes)
      • visitIdentifier

        public java.lang.Void visitIdentifier​(com.sun.source.tree.IdentifierTree node,
                                              java.lang.Void unused)
        Specified by:
        visitIdentifier in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitIdentifier in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitModule

        public java.lang.Void visitModule​(com.sun.source.tree.ModuleTree node,
                                          java.lang.Void unused)
        Specified by:
        visitModule in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitModule in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitDirective

        private void visitDirective​(java.lang.String name,
                                    java.lang.String separator,
                                    com.sun.source.tree.ExpressionTree nameExpression,
                                    @Nullable java.util.List<? extends com.sun.source.tree.ExpressionTree> items)
      • visitExports

        public java.lang.Void visitExports​(com.sun.source.tree.ExportsTree node,
                                           java.lang.Void unused)
        Specified by:
        visitExports in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitExports in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitOpens

        public java.lang.Void visitOpens​(com.sun.source.tree.OpensTree node,
                                         java.lang.Void unused)
        Specified by:
        visitOpens in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitOpens in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitProvides

        public java.lang.Void visitProvides​(com.sun.source.tree.ProvidesTree node,
                                            java.lang.Void unused)
        Specified by:
        visitProvides in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitProvides in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitRequires

        public java.lang.Void visitRequires​(com.sun.source.tree.RequiresTree node,
                                            java.lang.Void unused)
        Specified by:
        visitRequires in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitRequires in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitUses

        public java.lang.Void visitUses​(com.sun.source.tree.UsesTree node,
                                        java.lang.Void unused)
        Specified by:
        visitUses in interface com.sun.source.tree.TreeVisitor<java.lang.Void,​java.lang.Void>
        Overrides:
        visitUses in class com.sun.source.util.TreeScanner<java.lang.Void,​java.lang.Void>
      • visitName

        private void visitName​(com.sun.source.tree.Tree node)
        Helper method for import declarations, names, and qualified names.
      • visitToDeclare

        private void visitToDeclare​(JavaInputAstVisitor.DeclarationKind kind,
                                    JavaInputAstVisitor.Direction annotationsDirection,
                                    com.sun.source.tree.VariableTree node,
                                    java.util.Optional<com.sun.source.tree.ExpressionTree> initializer,
                                    java.lang.String equals,
                                    java.util.Optional<java.lang.String> trailing)
      • typeParametersRest

        protected void typeParametersRest​(java.util.List<? extends com.sun.source.tree.TypeParameterTree> typeParameters,
                                          Indent plusIndent)
        Does not omit the leading "<", which should be associated with the type name.
      • visitDot

        void visitDot​(com.sun.source.tree.ExpressionTree node0)
        Output a "." node.
        Parameters:
        node0 - the "." node
      • visitRegularDot

        private void visitRegularDot​(java.util.List<com.sun.source.tree.ExpressionTree> items,
                                     boolean needDot)
        Output a "regular" chain of dereferences, possibly in builder-style. Break before every dot.
        Parameters:
        items - in the chain
        needDot - whether a leading dot is needed
      • fillFirstArgument

        private boolean fillFirstArgument​(com.sun.source.tree.ExpressionTree e,
                                          java.util.List<com.sun.source.tree.ExpressionTree> items,
                                          Indent indent)
      • visitDotWithPrefix

        private void visitDotWithPrefix​(java.util.List<com.sun.source.tree.ExpressionTree> items,
                                        boolean needDot,
                                        java.util.Collection<java.lang.Integer> prefixes,
                                        Doc.FillMode prefixFillMode)
        Output a chain of dereferences where some prefix should be treated as a single syntactic unit, either because it looks like a type name or because there is only a single method invocation in the chain.
        Parameters:
        items - in the chain
        needDot - whether a leading dot is needed
        prefixes - the terminal indices of 'prefixes' of the expression that should be treated as a syntactic unit
      • simpleNames

        private static com.google.common.collect.ImmutableList<java.lang.String> simpleNames​(java.util.Deque<com.sun.source.tree.ExpressionTree> stack)
        Returns the simple names of expressions in a "." chain.
      • dotExpressionUpToArgs

        private void dotExpressionUpToArgs​(com.sun.source.tree.ExpressionTree expression,
                                           java.util.Optional<Output.BreakTag> tyargTag)
      • getArrayBase

        private static com.sun.source.tree.ExpressionTree getArrayBase​(com.sun.source.tree.ExpressionTree node)
        Returns the base expression of an erray access, e.g. given foo[0][0] returns foo.
      • getMethodReceiver

        private static com.sun.source.tree.ExpressionTree getMethodReceiver​(com.sun.source.tree.MethodInvocationTree methodInvocation)
      • dotExpressionArgsAndParen

        private void dotExpressionArgsAndParen​(com.sun.source.tree.ExpressionTree expression,
                                               Indent tyargIndent,
                                               Indent indent)
      • formatArrayIndices

        private void formatArrayIndices​(java.util.Deque<com.sun.source.tree.ExpressionTree> indices)
        Lays out one or more array indices. Does not output the expression for the array itself.
      • getArrayIndices

        private static java.util.Deque<com.sun.source.tree.ExpressionTree> getArrayIndices​(com.sun.source.tree.ExpressionTree expression)
        Returns all array indices for the given expression, e.g. given foo[0][0] returns the expressions for [0][0].
      • addTypeArguments

        void addTypeArguments​(java.util.List<? extends com.sun.source.tree.Tree> typeArguments,
                              Indent plusIndent)
        Helper methods for method invocations.
      • addArguments

        void addArguments​(java.util.List<? extends com.sun.source.tree.ExpressionTree> arguments,
                          Indent plusIndent)
        Add arguments to a method invocation, etc. The arguments indented plusFour, filled, from the current indent. The arguments may be output two at a time if they seem to be arguments to a map constructor, etc.
        Parameters:
        arguments - the arguments
        plusIndent - the extra indent for the arguments
      • argList

        private void argList​(java.util.List<? extends com.sun.source.tree.ExpressionTree> arguments)
      • isFormatMethod

        private boolean isFormatMethod​(java.util.List<? extends com.sun.source.tree.ExpressionTree> arguments)
        Identifies String formatting methods like String.format(java.lang.String, java.lang.Object...) which we prefer to format as:
        
         String.format(
             "the format string: %s %s %s",
             arg, arg, arg);
         

        And not:

        
         String.format(
             "the format string: %s %s %s",
             arg,
             arg,
             arg);
         
      • isStringConcat

        private boolean isStringConcat​(com.sun.source.tree.ExpressionTree first)
      • argumentsAreTabular

        private int argumentsAreTabular​(java.util.List<? extends com.sun.source.tree.ExpressionTree> arguments)
        Returns the number of columns if the arguments arg laid out in a grid, or else -1.
      • rowLength

        static int rowLength​(java.util.List<? extends com.sun.source.tree.ExpressionTree> row)
      • actualColumn

        private java.lang.Integer actualColumn​(com.sun.source.tree.ExpressionTree expression)
      • expressionsAreParallel

        private static boolean expressionsAreParallel​(java.util.List<java.util.List<com.sun.source.tree.ExpressionTree>> rows,
                                                      int column,
                                                      int atLeastM)
        Returns true if atLeastM of the expressions in the given column are the same kind.
      • declareOne

        protected int declareOne​(JavaInputAstVisitor.DeclarationKind kind,
                                 JavaInputAstVisitor.Direction annotationsDirection,
                                 java.util.Optional<com.sun.source.tree.ModifiersTree> modifiers,
                                 com.sun.source.tree.Tree type,
                                 javax.lang.model.element.Name name,
                                 java.lang.String op,
                                 java.lang.String equals,
                                 java.util.Optional<com.sun.source.tree.ExpressionTree> initializer,
                                 java.util.Optional<java.lang.String> trailing,
                                 java.util.Optional<com.sun.source.tree.ExpressionTree> receiverExpression,
                                 java.util.Optional<DimensionHelpers.TypeWithDims> typeWithDims)
        Declare one variable or variable-like thing.
      • variableName

        protected void variableName​(javax.lang.model.element.Name name)
      • maybeAddDims

        private void maybeAddDims​(java.util.Deque<java.util.List<? extends com.sun.source.tree.AnnotationTree>> annotations)
      • maybeAddDims

        private void maybeAddDims​(java.util.Deque<com.sun.source.tree.ExpressionTree> dimExpressions,
                                  java.util.Deque<java.util.List<? extends com.sun.source.tree.AnnotationTree>> annotations)
        The compiler does not always preserve the concrete syntax of annotated array dimensions, and mixed-notation array dimensions. Use look-ahead to preserve the original syntax.

        It is assumed that any number of regular dimension specifiers ([] with no annotations) may be present in the input.

        Parameters:
        dimExpressions - an ordered list of dimension expressions (e.g. the 0 in new int[0]
        annotations - an ordered list of type annotations grouped by dimension (e.g. [[@A, @B], [@C]] for int @A [] @B @C []
      • declareMany

        private void declareMany​(java.util.List<com.sun.source.tree.VariableTree> fragments,
                                 JavaInputAstVisitor.Direction annotationDirection)
      • getPermitsClause

        protected java.util.List<? extends com.sun.source.tree.Tree> getPermitsClause​(com.sun.source.tree.ClassTree node)
        Gets the permits clause for the given node. This is only available in Java 15 and later.
      • classDeclarationTypeList

        private void classDeclarationTypeList​(java.lang.String token,
                                              java.util.List<? extends com.sun.source.tree.Tree> types)
      • variableFragments

        private static java.util.List<com.sun.source.tree.VariableTree> variableFragments​(com.google.common.collect.PeekingIterator<? extends com.sun.source.tree.Tree> it,
                                                                                          com.sun.source.tree.Tree first)
        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.

        e.g. int x, y; is parsed as int x; int y;.

      • hasJavaDoc

        private boolean hasJavaDoc​(com.sun.source.tree.Tree bodyDeclaration)
        Does this declaration have javadoc preceding it?
      • getNextToken

        private static java.util.Optional<? extends Input.Token> getNextToken​(Input input,
                                                                              int position)
      • hasTrailingToken

        private boolean hasTrailingToken​(Input input,
                                         java.util.List<? extends com.sun.source.tree.Tree> nodes,
                                         java.lang.String token)
        Does this list of trees end with the specified token?
      • canLocalHaveHorizontalAnnotations

        private static JavaInputAstVisitor.Direction canLocalHaveHorizontalAnnotations​(com.sun.source.tree.ModifiersTree modifiers)
        Can a local with a set of modifiers be declared with horizontal annotations? This is currently true if there is at most one parameterless annotation, and no others.
        Parameters:
        modifiers - the list of ModifiersTrees
        Returns:
        whether the local can be declared with horizontal annotations
      • fieldAnnotationDirection

        private static JavaInputAstVisitor.Direction fieldAnnotationDirection​(com.sun.source.tree.ModifiersTree modifiers)
        Should a field with a set of modifiers be declared with horizontal annotations? This is currently true if all annotations are parameterless annotations.
      • token

        protected final void token​(java.lang.String token)
        Emit a Doc.Token.
        Parameters:
        token - the String to wrap in a Doc.Token
      • token

        protected final void token​(java.lang.String token,
                                   Indent plusIndentCommentsBefore)
        Emit a Doc.Token.
        Parameters:
        token - the String to wrap in a Doc.Token
        plusIndentCommentsBefore - extra indent for comments before this token
      • tokenBreakTrailingComment

        final void tokenBreakTrailingComment​(java.lang.String token,
                                             Indent breakAndIndentTrailingComment)
        Emit a Doc.Token, and breaks and indents trailing javadoc or block comments.
      • markForPartialFormat

        protected void markForPartialFormat()
      • sync

        protected final void sync​(com.sun.source.tree.Tree node)
        Sync to position in the input. If we've skipped outputting any tokens that were present in the input tokens, output them here and complain.
        Parameters:
        node - the ASTNode holding the input position
      • toString

        public final java.lang.String toString()
        Overrides:
        toString in class java.lang.Object