1 /////////////////////////////////////////////////////////////////////////////////////////////// 2 // checkstyle: Checks Java source code and other text files for adherence to a set of rules. 3 // Copyright (C) 2001-2024 the original author or authors. 4 // 5 // This library is free software; you can redistribute it and/or 6 // modify it under the terms of the GNU Lesser General Public 7 // License as published by the Free Software Foundation; either 8 // version 2.1 of the License, or (at your option) any later version. 9 // 10 // This library is distributed in the hope that it will be useful, 11 // but WITHOUT ANY WARRANTY; without even the implied warranty of 12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 // Lesser General Public License for more details. 14 // 15 // You should have received a copy of the GNU Lesser General Public 16 // License along with this library; if not, write to the Free Software 17 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 18 /////////////////////////////////////////////////////////////////////////////////////////////// 19 20 package com.puppycrawl.tools.checkstyle.api; 21 22 /** 23 * An interface of Checkstyle's AST nodes for traversing trees generated from the 24 * Java code. The main purpose of this interface is to abstract away ANTLR 25 * specific classes from API package so other libraries won't require it. 26 * 27 * @see <a href="https://www.antlr.org/">ANTLR Website</a> 28 */ 29 public interface DetailAST { 30 31 /** 32 * Returns the number of child nodes one level below this node. That is, 33 * does not recurse down the tree. 34 * 35 * @return the number of child nodes 36 */ 37 int getChildCount(); 38 39 /** 40 * Returns the number of direct child tokens that have the specified type. 41 * 42 * @param type the token type to match 43 * @return the number of matching token 44 */ 45 int getChildCount(int type); 46 47 /** 48 * Returns the parent token. 49 * 50 * @return the parent token 51 */ 52 DetailAST getParent(); 53 54 /** 55 * Gets the text of this AST. 56 * 57 * @return the text. 58 */ 59 String getText(); 60 61 /** 62 * Gets the type of this AST. 63 * 64 * @return the type. 65 */ 66 int getType(); 67 68 /** 69 * Gets line number. 70 * 71 * @return the line number 72 */ 73 int getLineNo(); 74 75 /** 76 * Gets column number. 77 * 78 * @return the column number 79 */ 80 int getColumnNo(); 81 82 /** 83 * Gets the last child node. 84 * 85 * @return the last child node 86 */ 87 DetailAST getLastChild(); 88 89 /** 90 * Checks if this branch of the parse tree contains a token 91 * of the provided type. 92 * 93 * @param type a TokenType 94 * @return true if and only if this branch (including this node) 95 * contains a token of type {@code type}. 96 * @deprecated 97 * Usage of this method is no longer accepted. We encourage 98 * traversal of subtrees to be written per the needs of each check 99 * to avoid unintended side effects. 100 * @noinspection DeprecatedIsStillUsed, RedundantSuppression 101 * @noinspectionreason DeprecatedIsStillUsed - Method used in unit testing 102 * @noinspectionreason RedundantSuppression - Inspections shows false positive for 103 * redundant suppression, see 104 * <a href="https://github.com/checkstyle/checkstyle/issues/12359">here</a> 105 * for more details. 106 */ 107 @Deprecated(since = "8.43") 108 boolean branchContains(int type); 109 110 /** 111 * Returns the previous sibling or null if no such sibling exists. 112 * 113 * @return the previous sibling or null if no such sibling exists. 114 */ 115 DetailAST getPreviousSibling(); 116 117 /** 118 * Returns the first child token that makes a specified type. 119 * 120 * @param type the token type to match 121 * @return the matching token, or null if no match 122 */ 123 DetailAST findFirstToken(int type); 124 125 /** 126 * Get the next sibling in line after this one. 127 * 128 * @return the next sibling or null if none. 129 */ 130 DetailAST getNextSibling(); 131 132 /** 133 * Get the first child of this AST. 134 * 135 * @return the first child or null if none. 136 */ 137 DetailAST getFirstChild(); 138 139 /** 140 * Get number of children of this AST. 141 * 142 * @return the number of children. 143 * @deprecated This method will be removed in a future release. 144 * Use {@link #getChildCount()} instead. 145 */ 146 @Deprecated(since = "8.30") 147 int getNumberOfChildren(); 148 149 /** 150 * Returns whether this AST has any children. 151 * 152 * @return {@code true} if this AST has any children. 153 */ 154 boolean hasChildren(); 155 }