KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > edu > umd > cs > findbugs > detect > IDivResultCastToDouble


1 package edu.umd.cs.findbugs.detect;
2
3
4 import edu.umd.cs.findbugs.*;
5
6 import org.apache.bcel.classfile.Method;
7
8 public class IDivResultCastToDouble extends BytecodeScanningDetector {
9     private static final boolean DEBUG = SystemProperties.getBoolean("idcd.debug");
10     
11     private BugReporter bugReporter;
12     private int prevOpCode;
13     
14     public IDivResultCastToDouble(BugReporter bugReporter) {
15         this.bugReporter = bugReporter;
16     }
17     
18
19     @Override JavaDoc
20          public void visit(Method obj) {
21         if (DEBUG) System.out.println("Visiting " + obj);
22     }
23
24     BugInstance pendingBug = null;
25     @Override JavaDoc
26          public void sawOpcode(int seen) {
27         
28         if (DEBUG) System.out.println("Saw opcode " + OPCODE_NAMES[seen] + " " + pendingBug);
29     
30         
31             
32         if ((prevOpCode == I2D || prevOpCode == L2D)
33                         && seen == INVOKESTATIC
34                                 && getClassConstantOperand().equals("java/lang/Math")
35                                 && getNameConstantOperand().equals("ceil")) {
36             bugReporter.reportBug(new BugInstance(this,
37                 "ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL",
38                 HIGH_PRIORITY)
39                     .addClassAndMethod(this)
40                     .addSourceLine(this));
41             pendingBug = null;
42         }
43         else if ((prevOpCode == I2F || prevOpCode == L2F)
44                 && seen == INVOKESTATIC
45                         && getClassConstantOperand().equals("java/lang/Math")
46                         && getNameConstantOperand().equals("round")) {
47             bugReporter.reportBug(new BugInstance(this,
48                     "ICAST_INT_CAST_TO_FLOAT_PASSED_TO_ROUND",
49                     HIGH_PRIORITY)
50             .addClassAndMethod(this)
51             .addSourceLine(this));
52             pendingBug = null;
53         }
54         else if (pendingBug != null) {
55             bugReporter.reportBug(pendingBug);
56             pendingBug = null;
57         }
58         
59         if (prevOpCode == IDIV && (seen == I2D|| seen == I2F)
60             || prevOpCode == LDIV && (seen == L2D || seen==L2F))
61             pendingBug = new BugInstance(this, "ICAST_IDIV_CAST_TO_DOUBLE", NORMAL_PRIORITY)
62                     .addClassAndMethod(this)
63                     .addSourceLine(this);
64
65         prevOpCode = seen;
66         }
67 }
68
Popular Tags