diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ArrayContentsAccessedVisitor.java b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ArrayContentsAccessedVisitor.java index a73eb445aaf0..8bf6bb34eddb 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ArrayContentsAccessedVisitor.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/psiutils/ArrayContentsAccessedVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2003-2010 Dave Griffith, Bas Leijdekkers + * Copyright 2003-2011 Dave Griffith, Bas Leijdekkers * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,6 +16,7 @@ package com.siyeh.ig.psiutils; import com.intellij.psi.*; +import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; class ArrayContentsAccessedVisitor extends JavaRecursiveElementVisitor{ @@ -24,7 +25,6 @@ class ArrayContentsAccessedVisitor extends JavaRecursiveElementVisitor{ private final PsiVariable variable; public ArrayContentsAccessedVisitor(@NotNull PsiVariable variable){ - super(); this.variable = variable; } @@ -40,11 +40,11 @@ class ArrayContentsAccessedVisitor extends JavaRecursiveElementVisitor{ } final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)qualifier; - final PsiElement referent = referenceExpression.resolve(); - if(referent == null){ + final PsiElement target = referenceExpression.resolve(); + if(target == null){ return; } - if(!referent.equals(variable)){ + if(!target.equals(variable)){ return; } accessed = true; @@ -72,11 +72,36 @@ class ArrayContentsAccessedVisitor extends JavaRecursiveElementVisitor{ } final PsiReferenceExpression referenceExpression = (PsiReferenceExpression)arrayExpression; - final PsiElement referent = referenceExpression.resolve(); - if(referent == null){ + final PsiElement target = referenceExpression.resolve(); + if(target == null){ return; } - if(referent.equals(variable)){ + if(target.equals(variable)){ + accessed = true; + } + } + + @Override + public void visitReferenceExpression(PsiReferenceExpression expression){ + if(accessed){ + return; + } + super.visitReferenceExpression(expression); + @NonNls final String referenceName = expression.getReferenceName(); + if(!"length".equals(referenceName)){ + return; + } + final PsiExpression qualifier = expression.getQualifierExpression(); + if(!(qualifier instanceof PsiReferenceExpression)){ + return; + } + final PsiReferenceExpression referenceExpression = + (PsiReferenceExpression) qualifier; + final PsiElement target = referenceExpression.resolve(); + if(target == null){ + return; + } + if(target.equals(variable)){ accessed = true; } } diff --git a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_array_read_write/MismatchedArrayReadWrite.java b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_array_read_write/MismatchedArrayReadWrite.java index 2084fd8cb339..fb979ce96f33 100644 --- a/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_array_read_write/MismatchedArrayReadWrite.java +++ b/plugins/InspectionGadgets/test/com/siyeh/igtest/bugs/mismatched_array_read_write/MismatchedArrayReadWrite.java @@ -59,7 +59,7 @@ public class MismatchedArrayReadWrite { final int[][] allResults = new int[10][10]; for (int row = 0; row < allResults.length; row++) { final int[] rowData = allResults[row]; - for (int col = 0; col < rowData.length; col++) { + for (int col = 0; col < 10; col++) { rowData[col] = 100 * 7; } @@ -100,4 +100,9 @@ class Test{ Object[] arr = otherArr.clone(); for (int i = 0; i < 10; i++) arr[i] = i; } + + void foo4() { + int[] array = {1, 2, 4}; + assert array.length == 3; + } }