KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > rules > strings > InefficientEmptyStringCheck


1 package net.sourceforge.pmd.rules.strings;
2
3 import net.sourceforge.pmd.ast.Node;
4 import net.sourceforge.pmd.ast.SimpleNode;
5 import net.sourceforge.pmd.rules.AbstractInefficientZeroCheck;
6 import net.sourceforge.pmd.symboltable.NameOccurrence;
7
8 /**
9  * This rule finds code which inefficiently determines empty strings. This code
10  * <p/>
11  *
12  * <pre>
13  * if(str.trim().length()==0){....
14  * </pre>
15  *
16  * <p/> is quite inefficient as trim() causes a new String to be created.
17  * Smarter code to check for an empty string would be: <p/>
18  *
19  * <pre>
20  * Character.isWhitespace(str.charAt(i));
21  * </pre>
22  *
23  * @author acaplan
24  */

25 public class InefficientEmptyStringCheck extends AbstractInefficientZeroCheck {
26
27     /**
28      * Determine if we're dealing with String.length method
29      *
30      * @param occ
31      * The name occurance
32      * @return true if it's String.length, else false
33      */

34     public boolean isTargetMethod(NameOccurrence occ) {
35         if (occ.getNameForWhichThisIsAQualifier() != null
36                 && occ.getNameForWhichThisIsAQualifier().getImage().indexOf("trim") != -1) {
37             Node pExpression = occ.getLocation().jjtGetParent().jjtGetParent();
38             if (pExpression.jjtGetNumChildren() >= 3
39                     && "length".equals(((SimpleNode) pExpression.jjtGetChild(2)).getImage())) {
40                 return true;
41             }
42         }
43         return false;
44     }
45
46     public boolean appliesToClassName(String JavaDoc name) {
47         return "String".equals(name);
48     }
49
50 }
Popular Tags