Class JavaInputAstVisitor

java.lang.Object
com.sun.source.util.TreeScanner<Void,Void>
com.sun.source.util.TreePathScanner<Void,Void>
com.google.googlejavaformat.java.JavaInputAstVisitor
All Implemented Interfaces:
com.sun.source.tree.TreeVisitor<Void,Void>
Direct Known Subclasses:
Java17InputAstVisitor

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

    • TYPE_ANNOTATIONS

      private static final com.google.common.collect.ImmutableMultimap<String,String> TYPE_ANNOTATIONS
    • builder

      protected final OpsBuilder builder
    • ZERO

      protected static final Indent.Const ZERO
    • indentMultiplier

      protected final int indentMultiplier
    • minusTwo

      protected final Indent.Const minusTwo
    • minusFour

      protected final Indent.Const minusFour
    • plusTwo

      protected final Indent.Const plusTwo
    • plusFour

      protected final Indent.Const plusFour
    • typeAnnotationSimpleNames

      private final Set<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:
    • inExpression

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

      protected static final long COMPACT_RECORD_CONSTRUCTOR
      See Also:
    • RECORD

      protected static final long RECORD
      See Also:
    • LOG_METHODS

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

      private static final Pattern FORMAT_SPECIFIER
  • Constructor Details

    • JavaInputAstVisitor

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

    • typeAnnotations

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

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

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

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

      private boolean inExpression()
    • scan

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

      public Void visitCompilationUnit(com.sun.source.tree.CompilationUnitTree node, Void unused)
      Specified by:
      visitCompilationUnit in interface com.sun.source.tree.TreeVisitor<Void,Void>
      Overrides:
      visitCompilationUnit in class com.sun.source.util.TreeScanner<Void,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 Void visitClass(com.sun.source.tree.ClassTree tree, Void unused)
      Specified by:
      visitClass in interface com.sun.source.tree.TreeVisitor<Void,Void>
      Overrides:
      visitClass in class com.sun.source.util.TreeScanner<Void,Void>
    • visitAnnotationType

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

      void visitVariables(List<com.sun.source.tree.VariableTree> fragments, JavaInputAstVisitor.DeclarationKind declarationKind, JavaInputAstVisitor.Direction annotationDirection)
    • variableFragmentDims

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

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

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

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

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

      private static Name getSimpleName(com.sun.source.tree.ImportTree importTree)
    • visitBinary

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

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

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

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

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

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

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

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

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

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

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

      public Void visitMethodInvocation(com.sun.source.tree.MethodInvocationTree node, Void unused)
      Specified by:
      visitMethodInvocation in interface com.sun.source.tree.TreeVisitor<Void,Void>
      Overrides:
      visitMethodInvocation in class com.sun.source.util.TreeScanner<Void,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 List<Long> handleStream(List<com.sun.source.tree.ExpressionTree> parts)
    • indexes

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

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

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

      private static boolean isUnaryMinusLiteral(String literalTreeSource)
    • visitPackage

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

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

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

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

      private void splitToken(String operatorName)
    • ambiguousUnaryOperator

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

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

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

      public boolean visit(Name name)
    • visitReturn

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

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

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

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

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

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

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

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

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

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

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

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

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

      protected void visitAnnotations(List<? extends com.sun.source.tree.AnnotationTree> annotations, JavaInputAstVisitor.BreakOrNot breakBefore, JavaInputAstVisitor.BreakOrNot breakAfter)
      Helper method for annotations.
    • verticalAnnotations

      void verticalAnnotations(List<com.sun.source.tree.AnnotationTree> annotations)
    • visitBlock

      protected void visitBlock(com.sun.source.tree.BlockTree node, JavaInputAstVisitor.CollapseEmptyOrNot collapseEmptyOrNot, JavaInputAstVisitor.AllowLeadingBlankLine allowLeadingBlankLine, JavaInputAstVisitor.AllowTrailingBlankLine allowTrailingBlankLine)
      Helper method for blocks.
    • visitStatement

      private void visitStatement(com.sun.source.tree.StatementTree node, JavaInputAstVisitor.CollapseEmptyOrNot collapseEmptyOrNot, JavaInputAstVisitor.AllowLeadingBlankLine allowLeadingBlank, JavaInputAstVisitor.AllowTrailingBlankLine allowTrailingBlank)
      Helper method for statements.
    • visitStatements

      protected void visitStatements(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, Optional<Output.BreakTag> declarationAnnotationBreak)
      Output combined modifiers and annotations and the trailing break.
    • visitModifiers

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

      @CheckReturnValue protected com.google.common.collect.ImmutableList<com.sun.source.tree.AnnotationTree> visitModifiers(com.sun.source.tree.ModifiersTree modifiersTree, JavaInputAstVisitor.Direction annotationsDirection, 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, List<? extends com.sun.source.tree.AnnotationTree> annotationTrees, JavaInputAstVisitor.Direction annotationsDirection, Optional<Output.BreakTag> declarationAnnotationBreak)
    • visitModifiers

      @CheckReturnValue private com.google.common.collect.ImmutableList<com.sun.source.tree.AnnotationTree> visitModifiers(JavaInputAstVisitor.DeclarationModifiersAndTypeAnnotations splitModifiers, JavaInputAstVisitor.Direction annotationsDirection, Optional<Output.BreakTag> declarationAnnotationBreak)
    • splitModifiers

      JavaInputAstVisitor.DeclarationModifiersAndTypeAnnotations splitModifiers(com.sun.source.tree.ModifiersTree modifiersTree, List<? extends com.sun.source.tree.AnnotationTree> annotations)
      Examines the token stream to convert the modifiers for a declaration into a JavaInputAstVisitor.DeclarationModifiersAndTypeAnnotations.
    • formatAnnotationOrModifier

      private void formatAnnotationOrModifier(Deque<JavaInputAstVisitor.AnnotationOrModifier> modifiers)
    • isTypeAnnotation

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

      private static boolean isModifier(String token)
    • visitCatch

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

      private void visitCatchClause(com.sun.source.tree.CatchTree node, JavaInputAstVisitor.AllowTrailingBlankLine allowTrailingBlankLine)
      Helper method for CatchTrees.
    • 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, List<com.sun.source.tree.ExpressionTree> operands, List<String> operators)
      Accumulate the operands and operators.
    • visitFormals

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

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

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

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

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

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

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

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

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

      public Void visitUses(com.sun.source.tree.UsesTree node, Void unused)
      Specified by:
      visitUses in interface com.sun.source.tree.TreeVisitor<Void,Void>
      Overrides:
      visitUses in class com.sun.source.util.TreeScanner<Void,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, Optional<com.sun.source.tree.ExpressionTree> initializer, String equals, Optional<String> trailing)
    • typeParametersRest

      protected void typeParametersRest(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(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, List<com.sun.source.tree.ExpressionTree> items, Indent indent)
    • visitDotWithPrefix

      private void visitDotWithPrefix(List<com.sun.source.tree.ExpressionTree> items, boolean needDot, Collection<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<String> simpleNames(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, 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(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 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(List<? extends com.sun.source.tree.Tree> typeArguments, Indent plusIndent)
      Helper methods for method invocations.
    • addArguments

      void addArguments(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(List<? extends com.sun.source.tree.ExpressionTree> arguments)
    • isFormatMethod

      private boolean isFormatMethod(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(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(List<? extends com.sun.source.tree.ExpressionTree> row)
    • actualColumn

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

      private static boolean expressionsAreParallel(List<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, Optional<com.sun.source.tree.ModifiersTree> modifiers, com.sun.source.tree.Tree type, Name name, String op, String equals, Optional<com.sun.source.tree.ExpressionTree> initializer, Optional<String> trailing, Optional<com.sun.source.tree.ExpressionTree> receiverExpression, Optional<DimensionHelpers.TypeWithDims> typeWithDims)
      Declare one variable or variable-like thing.
    • variableName

      protected void variableName(Name name)
    • maybeAddDims

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

      private void maybeAddDims(Deque<com.sun.source.tree.ExpressionTree> dimExpressions, Deque<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(List<com.sun.source.tree.VariableTree> fragments, JavaInputAstVisitor.Direction annotationDirection)
    • addBodyDeclarations

      protected void addBodyDeclarations(List<? extends com.sun.source.tree.Tree> bodyDeclarations, JavaInputAstVisitor.BracesOrNot braces, JavaInputAstVisitor.FirstDeclarationsOrNot first0)
      Add a list of declarations.
    • getPermitsClause

      protected 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(String token, List<? extends com.sun.source.tree.Tree> types)
    • variableFragments

      private static 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 Optional<? extends Input.Token> getNextToken(Input input, int position)
    • hasTrailingToken

      private boolean hasTrailingToken(Input input, List<? extends com.sun.source.tree.Tree> nodes, 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(String token)
      Emit a Doc.Token.
      Parameters:
      token - the String to wrap in a Doc.Token
    • token

      protected final void token(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(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
    • genSym

      final Output.BreakTag genSym()
    • toString

      public final String toString()
      Overrides:
      toString in class Object