diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/DetailAstImpl.java b/src/main/java/com/puppycrawl/tools/checkstyle/DetailAstImpl.java index 9962b789511e..93d790c3a32e 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/DetailAstImpl.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/DetailAstImpl.java @@ -374,6 +374,11 @@ public DetailAstImpl getFirstChild() { return (DetailAstImpl) super.getFirstChild(); } + @Override + public boolean hasChildren() { + return getFirstChild() != null; + } + /** * Clears the child count for the ast instance. * @param ast The ast to clear. diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/api/DetailAST.java b/src/main/java/com/puppycrawl/tools/checkstyle/api/DetailAST.java index 44de0dcb42fe..b951b7c5180c 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/api/DetailAST.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/api/DetailAST.java @@ -118,4 +118,10 @@ public interface DetailAST { */ int getNumberOfChildren(); + /** + * Returns whether this AST has any children. + * + * @return {@code true} if this AST has any children. + */ + boolean hasChildren(); } diff --git a/src/test/java/com/puppycrawl/tools/checkstyle/DetailAstImplTest.java b/src/test/java/com/puppycrawl/tools/checkstyle/DetailAstImplTest.java index 7d9ed7e0f3bf..b5aa0d90ac7c 100644 --- a/src/test/java/com/puppycrawl/tools/checkstyle/DetailAstImplTest.java +++ b/src/test/java/com/puppycrawl/tools/checkstyle/DetailAstImplTest.java @@ -19,6 +19,7 @@ package com.puppycrawl.tools.checkstyle; +import static com.google.common.truth.Truth.assertWithMessage; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -134,6 +135,22 @@ public void testGetChildCount() throws Exception { assertEquals(firstLevelA, firstLevelB.getPreviousSibling(), "Invalid previous sibling"); } + @Test + public void testHasChildren() throws Exception { + final DetailAstImpl root = new DetailAstImpl(); + final DetailAstImpl child = new DetailAstImpl(); + + root.setFirstChild(child); + getSetParentMethod().invoke(child, root); + + assertWithMessage("Root node should have children") + .that(root.hasChildren()) + .isTrue(); + assertWithMessage("Child node should have no children") + .that(child.hasChildren()) + .isFalse(); + } + @Test public void testGetChildCountType() throws Exception { final DetailAstImpl root = new DetailAstImpl();