fix for EI_EXPOSE_REP. Issue #778

This commit is contained in:
Roman Ivanov 2015-04-08 08:33:04 -07:00
parent 01b9628d34
commit a8f5fa3225
2 changed files with 20 additions and 17 deletions

View File

@ -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;
}
}

View File

@ -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)