diff --git a/docs/releasenotes.html b/docs/releasenotes.html index 5edc1a675..a4be3fe21 100644 --- a/docs/releasenotes.html +++ b/docs/releasenotes.html @@ -130,6 +130,10 @@
  • JDK 1.4 classes used by usage checks. (bug 876570)
  • +
  • Error in reporting UnusedLocalVariable for + multi-dimensional array index. + (bug 878608)
  • +

    diff --git a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/usage/transmogrify/Resolver.java b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/usage/transmogrify/Resolver.java index c5aba97c0..4d71f77e7 100644 --- a/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/usage/transmogrify/Resolver.java +++ b/src/checkstyle/com/puppycrawl/tools/checkstyle/checks/usage/transmogrify/Resolver.java @@ -928,11 +928,19 @@ public class Resolver extends DefinitionTraverser { SymTabAST arrayNode = (SymTabAST) (node.getFirstChild()); SymTabAST exprNode = (SymTabAST) (arrayNode.getNextSibling()); + //resolve index expressions + while (arrayNode.getType() == TokenTypes.INDEX_OP) { + resolveExpression(exprNode, location, context, referencePhase); + arrayNode = (SymTabAST) (arrayNode.getFirstChild()); + exprNode = (SymTabAST) (arrayNode.getNextSibling()); + } + ArrayDef array = (ArrayDef) resolveExpression(arrayNode, location, context, referencePhase); + resolveExpression(exprNode, location, context, referencePhase); return array.getType(); diff --git a/src/testinputs/com/puppycrawl/tools/checkstyle/usage/InputUnusedLocal.java b/src/testinputs/com/puppycrawl/tools/checkstyle/usage/InputUnusedLocal.java index 76f1ec6bc..e96b052f7 100644 --- a/src/testinputs/com/puppycrawl/tools/checkstyle/usage/InputUnusedLocal.java +++ b/src/testinputs/com/puppycrawl/tools/checkstyle/usage/InputUnusedLocal.java @@ -47,4 +47,14 @@ public class InputUnusedLocal if (file != null) { } } + + /** tests array index references */ + public void testArrayIndex() + { + int [][][] a = new int[1][1][1]; + int i = 0; + int j = 0; + int k = 0; + a[i][j][k]++; + } }