From e42412afa1c7ae4e4ebb2f6bde24a6fe1eda75b6 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Sun, 10 Jul 2011 14:56:18 +0200 Subject: [PATCH] cleanup --- .../migration/ForCanBeForeachInspection.java | 62 ++++++++++++------- 1 file changed, 38 insertions(+), 24 deletions(-) diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/migration/ForCanBeForeachInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/migration/ForCanBeForeachInspection.java index 0e34811b5221..2f1a34d812a8 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/migration/ForCanBeForeachInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/migration/ForCanBeForeachInspection.java @@ -1128,9 +1128,8 @@ public class ForCanBeForeachInspection extends BaseInspection{ CommonClassNames.JAVA_UTIL_COLLECTION)){ return false; } - final String iteratorName = variable.getName(); final PsiExpression condition = forStatement.getCondition(); - if(!isHasNext(condition, iteratorName)){ + if(!isHasNext(condition, variable)){ return false; } final PsiStatement update = forStatement.getUpdate(); @@ -1141,10 +1140,10 @@ public class ForCanBeForeachInspection extends BaseInspection{ if(body == null){ return false; } - if(calculateCallsToIteratorNext(iteratorName, body) != 1){ + if(calculateCallsToIteratorNext(variable, body) != 1){ return false; } - if(isIteratorMethodCalled(iteratorName, body)){ + if(isIteratorMethodCalled(variable, body)){ return false; } return !VariableAccessUtils.variableIsReturned(variable, body) && @@ -1153,26 +1152,27 @@ public class ForCanBeForeachInspection extends BaseInspection{ body); } - private static int calculateCallsToIteratorNext(String iteratorName, + private static int calculateCallsToIteratorNext(PsiVariable iterator, PsiStatement body){ if(body == null){ return 0; } final NumCallsToIteratorNextVisitor visitor = - new NumCallsToIteratorNextVisitor(iteratorName); + new NumCallsToIteratorNextVisitor(iterator); body.accept(visitor); return visitor.getNumCallsToIteratorNext(); } - private static boolean isIteratorMethodCalled(String iteratorName, + private static boolean isIteratorMethodCalled(PsiVariable iterator, PsiStatement body){ final IteratorMethodCallVisitor visitor = - new IteratorMethodCallVisitor(iteratorName); + new IteratorMethodCallVisitor(iterator); body.accept(visitor); return visitor.isMethodCalled(); } - private static boolean isHasNext(PsiExpression condition, String iterator){ + private static boolean isHasNext(PsiExpression condition, + PsiVariable iterator){ if(!(condition instanceof PsiMethodCallExpression)){ return false; } @@ -1194,7 +1194,12 @@ public class ForCanBeForeachInspection extends BaseInspection{ if(qualifier == null){ return true; } - final String target = qualifier.getText(); + if (!(qualifier instanceof PsiReferenceExpression)) { + return false; + } + final PsiReferenceExpression referenceExpression = + (PsiReferenceExpression) qualifier; + final PsiElement target = referenceExpression.resolve(); return iterator.equals(target); } @@ -1382,10 +1387,10 @@ public class ForCanBeForeachInspection extends BaseInspection{ extends JavaRecursiveElementVisitor{ private int numCallsToIteratorNext = 0; - private final String iteratorName; + private final PsiVariable iterator; - NumCallsToIteratorNextVisitor(String iteratorName){ - this.iteratorName = iteratorName; + NumCallsToIteratorNextVisitor(PsiVariable iterator){ + this.iterator = iterator; } @Override public void visitMethodCallExpression( @@ -1402,8 +1407,13 @@ public class ForCanBeForeachInspection extends BaseInspection{ if(qualifier == null){ return; } - final String qualifierText = qualifier.getText(); - if(!iteratorName.equals(qualifierText)){ + if (!(qualifier instanceof PsiReferenceExpression)) { + return; + } + final PsiReferenceExpression referenceExpression = + (PsiReferenceExpression) qualifier; + final PsiElement target = referenceExpression.resolve(); + if(!iterator.equals(target)){ return; } numCallsToIteratorNext++; @@ -1416,11 +1426,12 @@ public class ForCanBeForeachInspection extends BaseInspection{ private static class IteratorMethodCallVisitor extends JavaRecursiveElementVisitor{ - private boolean methodCalled = false; - private final String iteratorName; - IteratorMethodCallVisitor(String iteratorName){ - this.iteratorName = iteratorName; + private boolean methodCalled = false; + private final PsiVariable iterator; + + IteratorMethodCallVisitor(PsiVariable iterator){ + this.iterator = iterator; } @Override public void visitElement(@NotNull PsiElement element){ @@ -1443,11 +1454,14 @@ public class ForCanBeForeachInspection extends BaseInspection{ } final PsiExpression qualifier = methodExpression.getQualifierExpression(); - if(qualifier != null){ - final String qualifierText = qualifier.getText(); - if(iteratorName.equals(qualifierText)){ - methodCalled = true; - } + if (!(qualifier instanceof PsiReferenceExpression)) { + return; + } + final PsiReferenceExpression referenceExpression = + (PsiReferenceExpression)qualifier; + final PsiElement target = referenceExpression.resolve(); + if (iterator.equals(target)) { + methodCalled = true; } }