From 6535876a2c1f35e05c3f8f703a55572f15320c2e Mon Sep 17 00:00:00 2001 From: Bas Leijdekkers Date: Wed, 13 Apr 2011 15:34:55 +0200 Subject: [PATCH] warn in more cases, optimization and cleanup --- .../ig/bugs/CollectionQueryCalledVisitor.java | 3 +- .../bugs/CollectionUpdateCalledVisitor.java | 2 +- ...atchedCollectionQueryUpdateInspection.java | 91 ++++++++----------- 3 files changed, 40 insertions(+), 56 deletions(-) diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/CollectionQueryCalledVisitor.java b/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/CollectionQueryCalledVisitor.java index 580371d7c38c..b41d34758def 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/CollectionQueryCalledVisitor.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/CollectionQueryCalledVisitor.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. @@ -19,7 +19,6 @@ import com.intellij.psi.*; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; -import java.util.HashSet; import java.util.Set; class CollectionQueryCalledVisitor extends JavaRecursiveElementVisitor{ diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/CollectionUpdateCalledVisitor.java b/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/CollectionUpdateCalledVisitor.java index 1e2f0e229d11..cc409378e10f 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/CollectionUpdateCalledVisitor.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/CollectionUpdateCalledVisitor.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. diff --git a/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/MismatchedCollectionQueryUpdateInspection.java b/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/MismatchedCollectionQueryUpdateInspection.java index 1e84180335f5..c083663e2188 100644 --- a/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/MismatchedCollectionQueryUpdateInspection.java +++ b/plugins/InspectionGadgets/src/com/siyeh/ig/bugs/MismatchedCollectionQueryUpdateInspection.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. @@ -37,9 +37,11 @@ import java.awt.*; public class MismatchedCollectionQueryUpdateInspection extends BaseInspection { + @SuppressWarnings({"PublicField"}) public final ExternalizableStringSet queryNames = new ExternalizableStringSet("copyInto", "drainTo", "propertyNames", "save", "store", "write"); + @SuppressWarnings({"PublicField"}) public final ExternalizableStringSet updateNames = new ExternalizableStringSet("add", "clear", "drainTo", "insert", "load", "offer", "poll", "push", "put", "remove", "replace", @@ -140,16 +142,16 @@ public class MismatchedCollectionQueryUpdateInspection if(argumentList == null){ return false; } - final PsiExpression[] expressions = argumentList.getExpressions(); - for(final PsiExpression arg : expressions){ - final PsiType argType = arg.getType(); - if(argType == null){ + final PsiExpression[] arguments = argumentList.getExpressions(); + for(final PsiExpression argument : arguments){ + final PsiType argumentType = argument.getType(); + if(argumentType == null){ return false; } - if(CollectionUtils.isCollectionClassOrInterface(argType)){ + if(CollectionUtils.isCollectionClassOrInterface(argumentType)){ return false; } - if(argType instanceof PsiArrayType){ + if(argumentType instanceof PsiArrayType){ return false; } } @@ -165,11 +167,7 @@ public class MismatchedCollectionQueryUpdateInspection return; } final PsiClass containingClass = PsiUtil.getTopLevelClass(field); - if(containingClass == null){ - return; - } - final PsiType type = field.getType(); - if(!CollectionUtils.isCollectionClassOrInterface(type)){ + if (!checkVariable(field, containingClass)) { return; } final boolean written = @@ -182,16 +180,13 @@ public class MismatchedCollectionQueryUpdateInspection registerFieldError(field, Boolean.valueOf(written)); } - @Override public void visitLocalVariable(@NotNull PsiLocalVariable variable){ + @Override public void visitLocalVariable( + @NotNull PsiLocalVariable variable){ super.visitLocalVariable(variable); final PsiCodeBlock codeBlock = PsiTreeUtil.getParentOfType(variable, PsiCodeBlock.class); - if(codeBlock == null){ - return; - } - final PsiType type = variable.getType(); - if(!CollectionUtils.isCollectionClassOrInterface(type)){ + if (!checkVariable(variable, codeBlock)) { return; } final boolean written = @@ -203,6 +198,29 @@ public class MismatchedCollectionQueryUpdateInspection } } + private boolean checkVariable(PsiVariable variable, + PsiElement context) { + if (context == null) { + return false; + } + final PsiType type = variable.getType(); + if(!CollectionUtils.isCollectionClassOrInterface(type)){ + return false; + } + if(VariableAccessUtils.variableIsAssignedFrom(variable, context)){ + return false; + } + if(VariableAccessUtils.variableIsReturned(variable, context)){ + return false; + } + if(VariableAccessUtils.variableIsPassedAsMethodArgument(variable, + context)){ + return false; + } + return !VariableAccessUtils.variableIsUsedInArrayInitializer( + variable, context); + } + private boolean collectionContentsAreUpdated( PsiVariable variable, PsiElement context){ if(collectionUpdateCalled(variable, context)){ @@ -224,21 +242,7 @@ public class MismatchedCollectionQueryUpdateInspection } } } - if(VariableAccessUtils.variableIsAssigned(variable, context)){ - return true; - } - if(VariableAccessUtils.variableIsAssignedFrom(variable, context)){ - return true; - } - if(VariableAccessUtils.variableIsReturned(variable, context)){ - return true; - } - if(VariableAccessUtils.variableIsPassedAsMethodArgument(variable, - context)){ - return true; - } - return VariableAccessUtils.variableIsUsedInArrayInitializer(variable, - context); + return VariableAccessUtils.variableIsAssigned(variable, context); } private boolean collectionContentsAreQueried( @@ -246,26 +250,7 @@ public class MismatchedCollectionQueryUpdateInspection if(collectionQueryCalled(variable, context)){ return true; } - final PsiExpression initializer = variable.getInitializer(); - if(initializer != null && - !isEmptyCollectionInitializer(initializer)){ - return true; - } - if(collectionQueriedByAssignment(variable, context)){ - return true; - } - if(VariableAccessUtils.variableIsAssignedFrom(variable, context)){ - return true; - } - if(VariableAccessUtils.variableIsReturned(variable, context)){ - return true; - } - if(VariableAccessUtils.variableIsPassedAsMethodArgument(variable, - context)){ - return true; - } - return VariableAccessUtils.variableIsUsedInArrayInitializer(variable, - context); + return collectionQueriedByAssignment(variable, context); } private boolean collectionQueryCalled(PsiVariable variable,