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.rules.AbstractInefficientZeroCheck;
7 import net.sourceforge.pmd.symboltable.NameOccurrence;
8 import net.sourceforge.pmd.util.CollectionUtil;
9
10 /**
11 * Detect structures like "foo.size() == 0" and suggest replacing them with
12 * foo.isEmpty(). Will also find != 0 (replacable with !isEmpty()).
13 *
14 * @author Jason Bennett
15 */
16 public class UseCollectionIsEmpty extends AbstractInefficientZeroCheck {
17
18 public boolean appliesToClassName(String name){
19 return CollectionUtil.isCollectionType(name, true);
20 }
21
22 /**
23 * Determine if we're dealing with .size method
24 *
25 * @param occ
26 * The name occurance
27 * @return true if it's .length, else false
28 */
29 public boolean isTargetMethod(NameOccurrence occ) {
30 if (occ.getNameForWhichThisIsAQualifier() != null) {
31 if (occ.getLocation().getImage().endsWith(".size")) {
32 return true;
33 }
34 }
35 return false;
36 }
37 }