From d9e89c117758a3c87daa00f91ba54667828f8fe8 Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 2 Nov 2016 09:26:26 +0100 Subject: [PATCH] IG: use set instead of walking a list --- ...OptionalGetWithoutIsPresentInspection.java | 44 +++++++++---------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspection.java b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspection.java index 6c5709751272..54a979c5303d 100644 --- a/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspection.java +++ b/plugins/InspectionGadgets/InspectionGadgetsAnalysis/src/com/siyeh/ig/bugs/OptionalGetWithoutIsPresentInspection.java @@ -27,11 +27,11 @@ import com.siyeh.ig.BaseInspection; import com.siyeh.ig.BaseInspectionVisitor; import com.siyeh.ig.psiutils.ParenthesesUtils; import com.siyeh.ig.psiutils.TypeUtils; +import gnu.trove.THashSet; import org.jetbrains.annotations.Nls; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; -import java.util.List; +import java.util.Set; /** * @author Bas Leijdekkers @@ -58,11 +58,14 @@ public class OptionalGetWithoutIsPresentInspection extends BaseInspection { private static class OptionalGetWithoutIsPresentVisitor extends BaseInspectionVisitor { - private final List seen = new ArrayList<>(); + private final Set seen = new THashSet<>(); @Override public void visitMethodCallExpression(PsiMethodCallExpression expression) { super.visitMethodCallExpression(expression); + if (seen.contains(expression)) { + return; + } final PsiReferenceExpression methodExpression = expression.getMethodExpression(); final String name = methodExpression.getReferenceName(); if (!isOptionalGetMethodName(name)) { @@ -76,12 +79,6 @@ public class OptionalGetWithoutIsPresentInspection extends BaseInspection { if (!TypeUtils.isOptional(type)) { return; } - for (PsiExpression checked : seen) { - if (PsiEquivalenceUtil.areElementsEquivalent(qualifier, checked)) { - return; - } - } - seen.add(qualifier); PsiElement context = PsiTreeUtil.getParentOfType(expression, PsiMember.class, PsiLambdaExpression.class); if (context instanceof PsiMethod) { context = ((PsiMethod)context).getBody(); @@ -108,19 +105,22 @@ public class OptionalGetWithoutIsPresentInspection extends BaseInspection { final DfaInstructionState[] states = super.visitMethodCall(instruction, runner, memState); final PsiCall callExpression = instruction.getCallExpression(); - if ((callExpression instanceof PsiMethodCallExpression) && - isCallOnSameQualifier((PsiMethodCallExpression)callExpression, qualifierValue, qualifier)) { - final PsiMethod targetMethod = instruction.getTargetMethod(); - if (targetMethod != null) { - final PsiClass aClass = targetMethod.getContainingClass(); - if (TypeUtils.isOptional(aClass)) { - final String methodName = targetMethod.getName(); - if ("isPresent".equals(methodName)) { - memState.pop(); - memState.push(runner.getFactory().getConstFactory().getFalse()); - } - else if (isOptionalGetMethodName(methodName)) { - registerMethodCallError((PsiMethodCallExpression)instruction.getCallExpression(), aClass); + if (callExpression instanceof PsiMethodCallExpression) { + final PsiMethodCallExpression methodCallExpression = (PsiMethodCallExpression)callExpression; + if (isCallOnSameQualifier(methodCallExpression, qualifierValue, qualifier)) { + final PsiMethod targetMethod = instruction.getTargetMethod(); + if (targetMethod != null) { + final PsiClass aClass = targetMethod.getContainingClass(); + if (TypeUtils.isOptional(aClass)) { + final String methodName = targetMethod.getName(); + if ("isPresent".equals(methodName)) { + memState.pop(); + memState.push(runner.getFactory().getConstFactory().getFalse()); + } + else if (isOptionalGetMethodName(methodName)) { + seen.add(methodCallExpression); + registerMethodCallError(methodCallExpression, aClass); + } } } }