KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > net > sourceforge > pmd > rules > UnnecessaryConversionTemporary


1 /**
2  * BSD-style license; for more info see http://pmd.sourceforge.net/license.html
3  */

4 package net.sourceforge.pmd.rules;
5
6 import java.util.Set JavaDoc;
7
8 import net.sourceforge.pmd.AbstractRule;
9 import net.sourceforge.pmd.Rule;
10 import net.sourceforge.pmd.ast.ASTAllocationExpression;
11 import net.sourceforge.pmd.ast.ASTClassOrInterfaceType;
12 import net.sourceforge.pmd.ast.ASTPrimaryExpression;
13 import net.sourceforge.pmd.ast.ASTPrimarySuffix;
14 import net.sourceforge.pmd.ast.SimpleNode;
15 import net.sourceforge.pmd.util.CollectionUtil;
16
17 public class UnnecessaryConversionTemporary extends AbstractRule implements Rule {
18
19     private boolean inPrimaryExpressionContext;
20     private ASTPrimaryExpression primary;
21     private boolean usingPrimitiveWrapperAllocation;
22     
23     private static final Set JavaDoc primitiveWrappers = CollectionUtil.asSet(
24         new String JavaDoc[] {"Integer", "Boolean", "Double", "Long", "Short", "Byte", "Float"}
25         );
26  
27     public UnnecessaryConversionTemporary() {
28     }
29
30     public Object JavaDoc visit(ASTPrimaryExpression node, Object JavaDoc data) {
31         if (node.jjtGetNumChildren() == 0 || (node.jjtGetChild(0)).jjtGetNumChildren() == 0 || !(node.jjtGetChild(0).jjtGetChild(0) instanceof ASTAllocationExpression)) {
32             return super.visit(node, data);
33         }
34         // TODO... hmmm... is this inPrimaryExpressionContext gibberish necessary?
35
inPrimaryExpressionContext = true;
36         primary = node;
37         super.visit(node, data);
38         inPrimaryExpressionContext = false;
39         usingPrimitiveWrapperAllocation = false;
40         return data;
41     }
42
43     public Object JavaDoc visit(ASTAllocationExpression node, Object JavaDoc data) {
44         if (!inPrimaryExpressionContext || !(node.jjtGetChild(0) instanceof ASTClassOrInterfaceType)) {
45             return super.visit(node, data);
46         }
47         if (!primitiveWrappers.contains(((SimpleNode) node.jjtGetChild(0)).getImage())) {
48             return super.visit(node, data);
49         }
50         usingPrimitiveWrapperAllocation = true;
51         return super.visit(node, data);
52     }
53
54     public Object JavaDoc visit(ASTPrimarySuffix node, Object JavaDoc data) {
55         if (inPrimaryExpressionContext && usingPrimitiveWrapperAllocation) {
56             if (node.hasImageEqualTo("toString")) {
57                 if (node.jjtGetParent() == primary) {
58                     addViolation(data, node);
59                 }
60             }
61         }
62         return super.visit(node, data);
63     }
64
65 }
66
Popular Tags