1 /***
2 * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3 */
4 package net.sourceforge.pmd.rules.design;
5
6 import net.sourceforge.pmd.ast.SimpleNode;
7 import net.sourceforge.pmd.rules.AbstractInefficientZeroCheck;
8 import net.sourceforge.pmd.symboltable.NameOccurrence;
9 import net.sourceforge.pmd.util.CollectionUtil;
10
11 /***
12 * Detect structures like "foo.size() == 0" and suggest replacing them with
13 * foo.isEmpty(). Will also find != 0 (replacable with !isEmpty()).
14 *
15 * @author Jason Bennett
16 */
17 public class UseCollectionIsEmpty extends AbstractInefficientZeroCheck {
18
19 public boolean appliesToClassName(String name){
20 return CollectionUtil.isCollectionType(name, true);
21 }
22
23 /***
24 * Determine if we're dealing with .size method
25 *
26 * @param occ
27 * The name occurance
28 * @return true if it's .length, else false
29 */
30 public boolean isTargetMethod(NameOccurrence occ) {
31 if (occ.getNameForWhichThisIsAQualifier() != null) {
32 if (((SimpleNode) occ.getLocation()).getImage().endsWith(".size")) {
33 return true;
34 }
35 }
36 return false;
37 }
38 }