diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/AbstractJavadocCheck.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/AbstractJavadocCheck.java index 8a2b2e0af..77e7f90f8 100755 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/AbstractJavadocCheck.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/AbstractJavadocCheck.java @@ -276,25 +276,25 @@ public abstract class AbstractJavadocCheck extends Check /** * Converts ParseTree (that is generated by ANTLRv4) to DetailNode tree. * - * @param rootParseTree root node of ParseTree + * @param parseTreeNode root node of ParseTree * @return root of DetailNode tree */ - private DetailNode convertParseTree2DetailNode(ParseTree rootParseTree) + private DetailNode convertParseTree2DetailNode(ParseTree parseTreeNode) { - final ParseTree currentParseTreeNode = rootParseTree; - final JavadocNodeImpl rootJavadocNode = createJavadocNode(currentParseTreeNode, null, -1); + final JavadocNodeImpl rootJavadocNode = createJavadocNode(parseTreeNode, null, -1); - int childCount = currentParseTreeNode.getChildCount(); - JavadocNodeImpl[] children = (JavadocNodeImpl[]) rootJavadocNode.getChildren(); + int childCount = parseTreeNode.getChildCount(); + JavadocNodeImpl[] children = new JavadocNodeImpl[childCount]; for (int i = 0; i < childCount; i++) { - final JavadocNodeImpl child = createJavadocNode(currentParseTreeNode.getChild(i) + final JavadocNodeImpl child = createJavadocNode(parseTreeNode.getChild(i) , rootJavadocNode, i); children[i] = child; } + rootJavadocNode.setChildren(children); JavadocNodeImpl currentJavadocParent = rootJavadocNode; - ParseTree currentParseTreeParent = currentParseTreeNode; + ParseTree parseTreeParent = parseTreeNode; while (currentJavadocParent != null) { children = (JavadocNodeImpl[]) currentJavadocParent.getChildren(); @@ -302,10 +302,10 @@ public abstract class AbstractJavadocCheck extends Check for (int i = 0; i < childCount; i++) { final JavadocNodeImpl currentJavadocNode = children[i]; - final ParseTree currentParseTreeNodeChild = currentParseTreeParent.getChild(i); + final ParseTree currentParseTreeNodeChild = parseTreeParent.getChild(i); - final JavadocNodeImpl[] subChildren = (JavadocNodeImpl[]) currentJavadocNode - .getChildren(); + final JavadocNodeImpl[] subChildren = + new JavadocNodeImpl[currentJavadocNode.getChildren().length]; for (int j = 0; j < subChildren.length; j++) { final JavadocNodeImpl child = @@ -314,23 +314,24 @@ public abstract class AbstractJavadocCheck extends Check subChildren[j] = child; } + currentJavadocNode.setChildren(subChildren); } if (childCount > 0) { currentJavadocParent = children[0]; - currentParseTreeParent = currentParseTreeParent.getChild(0); + parseTreeParent = parseTreeParent.getChild(0); } else { JavadocNodeImpl nextJavadocSibling = (JavadocNodeImpl) JavadocUtils .getNextSibling(currentJavadocParent); - ParseTree nextParseTreeSibling = getNextSibling(currentParseTreeParent); + ParseTree nextParseTreeSibling = getNextSibling(parseTreeParent); if (nextJavadocSibling == null) { JavadocNodeImpl tempJavadocParent = (JavadocNodeImpl) currentJavadocParent.getParent(); - ParseTree tempParseTreeParent = currentParseTreeParent.getParent(); + ParseTree tempParseTreeParent = parseTreeParent.getParent(); while (nextJavadocSibling == null && tempJavadocParent != null) { @@ -344,7 +345,7 @@ public abstract class AbstractJavadocCheck extends Check } } currentJavadocParent = nextJavadocSibling; - currentParseTreeParent = nextParseTreeSibling; + parseTreeParent = nextParseTreeSibling; } } diff --git a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocNodeImpl.java b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocNodeImpl.java index 719292b9f..9b352dc01 100644 --- a/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocNodeImpl.java +++ b/src/main/java/com/puppycrawl/tools/checkstyle/checks/javadoc/JavadocNodeImpl.java @@ -20,6 +20,8 @@ package com.puppycrawl.tools.checkstyle.checks.javadoc; import com.puppycrawl.tools.checkstyle.api.DetailNode; +import java.util.Arrays; + /** * * Implementation of DetailNode interface that is mutable. @@ -91,7 +93,7 @@ public class JavadocNodeImpl implements DetailNode @Override public DetailNode[] getChildren() { - return children; + return Arrays.copyOf(children, children.length); } @Override @@ -128,7 +130,7 @@ public class JavadocNodeImpl implements DetailNode public void setChildren(DetailNode[] children) { - this.children = children; + this.children = Arrays.copyOf(children, children.length); } public void setParent(DetailNode parent)