Class JavaAstVisitor

java.lang.Object
org.antlr.v4.runtime.tree.AbstractParseTreeVisitor<DetailAstImpl>
All Implemented Interfaces:
JavaLanguageParserVisitor<DetailAstImpl>, org.antlr.v4.runtime.tree.ParseTreeVisitor<DetailAstImpl>

public final class JavaAstVisitor extends JavaLanguageParserBaseVisitor<DetailAstImpl>
Visitor class used to build Checkstyle's Java AST from the parse tree produced by JavaLanguageParser. In each visit... method, we visit the children of a node (which correspond to subrules) or create terminal nodes (tokens), and return a subtree as a result.

Example:

The following package declaration:

 package com.puppycrawl.tools.checkstyle;
 

Will be parsed by the packageDeclaration rule from JavaLanguageParser.g4:

 packageDeclaration
     : annotations[true] LITERAL_PACKAGE qualifiedName SEMI
     ;
 

We override the visitPackageDeclaration method generated by ANTLR in JavaLanguageParser at visitPackageDeclaration(JavaLanguageParser.PackageDeclarationContext) to create a subtree based on the subrules and tokens found in the packageDeclaration subrule accordingly, thus producing the following AST:

 PACKAGE_DEF -> package
 |--ANNOTATIONS -> ANNOTATIONS
 |--DOT -> .
 |   |--DOT -> .
 |   |   |--DOT -> .
 |   |   |   |--IDENT -> com
 |   |   |   `--IDENT -> puppycrawl
 |   |   `--IDENT -> tools
 |   `--IDENT -> checkstyle
 `--SEMI -> ;
 

See https://github.com/checkstyle/checkstyle/pull/10434 for a good example of how to make changes to Checkstyle's grammar and AST.

The order of visit... methods in JavaAstVisitor.java and production rules in JavaLanguageParser.g4 should be consistent to ease maintenance.