UseCollectionIsEmptyRule.java
01 /**
02  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
03  */
04 package net.sourceforge.pmd.lang.java.rule.design;
05 
06 import net.sourceforge.pmd.lang.java.rule.AbstractInefficientZeroCheck;
07 import net.sourceforge.pmd.lang.java.symboltable.NameOccurrence;
08 import net.sourceforge.pmd.util.CollectionUtil;
09 
10 /**
11  * Detect structures like "foo.size() == 0" and suggest replacing them with
12  * foo.isEmpty(). Will also find != 0 (replaceable with !isEmpty()).
13  
14  @author Jason Bennett
15  */
16 public class UseCollectionIsEmptyRule 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 occurrence
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 }