Thread: [Fb-contrib-commit] SF.net SVN: fb-contrib:[1102] trunk/fb-contrib/src/com/mebigfatguy/ fbcontrib/
Brought to you by:
dbrosius
|
From: <dbr...@us...> - 2009-02-22 07:19:50
|
Revision: 1102
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1102&view=rev
Author: dbrosius
Date: 2009-02-22 07:19:47 +0000 (Sun, 22 Feb 2009)
Log Message:
-----------
fix stutter
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-02-22 03:48:02 UTC (rev 1101)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-02-22 07:19:47 UTC (rev 1102)
@@ -258,8 +258,8 @@
int pc = getPC();
int[] offsets = getSwitchOffsets();
List<Integer> targets = new ArrayList<Integer>();
- for (int i = 0; i < offsets.length; i++)
- targets.add(Integer14.valueOf(offsets[i] + pc));
+ for (int offset : offsets)
+ targets.add(Integer14.valueOf(offset + pc));
Integer defOffset = Integer14.valueOf(getDefaultSwitchOffset() + pc);
if (!targets.contains(defOffset))
targets.add(defOffset);
@@ -273,7 +273,7 @@
lastTarget = nextTarget;
}
switchTargets.addAll(targets);
- } else if ((seen == INVOKEVIRTUAL) || (seen == INVOKEVIRTUAL)) {
+ } else if ((seen == INVOKEVIRTUAL) || (seen == INVOKEINTERFACE)) {
if ("wasNull".equals(getNameConstantOperand())
&& "()Z".equals(getSigConstantOperand()))
dontReport = true;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-03-17 06:36:33
|
Revision: 1148
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1148&view=rev
Author: dbrosius
Date: 2009-03-17 06:36:26 +0000 (Tue, 17 Mar 2009)
Log Message:
-----------
track objects on which method calls are made associated with stores, and clear the store regs when that same object has another method call on it.
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-03-17 05:41:35 UTC (rev 1147)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-03-17 06:36:26 UTC (rev 1148)
@@ -29,6 +29,7 @@
import org.apache.bcel.classfile.Code;
import org.apache.bcel.classfile.CodeException;
import org.apache.bcel.classfile.Method;
+import org.apache.bcel.generic.Type;
import com.mebigfatguy.fbcontrib.utils.Integer14;
import com.mebigfatguy.fbcontrib.utils.RegisterUtils;
@@ -36,7 +37,9 @@
import edu.umd.cs.findbugs.BugInstance;
import edu.umd.cs.findbugs.BugReporter;
import edu.umd.cs.findbugs.BytecodeScanningDetector;
+import edu.umd.cs.findbugs.OpcodeStack;
import edu.umd.cs.findbugs.ba.ClassContext;
+import edu.umd.cs.findbugs.ba.XField;
/**
* looks for variable assignments at a scope larger than its use. In this case,
@@ -46,6 +49,7 @@
public class BloatedAssignmentScope extends BytecodeScanningDetector
{
BugReporter bugReporter;
+ private OpcodeStack stack;
private Set<Integer> ignoreRegs;
private ScopeBlock rootScopeBlock;
private Set<Integer> catchHandlers;
@@ -76,12 +80,14 @@
catchHandlers = new HashSet<Integer>();
switchTargets = new HashSet<Integer>();
monitorSyncPCs = new ArrayList<Integer>();
+ stack = new OpcodeStack();
super.visitClassContext(classContext);
} finally {
ignoreRegs = null;
catchHandlers = null;
switchTargets = null;
monitorSyncPCs = null;
+ stack = null;
}
}
@@ -97,7 +103,9 @@
ignoreRegs.clear();
Method method = getMethod();
if (!method.isStatic())
- ignoreRegs.add(Integer14.valueOf(0));
+ {
+ ignoreRegs.add(Integer14.valueOf(0));
+ }
int[] parmRegs = RegisterUtils.getParameterRegisters(method);
for (int parm : parmRegs) {
@@ -114,13 +122,16 @@
}
switchTargets.clear();
+ stack.resetForMethodEntry(this);
dontReport = false;
sawDup = false;
sawNull = false;
super.visitCode(obj);
if (!dontReport)
+ {
rootScopeBlock.findBugs(new HashSet<Integer>());
+ }
} finally {
rootScopeBlock = null;
@@ -135,159 +146,257 @@
*/
@Override
public void sawOpcode(int seen) {
- if ((seen == ASTORE)
- || (seen == ISTORE)
- || (seen == LSTORE)
- || (seen == FSTORE)
- || (seen == DSTORE)
- || ((seen >= ASTORE_0) && (seen <= ASTORE_3))
- || ((seen >= ISTORE_0) && (seen <= ISTORE_3))
- || ((seen >= LSTORE_0) && (seen <= LSTORE_1))
- || ((seen >= FSTORE_0) && (seen <= FSTORE_1))
- || ((seen >= DSTORE_0) && (seen <= DSTORE_1))) {
- int reg = RegisterUtils.getStoreReg(this, seen);
- Integer iReg = Integer14.valueOf(reg);
- int pc = getPC();
- if (catchHandlers.contains(Integer14.valueOf(pc)))
- ignoreRegs.add(iReg);
- else if (monitorSyncPCs.size() > 0)
- ignoreRegs.add(iReg);
- else if (sawNull)
- ignoreRegs.add(iReg);
-
- if (!ignoreRegs.contains(iReg)) {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, pc);
- if (sb != null) {
- sb.addStore(reg, pc);
- if (sawDup)
- sb.addLoad(reg, pc);
+ Object caller = null;
+ try {
+ if ((seen == ASTORE)
+ || (seen == ISTORE)
+ || (seen == LSTORE)
+ || (seen == FSTORE)
+ || (seen == DSTORE)
+ || ((seen >= ASTORE_0) && (seen <= ASTORE_3))
+ || ((seen >= ISTORE_0) && (seen <= ISTORE_3))
+ || ((seen >= LSTORE_0) && (seen <= LSTORE_1))
+ || ((seen >= FSTORE_0) && (seen <= FSTORE_1))
+ || ((seen >= DSTORE_0) && (seen <= DSTORE_1))) {
+ int reg = RegisterUtils.getStoreReg(this, seen);
+ Integer iReg = Integer14.valueOf(reg);
+ int pc = getPC();
+ if (catchHandlers.contains(Integer14.valueOf(pc)))
+ {
+ ignoreRegs.add(iReg);
}
- else
- ignoreRegs.add(iReg);
- }
- } else if (seen == IINC) {
- int reg = getRegisterOperand();
- Integer iReg = Integer14.valueOf(reg);
- if (!ignoreRegs.contains(iReg)) {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
- if (sb != null)
- sb.addLoad(reg, getPC());
- else
- ignoreRegs.add(iReg);
- }
- int pc = getPC();
- if (catchHandlers.contains(Integer14.valueOf(pc)))
- ignoreRegs.add(iReg);
- else if (monitorSyncPCs.size() > 0)
- ignoreRegs.add(iReg);
- else if (sawNull)
- ignoreRegs.add(iReg);
-
- if (!ignoreRegs.contains(iReg)) {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, pc);
- if (sb != null) {
- sb.addStore(reg, pc);
- if (sawDup)
- sb.addLoad(reg, pc);
+ else if (monitorSyncPCs.size() > 0)
+ {
+ ignoreRegs.add(iReg);
}
- else
- ignoreRegs.add(iReg);
- }
- } else if ((seen == ALOAD)
- || (seen == ILOAD)
- || (seen == LLOAD)
- || (seen == FLOAD)
- || (seen == DLOAD)
- || ((seen >= ALOAD_0) && (seen <= ALOAD_3))
- || ((seen >= ILOAD_0) && (seen <= ILOAD_3))
- || ((seen >= LLOAD_0) && (seen <= LLOAD_1))
- || ((seen >= FLOAD_0) && (seen <= FLOAD_1))
- || ((seen >= DLOAD_0) && (seen <= DLOAD_1))) {
- int reg = RegisterUtils.getLoadReg(this, seen);
- if (!ignoreRegs.contains(Integer14.valueOf(reg))) {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
- if (sb != null)
- sb.addLoad(reg, getPC());
- else
- ignoreRegs.add(Integer14.valueOf(reg));
- }
- } else if (((seen >= IFEQ) && (seen <= GOTO)) || (seen == GOTO_W)) {
- int target = getBranchTarget();
- if (target > getPC()) {
- if ((seen == GOTO) || (seen == GOTO_W)) {
- Integer nextPC = Integer14.valueOf(getNextPC());
- if (!switchTargets.contains(nextPC)) {
- ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, getPC(), getNextPC());
- if (sb == null) {
- sb = new ScopeBlock(getPC(), target);
- sb.setLoop();
- sb.setGoto();
- rootScopeBlock.addChild(sb);
- } else {
- sb = new ScopeBlock(getPC(), target);
- sb.setGoto();
- rootScopeBlock.addChild(sb);
- }
- }
- } else {
- ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, getPC(), target);
- if ((sb != null) && (!sb.isLoop) && !sb.hasChildren()) {
- if (sb.isGoto()) {
- ScopeBlock parent = sb.getParent();
- sb.pushUpLoadStores();
- if (parent != null)
- parent.removeChild(sb);
- sb = new ScopeBlock(getPC(), target);
- rootScopeBlock.addChild(sb);
- } else {
- sb.pushUpLoadStores();
- sb.setStart(getPC());
- sb.setFinish(target);
+ else if (sawNull)
+ {
+ ignoreRegs.add(iReg);
+ }
+
+ if (!ignoreRegs.contains(iReg)) {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, pc);
+ if (sb != null) {
+ Object assoc = null;
+ if (stack.getStackDepth() > 0) {
+ assoc = stack.getStackItem(0).getUserValue();
+ }
+ sb.addStore(reg, pc, assoc);
+ if (sawDup)
+ {
+ sb.addLoad(reg, pc);
}
- } else {
- sb = new ScopeBlock(getPC(), target);
- rootScopeBlock.addChild(sb);
- }
+ }
+ else
+ {
+ ignoreRegs.add(iReg);
+ }
+ }
+ } else if (seen == IINC) {
+ int reg = getRegisterOperand();
+ Integer iReg = Integer14.valueOf(reg);
+ if (!ignoreRegs.contains(iReg)) {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
+ if (sb != null)
+ {
+ sb.addLoad(reg, getPC());
+ }
+ else
+ {
+ ignoreRegs.add(iReg);
+ }
+ }
+ int pc = getPC();
+ if (catchHandlers.contains(Integer14.valueOf(pc)))
+ {
+ ignoreRegs.add(iReg);
}
- } else {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
- if (sb != null)
- sb.setLoop();
- }
- } else if ((seen == TABLESWITCH) || (seen == LOOKUPSWITCH)) {
- int pc = getPC();
- int[] offsets = getSwitchOffsets();
- List<Integer> targets = new ArrayList<Integer>();
- for (int offset : offsets)
- targets.add(Integer14.valueOf(offset + pc));
- Integer defOffset = Integer14.valueOf(getDefaultSwitchOffset() + pc);
- if (!targets.contains(defOffset))
- targets.add(defOffset);
- Collections.sort(targets);
-
- Integer lastTarget = targets.get(0);
- for (int i = 1; i < targets.size(); i++) {
- Integer nextTarget = targets.get(i);
- ScopeBlock sb = new ScopeBlock(lastTarget.intValue(), nextTarget.intValue());
- rootScopeBlock.addChild(sb);
- lastTarget = nextTarget;
- }
- switchTargets.addAll(targets);
- } else if ((seen == INVOKEVIRTUAL) || (seen == INVOKEINTERFACE)) {
- if ("wasNull".equals(getNameConstantOperand())
- && "()Z".equals(getSigConstantOperand()))
- dontReport = true;
- } else if (seen == MONITORENTER) {
- monitorSyncPCs.add(Integer14.valueOf(getPC()));
- } else if (seen == MONITOREXIT) {
- if (monitorSyncPCs.size() > 0)
- monitorSyncPCs.remove(monitorSyncPCs.size() - 1);
+ else if (monitorSyncPCs.size() > 0)
+ {
+ ignoreRegs.add(iReg);
+ }
+ else if (sawNull)
+ {
+ ignoreRegs.add(iReg);
+ }
+
+ if (!ignoreRegs.contains(iReg)) {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, pc);
+ if (sb != null) {
+ sb.addStore(reg, pc, null);
+ if (sawDup)
+ {
+ sb.addLoad(reg, pc);
+ }
+ }
+ else
+ {
+ ignoreRegs.add(iReg);
+ }
+ }
+ } else if ((seen == ALOAD)
+ || (seen == ILOAD)
+ || (seen == LLOAD)
+ || (seen == FLOAD)
+ || (seen == DLOAD)
+ || ((seen >= ALOAD_0) && (seen <= ALOAD_3))
+ || ((seen >= ILOAD_0) && (seen <= ILOAD_3))
+ || ((seen >= LLOAD_0) && (seen <= LLOAD_1))
+ || ((seen >= FLOAD_0) && (seen <= FLOAD_1))
+ || ((seen >= DLOAD_0) && (seen <= DLOAD_1))) {
+ int reg = RegisterUtils.getLoadReg(this, seen);
+ if (!ignoreRegs.contains(Integer14.valueOf(reg))) {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
+ if (sb != null)
+ {
+ sb.addLoad(reg, getPC());
+ }
+ else
+ {
+ ignoreRegs.add(Integer14.valueOf(reg));
+ }
+ }
+ } else if (((seen >= IFEQ) && (seen <= GOTO)) || (seen == GOTO_W)) {
+ int target = getBranchTarget();
+ if (target > getPC()) {
+ if ((seen == GOTO) || (seen == GOTO_W)) {
+ Integer nextPC = Integer14.valueOf(getNextPC());
+ if (!switchTargets.contains(nextPC)) {
+ ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, getPC(), getNextPC());
+ if (sb == null) {
+ sb = new ScopeBlock(getPC(), target);
+ sb.setLoop();
+ sb.setGoto();
+ rootScopeBlock.addChild(sb);
+ } else {
+ sb = new ScopeBlock(getPC(), target);
+ sb.setGoto();
+ rootScopeBlock.addChild(sb);
+ }
+ }
+ } else {
+ ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, getPC(), target);
+ if ((sb != null) && (!sb.isLoop) && !sb.hasChildren()) {
+ if (sb.isGoto()) {
+ ScopeBlock parent = sb.getParent();
+ sb.pushUpLoadStores();
+ if (parent != null)
+ {
+ parent.removeChild(sb);
+ }
+ sb = new ScopeBlock(getPC(), target);
+ rootScopeBlock.addChild(sb);
+ } else {
+ sb.pushUpLoadStores();
+ sb.setStart(getPC());
+ sb.setFinish(target);
+ }
+ } else {
+ sb = new ScopeBlock(getPC(), target);
+ rootScopeBlock.addChild(sb);
+ }
+ }
+ } else {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
+ if (sb != null)
+ {
+ sb.setLoop();
+ }
+ }
+ } else if ((seen == TABLESWITCH) || (seen == LOOKUPSWITCH)) {
+ int pc = getPC();
+ int[] offsets = getSwitchOffsets();
+ List<Integer> targets = new ArrayList<Integer>();
+ for (int offset : offsets)
+ {
+ targets.add(Integer14.valueOf(offset + pc));
+ }
+ Integer defOffset = Integer14.valueOf(getDefaultSwitchOffset() + pc);
+ if (!targets.contains(defOffset))
+ {
+ targets.add(defOffset);
+ }
+ Collections.sort(targets);
+
+ Integer lastTarget = targets.get(0);
+ for (int i = 1; i < targets.size(); i++) {
+ Integer nextTarget = targets.get(i);
+ ScopeBlock sb = new ScopeBlock(lastTarget.intValue(), nextTarget.intValue());
+ rootScopeBlock.addChild(sb);
+ lastTarget = nextTarget;
+ }
+ switchTargets.addAll(targets);
+ } else if ((seen == INVOKEVIRTUAL) || (seen == INVOKEINTERFACE)) {
+ if ("wasNull".equals(getNameConstantOperand())
+ && "()Z".equals(getSigConstantOperand()))
+ {
+ dontReport = true;
+ }
+
+ caller = getCallingObject();
+
+ if (caller != null) {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
+ if (sb != null) {
+ sb.removeByAssoc(caller);
+ }
+ }
+
+ } else if (seen == MONITORENTER) {
+ monitorSyncPCs.add(Integer14.valueOf(getPC()));
+ } else if (seen == MONITOREXIT) {
+ if (monitorSyncPCs.size() > 0)
+ {
+ monitorSyncPCs.remove(monitorSyncPCs.size() - 1);
+ }
+ }
+
+ sawDup = (seen == DUP);
+ sawNull = (seen == ACONST_NULL);
+ } finally {
+ stack.sawOpcode(this, seen);
+ if (caller != null) {
+ if (stack.getStackDepth() > 0) {
+ OpcodeStack.Item item = stack.getStackItem(0);
+ item.setUserValue(caller);
+ }
+ }
+ }
+ }
+
+ /**
+ * returns either a register number of a field reference of the object that a method is being called on,
+ * or null, if it can't be determined.
+ *
+ * @return either an Integer for a register, or a String for the field name, or null
+ */
+ private Object getCallingObject() {
+ String sig = getSigConstantOperand();
+ if ("V".equals(Type.getReturnType(sig)))
+ {
+ return null;
}
-
- sawDup = (seen == DUP);
- sawNull = (seen == ACONST_NULL);
+
+ Type[] types = Type.getArgumentTypes(sig);
+ if (stack.getStackDepth() <= types.length) {
+ return null;
+ }
+
+ OpcodeStack.Item caller = stack.getStackItem(types.length);
+ int reg = caller.getRegisterNumber();
+ if (reg >= 0)
+ {
+ return Integer.valueOf(reg);
+ }
+
+ /* We ignore the possibility of two fields with the same name in different classes */
+ XField f = caller.getXField();
+ if (f != null)
+ {
+ return f.getName();
+ }
+ return null;
}
-
/**
* returns the scope block in which this register was assigned, by traversing the scope block tree
*
@@ -302,7 +411,9 @@
for (ScopeBlock child : sb.children) {
ScopeBlock foundSb = findScopeBlock(child, pc);
if (foundSb != null)
- return foundSb;
+ {
+ return foundSb;
+ }
}
}
return sb;
@@ -322,7 +433,9 @@
ScopeBlock parentBlock = null;
if ((sb.startLocation < start) && (sb.finishLocation >= start)) {
if ((sb.finishLocation <= target) || (sb.isGoto() && !sb.isLoop()))
+ {
parentBlock = sb;
+ }
}
if (sb.children != null)
@@ -330,7 +443,9 @@
for (ScopeBlock child : sb.children) {
ScopeBlock targetBlock = findScopeBlockWithTarget(child, start, target);
if (targetBlock != null)
- return targetBlock;
+ {
+ return targetBlock;
+ }
}
}
@@ -348,6 +463,7 @@
private boolean isGoto;
private Map<Integer, Integer> loads;
private Map<Integer, Integer> stores;
+ private Map<Object, Integer> assocs;
private List<ScopeBlock> children;
/** construts a new scope block
@@ -363,6 +479,7 @@
isGoto = false;
loads = null;
stores = null;
+ assocs = null;
children = null;
}
@@ -458,13 +575,39 @@
* @param reg the register that was stored
* @param pc the instruction that did the store
*/
- public void addStore(int reg, int pc) {
+ public void addStore(int reg, int pc, Object assocObject) {
if (stores == null)
- stores = new HashMap<Integer, Integer>();
+ {
+ stores = new HashMap<Integer, Integer>();
+ }
stores.put(Integer14.valueOf(reg), Integer14.valueOf(pc));
+ if (assocs == null)
+ {
+ assocs = new HashMap<Object, Integer>();
+ }
+ assocs.put(assocObject, reg);
}
+ /**
+ * removes stores to registers that where retrieved from method calls on assocObject
+ *
+ * @param assocObject the object that a method call was just performed on
+ */
+ public void removeByAssoc(Object assocObject) {
+ if (assocs != null) {
+ Integer reg = assocs.remove(assocObject);
+ if (reg != null) {
+ if (loads != null) {
+ loads.remove(reg);
+ }
+ if (stores != null) {
+ stores.remove(reg);
+ }
+ }
+ }
+ }
+
/**
* adds the register as a load in this scope block
*
@@ -473,7 +616,9 @@
*/
public void addLoad(int reg, int pc) {
if (loads == null)
- loads = new HashMap<Integer, Integer>();
+ {
+ loads = new HashMap<Integer, Integer>();
+ }
loads.put(Integer14.valueOf(reg), Integer14.valueOf(pc));
}
@@ -514,7 +659,9 @@
*/
public void removeChild(ScopeBlock child) {
if (children != null)
+ {
children.remove(child);
+ }
}
/**
@@ -522,17 +669,25 @@
*/
public void findBugs(Set<Integer> parentUsedRegs) {
if (isLoop)
- return;
+ {
+ return;
+ }
Set<Integer> usedRegs = new HashSet<Integer>(parentUsedRegs);
if (stores != null)
+ {
usedRegs.addAll(stores.keySet());
+ }
if (loads != null)
+ {
usedRegs.addAll(loads.keySet());
+ }
if (stores != null) {
if (loads != null)
- stores.keySet().removeAll(loads.keySet());
+ {
+ stores.keySet().removeAll(loads.keySet());
+ }
stores.keySet().removeAll(parentUsedRegs);
if (stores.size() > 0) {
@@ -577,14 +732,20 @@
*/
public boolean usesReg(Integer reg) {
if ((loads != null) && (loads.containsKey(reg)))
- return true;
+ {
+ return true;
+ }
if ((stores != null) && (stores.containsKey(reg)))
- return true;
+ {
+ return true;
+ }
if (children != null) {
for (ScopeBlock child : children) {
if (child.usesReg(reg))
- return true;
+ {
+ return true;
+ }
}
}
@@ -598,15 +759,23 @@
if (parent != null) {
if (loads != null) {
if (parent.loads != null)
- parent.loads.putAll(loads);
- else
- parent.loads = loads;
+ {
+ parent.loads.putAll(loads);
+ }
+ else
+ {
+ parent.loads = loads;
+ }
}
if (stores != null) {
if (parent.stores != null)
- parent.stores.putAll(stores);
- else
- parent.stores = stores;
+ {
+ parent.stores.putAll(stores);
+ }
+ else
+ {
+ parent.stores = stores;
+ }
}
loads = null;
stores = null;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-04-17 08:25:41
|
Revision: 1162
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1162&view=rev
Author: dbrosius
Date: 2009-04-17 08:25:37 +0000 (Fri, 17 Apr 2009)
Log Message:
-----------
no auto-boxing
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-04-13 01:04:37 UTC (rev 1161)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-04-17 08:25:37 UTC (rev 1162)
@@ -586,7 +586,7 @@
{
assocs = new HashMap<Object, Integer>();
}
- assocs.put(assocObject, reg);
+ assocs.put(assocObject, Integer14.valueOf(reg));
}
/**
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-04-17 08:35:17
|
Revision: 1163
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1163&view=rev
Author: dbrosius
Date: 2009-04-17 08:35:16 +0000 (Fri, 17 Apr 2009)
Log Message:
-----------
oops, fix bad comparison
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-04-17 08:25:37 UTC (rev 1162)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-04-17 08:35:16 UTC (rev 1163)
@@ -372,7 +372,7 @@
*/
private Object getCallingObject() {
String sig = getSigConstantOperand();
- if ("V".equals(Type.getReturnType(sig)))
+ if ("V".equals(Type.getReturnType(sig).getSignature()))
{
return null;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-07-30 04:40:00
|
Revision: 1239
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1239&view=rev
Author: dbrosius
Date: 2009-07-30 04:39:50 +0000 (Thu, 30 Jul 2009)
Log Message:
-----------
use Comparable instead of Object
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-07-30 04:32:24 UTC (rev 1238)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-07-30 04:39:50 UTC (rev 1239)
@@ -46,28 +46,28 @@
* the assignment can be pushed down into the smaller scope to reduce the performance
* impact of that assignment.
*/
-public class BloatedAssignmentScope extends BytecodeScanningDetector
+public class BloatedAssignmentScope extends BytecodeScanningDetector
{
BugReporter bugReporter;
private OpcodeStack stack;
private Set<Integer> ignoreRegs;
private ScopeBlock rootScopeBlock;
- private Set<Integer> catchHandlers;
- private Set<Integer> switchTargets;
- private List<Integer> monitorSyncPCs;
- private boolean dontReport;
- private boolean sawDup;
- private boolean sawNull;
-
+ private Set<Integer> catchHandlers;
+ private Set<Integer> switchTargets;
+ private List<Integer> monitorSyncPCs;
+ private boolean dontReport;
+ private boolean sawDup;
+ private boolean sawNull;
+
/**
- * constructs a BAS detector given the reporter to report bugs on
+ * constructs a BAS detector given the reporter to report bugs on
- * @param bugReporter the sync of bug reports
- */
+ * @param bugReporter the sync of bug reports
+ */
public BloatedAssignmentScope(BugReporter bugReporter) {
this.bugReporter = bugReporter;
}
-
+
/**
* implements the visitor to create and the clear the register to location map
*
@@ -77,20 +77,20 @@
public void visitClassContext(ClassContext classContext) {
try {
ignoreRegs = new HashSet<Integer>();
- catchHandlers = new HashSet<Integer>();
- switchTargets = new HashSet<Integer>();
- monitorSyncPCs = new ArrayList<Integer>();
- stack = new OpcodeStack();
+ catchHandlers = new HashSet<Integer>();
+ switchTargets = new HashSet<Integer>();
+ monitorSyncPCs = new ArrayList<Integer>();
+ stack = new OpcodeStack();
super.visitClassContext(classContext);
} finally {
ignoreRegs = null;
- catchHandlers = null;
- switchTargets = null;
- monitorSyncPCs = null;
- stack = null;
+ catchHandlers = null;
+ switchTargets = null;
+ monitorSyncPCs = null;
+ stack = null;
}
}
-
+
/**
* implements the visitor to reset the register to location map
*
@@ -99,45 +99,45 @@
@Override
public void visitCode(Code obj) {
try {
-
+
ignoreRegs.clear();
Method method = getMethod();
if (!method.isStatic())
- {
- ignoreRegs.add(Integer14.valueOf(0));
- }
-
+ {
+ ignoreRegs.add(Integer14.valueOf(0));
+ }
+
int[] parmRegs = RegisterUtils.getParameterRegisters(method);
for (int parm : parmRegs) {
ignoreRegs.add(Integer14.valueOf(parm));
}
-
+
rootScopeBlock = new ScopeBlock(0, obj.getLength());
- catchHandlers.clear();
- CodeException[] exceptions = obj.getExceptionTable();
- if (exceptions != null) {
- for (CodeException ex : exceptions) {
- catchHandlers.add(Integer14.valueOf(ex.getHandlerPC()));
- }
- }
+ catchHandlers.clear();
+ CodeException[] exceptions = obj.getExceptionTable();
+ if (exceptions != null) {
+ for (CodeException ex : exceptions) {
+ catchHandlers.add(Integer14.valueOf(ex.getHandlerPC()));
+ }
+ }
- switchTargets.clear();
- stack.resetForMethodEntry(this);
- dontReport = false;
- sawDup = false;
- sawNull = false;
+ switchTargets.clear();
+ stack.resetForMethodEntry(this);
+ dontReport = false;
+ sawDup = false;
+ sawNull = false;
super.visitCode(obj);
-
- if (!dontReport)
- {
- rootScopeBlock.findBugs(new HashSet<Integer>());
- }
-
+
+ if (!dontReport)
+ {
+ rootScopeBlock.findBugs(new HashSet<Integer>());
+ }
+
} finally {
rootScopeBlock = null;
}
}
-
+
/**
* implements the visitor to look for variables assigned below the scope
* in which they are used.
@@ -146,258 +146,258 @@
*/
@Override
public void sawOpcode(int seen) {
- Object caller = null;
- try {
- if ((seen == ASTORE)
- || (seen == ISTORE)
- || (seen == LSTORE)
- || (seen == FSTORE)
- || (seen == DSTORE)
- || ((seen >= ASTORE_0) && (seen <= ASTORE_3))
- || ((seen >= ISTORE_0) && (seen <= ISTORE_3))
- || ((seen >= LSTORE_0) && (seen <= LSTORE_1))
- || ((seen >= FSTORE_0) && (seen <= FSTORE_1))
- || ((seen >= DSTORE_0) && (seen <= DSTORE_1))) {
- int reg = RegisterUtils.getStoreReg(this, seen);
- Integer iReg = Integer14.valueOf(reg);
- int pc = getPC();
- if (catchHandlers.contains(Integer14.valueOf(pc)))
- {
- ignoreRegs.add(iReg);
- }
- else if (monitorSyncPCs.size() > 0)
- {
- ignoreRegs.add(iReg);
- }
- else if (sawNull)
- {
- ignoreRegs.add(iReg);
- }
-
- if (!ignoreRegs.contains(iReg)) {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, pc);
- if (sb != null) {
- Object assoc = null;
- if (stack.getStackDepth() > 0) {
- assoc = stack.getStackItem(0).getUserValue();
- }
- sb.addStore(reg, pc, assoc);
- if (sawDup)
- {
- sb.addLoad(reg, pc);
- }
- }
- else
- {
- ignoreRegs.add(iReg);
- }
- }
- } else if (seen == IINC) {
- int reg = getRegisterOperand();
- Integer iReg = Integer14.valueOf(reg);
- if (!ignoreRegs.contains(iReg)) {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
- if (sb != null)
- {
- sb.addLoad(reg, getPC());
- }
- else
- {
- ignoreRegs.add(iReg);
- }
- }
- int pc = getPC();
- if (catchHandlers.contains(Integer14.valueOf(pc)))
- {
- ignoreRegs.add(iReg);
- }
- else if (monitorSyncPCs.size() > 0)
- {
- ignoreRegs.add(iReg);
- }
- else if (sawNull)
- {
- ignoreRegs.add(iReg);
- }
-
- if (!ignoreRegs.contains(iReg)) {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, pc);
- if (sb != null) {
- sb.addStore(reg, pc, null);
- if (sawDup)
- {
- sb.addLoad(reg, pc);
- }
- }
- else
- {
- ignoreRegs.add(iReg);
- }
- }
- } else if ((seen == ALOAD)
- || (seen == ILOAD)
- || (seen == LLOAD)
- || (seen == FLOAD)
- || (seen == DLOAD)
- || ((seen >= ALOAD_0) && (seen <= ALOAD_3))
- || ((seen >= ILOAD_0) && (seen <= ILOAD_3))
- || ((seen >= LLOAD_0) && (seen <= LLOAD_1))
- || ((seen >= FLOAD_0) && (seen <= FLOAD_1))
- || ((seen >= DLOAD_0) && (seen <= DLOAD_1))) {
- int reg = RegisterUtils.getLoadReg(this, seen);
- if (!ignoreRegs.contains(Integer14.valueOf(reg))) {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
- if (sb != null)
- {
- sb.addLoad(reg, getPC());
- }
- else
- {
- ignoreRegs.add(Integer14.valueOf(reg));
- }
- }
- } else if (((seen >= IFEQ) && (seen <= GOTO)) || (seen == GOTO_W)) {
- int target = getBranchTarget();
- if (target > getPC()) {
- if ((seen == GOTO) || (seen == GOTO_W)) {
- Integer nextPC = Integer14.valueOf(getNextPC());
- if (!switchTargets.contains(nextPC)) {
- ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, getPC(), getNextPC());
- if (sb == null) {
- sb = new ScopeBlock(getPC(), target);
- sb.setLoop();
- sb.setGoto();
- rootScopeBlock.addChild(sb);
- } else {
- sb = new ScopeBlock(getPC(), target);
- sb.setGoto();
- rootScopeBlock.addChild(sb);
- }
- }
- } else {
- ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, getPC(), target);
- if ((sb != null) && (!sb.isLoop) && !sb.hasChildren()) {
- if (sb.isGoto()) {
- ScopeBlock parent = sb.getParent();
- sb.pushUpLoadStores();
- if (parent != null)
- {
- parent.removeChild(sb);
- }
- sb = new ScopeBlock(getPC(), target);
- rootScopeBlock.addChild(sb);
- } else {
- sb.pushUpLoadStores();
- sb.setStart(getPC());
- sb.setFinish(target);
- }
- } else {
- sb = new ScopeBlock(getPC(), target);
- rootScopeBlock.addChild(sb);
- }
- }
- } else {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
- if (sb != null)
- {
- sb.setLoop();
- }
- }
- } else if ((seen == TABLESWITCH) || (seen == LOOKUPSWITCH)) {
- int pc = getPC();
- int[] offsets = getSwitchOffsets();
- List<Integer> targets = new ArrayList<Integer>();
- for (int offset : offsets)
- {
- targets.add(Integer14.valueOf(offset + pc));
- }
- Integer defOffset = Integer14.valueOf(getDefaultSwitchOffset() + pc);
- if (!targets.contains(defOffset))
- {
- targets.add(defOffset);
- }
- Collections.sort(targets);
-
- Integer lastTarget = targets.get(0);
- for (int i = 1; i < targets.size(); i++) {
- Integer nextTarget = targets.get(i);
- ScopeBlock sb = new ScopeBlock(lastTarget.intValue(), nextTarget.intValue());
- rootScopeBlock.addChild(sb);
- lastTarget = nextTarget;
- }
- switchTargets.addAll(targets);
- } else if ((seen == INVOKEVIRTUAL) || (seen == INVOKEINTERFACE)) {
- if ("wasNull".equals(getNameConstantOperand())
- && "()Z".equals(getSigConstantOperand()))
- {
- dontReport = true;
- }
-
- caller = getCallingObject();
-
- if (caller != null) {
- ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
- if (sb != null) {
- sb.removeByAssoc(caller);
- }
- }
-
- } else if (seen == MONITORENTER) {
- monitorSyncPCs.add(Integer14.valueOf(getPC()));
- } else if (seen == MONITOREXIT) {
- if (monitorSyncPCs.size() > 0)
- {
- monitorSyncPCs.remove(monitorSyncPCs.size() - 1);
- }
- }
-
- sawDup = (seen == DUP);
- sawNull = (seen == ACONST_NULL);
- } finally {
- stack.sawOpcode(this, seen);
- if (caller != null) {
- if (stack.getStackDepth() > 0) {
- OpcodeStack.Item item = stack.getStackItem(0);
- item.setUserValue(caller);
- }
- }
- }
+ Comparable<?> caller = null;
+ try {
+ if ((seen == ASTORE)
+ || (seen == ISTORE)
+ || (seen == LSTORE)
+ || (seen == FSTORE)
+ || (seen == DSTORE)
+ || ((seen >= ASTORE_0) && (seen <= ASTORE_3))
+ || ((seen >= ISTORE_0) && (seen <= ISTORE_3))
+ || ((seen >= LSTORE_0) && (seen <= LSTORE_1))
+ || ((seen >= FSTORE_0) && (seen <= FSTORE_1))
+ || ((seen >= DSTORE_0) && (seen <= DSTORE_1))) {
+ int reg = RegisterUtils.getStoreReg(this, seen);
+ Integer iReg = Integer14.valueOf(reg);
+ int pc = getPC();
+ if (catchHandlers.contains(Integer14.valueOf(pc)))
+ {
+ ignoreRegs.add(iReg);
+ }
+ else if (monitorSyncPCs.size() > 0)
+ {
+ ignoreRegs.add(iReg);
+ }
+ else if (sawNull)
+ {
+ ignoreRegs.add(iReg);
+ }
+
+ if (!ignoreRegs.contains(iReg)) {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, pc);
+ if (sb != null) {
+ Object assoc = null;
+ if (stack.getStackDepth() > 0) {
+ assoc = stack.getStackItem(0).getUserValue();
+ }
+ sb.addStore(reg, pc, assoc);
+ if (sawDup)
+ {
+ sb.addLoad(reg, pc);
+ }
+ }
+ else
+ {
+ ignoreRegs.add(iReg);
+ }
+ }
+ } else if (seen == IINC) {
+ int reg = getRegisterOperand();
+ Integer iReg = Integer14.valueOf(reg);
+ if (!ignoreRegs.contains(iReg)) {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
+ if (sb != null)
+ {
+ sb.addLoad(reg, getPC());
+ }
+ else
+ {
+ ignoreRegs.add(iReg);
+ }
+ }
+ int pc = getPC();
+ if (catchHandlers.contains(Integer14.valueOf(pc)))
+ {
+ ignoreRegs.add(iReg);
+ }
+ else if (monitorSyncPCs.size() > 0)
+ {
+ ignoreRegs.add(iReg);
+ }
+ else if (sawNull)
+ {
+ ignoreRegs.add(iReg);
+ }
+
+ if (!ignoreRegs.contains(iReg)) {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, pc);
+ if (sb != null) {
+ sb.addStore(reg, pc, null);
+ if (sawDup)
+ {
+ sb.addLoad(reg, pc);
+ }
+ }
+ else
+ {
+ ignoreRegs.add(iReg);
+ }
+ }
+ } else if ((seen == ALOAD)
+ || (seen == ILOAD)
+ || (seen == LLOAD)
+ || (seen == FLOAD)
+ || (seen == DLOAD)
+ || ((seen >= ALOAD_0) && (seen <= ALOAD_3))
+ || ((seen >= ILOAD_0) && (seen <= ILOAD_3))
+ || ((seen >= LLOAD_0) && (seen <= LLOAD_1))
+ || ((seen >= FLOAD_0) && (seen <= FLOAD_1))
+ || ((seen >= DLOAD_0) && (seen <= DLOAD_1))) {
+ int reg = RegisterUtils.getLoadReg(this, seen);
+ if (!ignoreRegs.contains(Integer14.valueOf(reg))) {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
+ if (sb != null)
+ {
+ sb.addLoad(reg, getPC());
+ }
+ else
+ {
+ ignoreRegs.add(Integer14.valueOf(reg));
+ }
+ }
+ } else if (((seen >= IFEQ) && (seen <= GOTO)) || (seen == GOTO_W)) {
+ int target = getBranchTarget();
+ if (target > getPC()) {
+ if ((seen == GOTO) || (seen == GOTO_W)) {
+ Integer nextPC = Integer14.valueOf(getNextPC());
+ if (!switchTargets.contains(nextPC)) {
+ ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, getPC(), getNextPC());
+ if (sb == null) {
+ sb = new ScopeBlock(getPC(), target);
+ sb.setLoop();
+ sb.setGoto();
+ rootScopeBlock.addChild(sb);
+ } else {
+ sb = new ScopeBlock(getPC(), target);
+ sb.setGoto();
+ rootScopeBlock.addChild(sb);
+ }
+ }
+ } else {
+ ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, getPC(), target);
+ if ((sb != null) && (!sb.isLoop) && !sb.hasChildren()) {
+ if (sb.isGoto()) {
+ ScopeBlock parent = sb.getParent();
+ sb.pushUpLoadStores();
+ if (parent != null)
+ {
+ parent.removeChild(sb);
+ }
+ sb = new ScopeBlock(getPC(), target);
+ rootScopeBlock.addChild(sb);
+ } else {
+ sb.pushUpLoadStores();
+ sb.setStart(getPC());
+ sb.setFinish(target);
+ }
+ } else {
+ sb = new ScopeBlock(getPC(), target);
+ rootScopeBlock.addChild(sb);
+ }
+ }
+ } else {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
+ if (sb != null)
+ {
+ sb.setLoop();
+ }
+ }
+ } else if ((seen == TABLESWITCH) || (seen == LOOKUPSWITCH)) {
+ int pc = getPC();
+ int[] offsets = getSwitchOffsets();
+ List<Integer> targets = new ArrayList<Integer>();
+ for (int offset : offsets)
+ {
+ targets.add(Integer14.valueOf(offset + pc));
+ }
+ Integer defOffset = Integer14.valueOf(getDefaultSwitchOffset() + pc);
+ if (!targets.contains(defOffset))
+ {
+ targets.add(defOffset);
+ }
+ Collections.sort(targets);
+
+ Integer lastTarget = targets.get(0);
+ for (int i = 1; i < targets.size(); i++) {
+ Integer nextTarget = targets.get(i);
+ ScopeBlock sb = new ScopeBlock(lastTarget.intValue(), nextTarget.intValue());
+ rootScopeBlock.addChild(sb);
+ lastTarget = nextTarget;
+ }
+ switchTargets.addAll(targets);
+ } else if ((seen == INVOKEVIRTUAL) || (seen == INVOKEINTERFACE)) {
+ if ("wasNull".equals(getNameConstantOperand())
+ && "()Z".equals(getSigConstantOperand()))
+ {
+ dontReport = true;
+ }
+
+ caller = getCallingObject();
+
+ if (caller != null) {
+ ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
+ if (sb != null) {
+ sb.removeByAssoc(caller);
+ }
+ }
+
+ } else if (seen == MONITORENTER) {
+ monitorSyncPCs.add(Integer14.valueOf(getPC()));
+ } else if (seen == MONITOREXIT) {
+ if (monitorSyncPCs.size() > 0)
+ {
+ monitorSyncPCs.remove(monitorSyncPCs.size() - 1);
+ }
+ }
+
+ sawDup = (seen == DUP);
+ sawNull = (seen == ACONST_NULL);
+ } finally {
+ stack.sawOpcode(this, seen);
+ if (caller != null) {
+ if (stack.getStackDepth() > 0) {
+ OpcodeStack.Item item = stack.getStackItem(0);
+ item.setUserValue(caller);
+ }
+ }
+ }
}
-
+
/**
* returns either a register number of a field reference of the object that a method is being called on,
* or null, if it can't be determined.
*
* @return either an Integer for a register, or a String for the field name, or null
*/
- private Object getCallingObject() {
- String sig = getSigConstantOperand();
- if ("V".equals(Type.getReturnType(sig).getSignature()))
- {
- return null;
- }
-
- Type[] types = Type.getArgumentTypes(sig);
- if (stack.getStackDepth() <= types.length) {
- return null;
- }
-
- OpcodeStack.Item caller = stack.getStackItem(types.length);
- int reg = caller.getRegisterNumber();
- if (reg >= 0)
- {
- return Integer.valueOf(reg);
- }
-
- /* We ignore the possibility of two fields with the same name in different classes */
- XField f = caller.getXField();
- if (f != null)
- {
- return f.getName();
- }
- return null;
+ private Comparable<?> getCallingObject() {
+ String sig = getSigConstantOperand();
+ if ("V".equals(Type.getReturnType(sig).getSignature()))
+ {
+ return null;
+ }
+
+ Type[] types = Type.getArgumentTypes(sig);
+ if (stack.getStackDepth() <= types.length) {
+ return null;
+ }
+
+ OpcodeStack.Item caller = stack.getStackItem(types.length);
+ int reg = caller.getRegisterNumber();
+ if (reg >= 0)
+ {
+ return Integer.valueOf(reg);
+ }
+
+ /* We ignore the possibility of two fields with the same name in different classes */
+ XField f = caller.getXField();
+ if (f != null)
+ {
+ return f.getName();
+ }
+ return null;
}
- /**
+ /**
* returns the scope block in which this register was assigned, by traversing the scope block tree
*
* @param sb the scope block to start searching in
@@ -405,22 +405,22 @@
* @return the scope block or null if not found
*/
private ScopeBlock findScopeBlock(ScopeBlock sb, int pc) {
-
+
if ((pc > sb.getStart()) && (pc < sb.getFinish())) {
if (sb.children != null) {
for (ScopeBlock child : sb.children) {
ScopeBlock foundSb = findScopeBlock(child, pc);
if (foundSb != null)
- {
- return foundSb;
- }
+ {
+ return foundSb;
+ }
}
}
return sb;
}
return null;
}
-
+
/**
* returns an existing scope block that has the same target as the one looked for
*
@@ -430,28 +430,28 @@
* @return the scope block found or null
*/
private ScopeBlock findScopeBlockWithTarget(ScopeBlock sb, int start, int target) {
- ScopeBlock parentBlock = null;
+ ScopeBlock parentBlock = null;
if ((sb.startLocation < start) && (sb.finishLocation >= start)) {
- if ((sb.finishLocation <= target) || (sb.isGoto() && !sb.isLoop()))
- {
- parentBlock = sb;
- }
- }
-
+ if ((sb.finishLocation <= target) || (sb.isGoto() && !sb.isLoop()))
+ {
+ parentBlock = sb;
+ }
+ }
+
if (sb.children != null)
{
for (ScopeBlock child : sb.children) {
ScopeBlock targetBlock = findScopeBlockWithTarget(child, start, target);
if (targetBlock != null)
- {
- return targetBlock;
- }
+ {
+ return targetBlock;
+ }
}
}
-
+
return parentBlock;
}
-
+
/** holds the description of a scope { } block, be it a for, if, while block
*/
private class ScopeBlock
@@ -460,12 +460,12 @@
private int startLocation;
private int finishLocation;
private boolean isLoop;
- private boolean isGoto;
+ private boolean isGoto;
private Map<Integer, Integer> loads;
private Map<Integer, Integer> stores;
private Map<Object, Integer> assocs;
private List<ScopeBlock> children;
-
+
/** construts a new scope block
*
* @param start the beginning of the block
@@ -476,13 +476,13 @@
startLocation = start;
finishLocation = finish;
isLoop = false;
- isGoto = false;
+ isGoto = false;
loads = null;
stores = null;
assocs = null;
children = null;
}
-
+
/**
* returns a string representation of the scope block
*
@@ -492,16 +492,16 @@
public String toString() {
return "Start=" + startLocation + " Finish=" + finishLocation + " Loop=" + isLoop + " Loads=" + loads + " Stores=" + stores;
}
-
- /**
- * returns the scope blocks parent
- *
- * @return the parent of this scope block
- */
- public ScopeBlock getParent() {
- return parent;
- }
-
+
+ /**
+ * returns the scope blocks parent
+ *
+ * @return the parent of this scope block
+ */
+ public ScopeBlock getParent() {
+ return parent;
+ }
+
/** returns the start of the block
*
* @return the start of the block
@@ -517,59 +517,59 @@
public int getFinish() {
return finishLocation;
}
-
- /**
- * sets the start pc of the block
- * @param start the start pc
- */
- public void setStart(int start) {
- startLocation = start;
- }
-
- /**
- * sets the finish pc of the block
- * @param finish the finish pc
- */
- public void setFinish(int finish) {
- finishLocation = finish;
- }
- public boolean hasChildren() {
- return children != null;
- }
/**
+ * sets the start pc of the block
+ * @param start the start pc
+ */
+ public void setStart(int start) {
+ startLocation = start;
+ }
+
+ /**
+ * sets the finish pc of the block
+ * @param finish the finish pc
+ */
+ public void setFinish(int finish) {
+ finishLocation = finish;
+ }
+
+ public boolean hasChildren() {
+ return children != null;
+ }
+ /**
* sets that this block is a loop
*/
public void setLoop() {
isLoop = true;
}
-
- /**
- * returns whether this scope block is a loop
- *
- * @returns whether this block is a loop
- */
- public boolean isLoop() {
- return isLoop;
- }
-
- /**
- * sets that this block was caused from a goto, (an if block exit)
- */
- public void setGoto() {
- isGoto = true;
- }
-
- /**
- * returns whether this block was caused from a goto
- *
- * @returns whether this block was caused by a goto
- */
- public boolean isGoto() {
- return isGoto;
- }
/**
+ * returns whether this scope block is a loop
+ *
+ * @returns whether this block is a loop
+ */
+ public boolean isLoop() {
+ return isLoop;
+ }
+
+ /**
+ * sets that this block was caused from a goto, (an if block exit)
+ */
+ public void setGoto() {
+ isGoto = true;
+ }
+
+ /**
+ * returns whether this block was caused from a goto
+ *
+ * @returns whether this block was caused by a goto
+ */
+ public boolean isGoto() {
+ return isGoto;
+ }
+
+ /**
* adds the register as a store in this scope block
*
* @param reg the register that was stored
@@ -577,37 +577,37 @@
*/
public void addStore(int reg, int pc, Object assocObject) {
if (stores == null)
- {
- stores = new HashMap<Integer, Integer>();
- }
-
+ {
+ stores = new HashMap<Integer, Integer>();
+ }
+
stores.put(Integer14.valueOf(reg), Integer14.valueOf(pc));
if (assocs == null)
- {
- assocs = new HashMap<Object, Integer>();
- }
+ {
+ assocs = new HashMap<Object, Integer>();
+ }
assocs.put(assocObject, Integer14.valueOf(reg));
}
-
- /**
+
+ /**
* removes stores to registers that where retrieved from method calls on assocObject
*
* @param assocObject the object that a method call was just performed on
*/
public void removeByAssoc(Object assocObject) {
- if (assocs != null) {
- Integer reg = assocs.remove(assocObject);
- if (reg != null) {
- if (loads != null) {
- loads.remove(reg);
- }
- if (stores != null) {
- stores.remove(reg);
- }
- }
- }
+ if (assocs != null) {
+ Integer reg = assocs.remove(assocObject);
+ if (reg != null) {
+ if (loads != null) {
+ loads.remove(reg);
+ }
+ if (stores != null) {
+ stores.remove(reg);
+ }
+ }
+ }
}
-
+
/**
* adds the register as a load in this scope block
*
@@ -616,13 +616,13 @@
*/
public void addLoad(int reg, int pc) {
if (loads == null)
- {
- loads = new HashMap<Integer, Integer>();
- }
-
+ {
+ loads = new HashMap<Integer, Integer>();
+ }
+
loads.put(Integer14.valueOf(reg), Integer14.valueOf(pc));
}
-
+
/**
* adds a scope block to this subtree by finding the correct place in the hierarchy to store it
*
@@ -652,77 +652,77 @@
children = new ArrayList<ScopeBlock>();
children.add(newChild);
}
-
- /**
- * removes a child from this node
- * @param child the child to remove
- */
- public void removeChild(ScopeBlock child) {
- if (children != null)
- {
- children.remove(child);
- }
- }
-
+
/**
+ * removes a child from this node
+ * @param child the child to remove
+ */
+ public void removeChild(ScopeBlock child) {
+ if (children != null)
+ {
+ children.remove(child);
+ }
+ }
+
+ /**
* report stores that occur at scopes higher than associated loads that are not involved with loops
*/
public void findBugs(Set<Integer> parentUsedRegs) {
if (isLoop)
- {
- return;
- }
-
- Set<Integer> usedRegs = new HashSet<Integer>(parentUsedRegs);
- if (stores != null)
- {
- usedRegs.addAll(stores.keySet());
- }
- if (loads != null)
- {
- usedRegs.addAll(loads.keySet());
- }
-
+ {
+ return;
+ }
+
+ Set<Integer> usedRegs = new HashSet<Integer>(parentUsedRegs);
+ if (stores != null)
+ {
+ usedRegs.addAll(stores.keySet());
+ }
+ if (loads != null)
+ {
+ usedRegs.addAll(loads.keySet());
+ }
+
if (stores != null) {
if (loads != null)
- {
- stores.keySet().removeAll(loads.keySet());
- }
- stores.keySet().removeAll(parentUsedRegs);
-
- if (stores.size() > 0) {
- if (children != null) {
- for (Map.Entry<Integer, Integer> entry : stores.entrySet()) {
- int childUseCount = 0;
- boolean inLoop = false;
- Integer reg = entry.getKey();
- for (ScopeBlock child : children) {
- if (child.uses...
[truncated message content] |
|
From: <dbr...@us...> - 2009-10-06 04:44:52
|
Revision: 1360
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1360&view=rev
Author: dbrosius
Date: 2009-10-06 04:44:47 +0000 (Tue, 06 Oct 2009)
Log Message:
-----------
use Integer14
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-10-06 04:42:35 UTC (rev 1359)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-10-06 04:44:47 UTC (rev 1360)
@@ -386,7 +386,7 @@
int reg = caller.getRegisterNumber();
if (reg >= 0)
{
- return Integer.valueOf(reg);
+ return Integer14.valueOf(reg);
}
/* We ignore the possibility of two fields with the same name in different classes */
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-11-26 03:23:14
|
Revision: 1386
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1386&view=rev
Author: dbrosius
Date: 2009-11-26 03:23:03 +0000 (Thu, 26 Nov 2009)
Log Message:
-----------
javadoc
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-11-14 20:07:23 UTC (rev 1385)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-11-26 03:23:03 UTC (rev 1386)
@@ -626,7 +626,7 @@
/**
* adds a scope block to this subtree by finding the correct place in the hierarchy to store it
*
- * @param child the scope block to add to the tree
+ * @param newChild the scope block to add to the tree
*/
public void addChild(ScopeBlock newChild) {
newChild.parent = this;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2009-12-20 00:40:57
|
Revision: 1402
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1402&view=rev
Author: dbrosius
Date: 2009-12-20 00:40:49 +0000 (Sun, 20 Dec 2009)
Log Message:
-----------
no need for Integer14 anymore
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-12-20 00:39:13 UTC (rev 1401)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2009-12-20 00:40:49 UTC (rev 1402)
@@ -31,7 +31,6 @@
import org.apache.bcel.classfile.Method;
import org.apache.bcel.generic.Type;
-import com.mebigfatguy.fbcontrib.utils.Integer14;
import com.mebigfatguy.fbcontrib.utils.RegisterUtils;
import edu.umd.cs.findbugs.BugInstance;
@@ -104,12 +103,12 @@
Method method = getMethod();
if (!method.isStatic())
{
- ignoreRegs.add(Integer14.valueOf(0));
+ ignoreRegs.add(Integer.valueOf(0));
}
int[] parmRegs = RegisterUtils.getParameterRegisters(method);
for (int parm : parmRegs) {
- ignoreRegs.add(Integer14.valueOf(parm));
+ ignoreRegs.add(Integer.valueOf(parm));
}
rootScopeBlock = new ScopeBlock(0, obj.getLength());
@@ -117,7 +116,7 @@
CodeException[] exceptions = obj.getExceptionTable();
if (exceptions != null) {
for (CodeException ex : exceptions) {
- catchHandlers.add(Integer14.valueOf(ex.getHandlerPC()));
+ catchHandlers.add(Integer.valueOf(ex.getHandlerPC()));
}
}
@@ -159,9 +158,9 @@
|| ((seen >= FSTORE_0) && (seen <= FSTORE_1))
|| ((seen >= DSTORE_0) && (seen <= DSTORE_1))) {
int reg = RegisterUtils.getStoreReg(this, seen);
- Integer iReg = Integer14.valueOf(reg);
+ Integer iReg = Integer.valueOf(reg);
int pc = getPC();
- if (catchHandlers.contains(Integer14.valueOf(pc)))
+ if (catchHandlers.contains(Integer.valueOf(pc)))
{
ignoreRegs.add(iReg);
}
@@ -194,7 +193,7 @@
}
} else if (seen == IINC) {
int reg = getRegisterOperand();
- Integer iReg = Integer14.valueOf(reg);
+ Integer iReg = Integer.valueOf(reg);
if (!ignoreRegs.contains(iReg)) {
ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
if (sb != null)
@@ -207,7 +206,7 @@
}
}
int pc = getPC();
- if (catchHandlers.contains(Integer14.valueOf(pc)))
+ if (catchHandlers.contains(Integer.valueOf(pc)))
{
ignoreRegs.add(iReg);
}
@@ -245,7 +244,7 @@
|| ((seen >= FLOAD_0) && (seen <= FLOAD_1))
|| ((seen >= DLOAD_0) && (seen <= DLOAD_1))) {
int reg = RegisterUtils.getLoadReg(this, seen);
- if (!ignoreRegs.contains(Integer14.valueOf(reg))) {
+ if (!ignoreRegs.contains(Integer.valueOf(reg))) {
ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
if (sb != null)
{
@@ -253,14 +252,14 @@
}
else
{
- ignoreRegs.add(Integer14.valueOf(reg));
+ ignoreRegs.add(Integer.valueOf(reg));
}
}
} else if (((seen >= IFEQ) && (seen <= GOTO)) || (seen == GOTO_W)) {
int target = getBranchTarget();
if (target > getPC()) {
if ((seen == GOTO) || (seen == GOTO_W)) {
- Integer nextPC = Integer14.valueOf(getNextPC());
+ Integer nextPC = Integer.valueOf(getNextPC());
if (!switchTargets.contains(nextPC)) {
ScopeBlock sb = findScopeBlockWithTarget(rootScopeBlock, getPC(), getNextPC());
if (sb == null) {
@@ -309,9 +308,9 @@
List<Integer> targets = new ArrayList<Integer>();
for (int offset : offsets)
{
- targets.add(Integer14.valueOf(offset + pc));
+ targets.add(Integer.valueOf(offset + pc));
}
- Integer defOffset = Integer14.valueOf(getDefaultSwitchOffset() + pc);
+ Integer defOffset = Integer.valueOf(getDefaultSwitchOffset() + pc);
if (!targets.contains(defOffset))
{
targets.add(defOffset);
@@ -343,7 +342,7 @@
}
} else if (seen == MONITORENTER) {
- monitorSyncPCs.add(Integer14.valueOf(getPC()));
+ monitorSyncPCs.add(Integer.valueOf(getPC()));
} else if (seen == MONITOREXIT) {
if (monitorSyncPCs.size() > 0)
{
@@ -386,7 +385,7 @@
int reg = caller.getRegisterNumber();
if (reg >= 0)
{
- return Integer14.valueOf(reg);
+ return Integer.valueOf(reg);
}
/* We ignore the possibility of two fields with the same name in different classes */
@@ -581,12 +580,12 @@
stores = new HashMap<Integer, Integer>();
}
- stores.put(Integer14.valueOf(reg), Integer14.valueOf(pc));
+ stores.put(Integer.valueOf(reg), Integer.valueOf(pc));
if (assocs == null)
{
assocs = new HashMap<Object, Integer>();
}
- assocs.put(assocObject, Integer14.valueOf(reg));
+ assocs.put(assocObject, Integer.valueOf(reg));
}
/**
@@ -620,7 +619,7 @@
loads = new HashMap<Integer, Integer>();
}
- loads.put(Integer14.valueOf(reg), Integer14.valueOf(pc));
+ loads.put(Integer.valueOf(reg), Integer.valueOf(pc));
}
/**
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2011-03-06 16:36:17
|
Revision: 1656
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1656&view=rev
Author: dbrosius
Date: 2011-03-06 16:36:11 +0000 (Sun, 06 Mar 2011)
Log Message:
-----------
LSTORE goes up to 3
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-03-06 16:30:15 UTC (rev 1655)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-03-06 16:36:11 UTC (rev 1656)
@@ -154,7 +154,7 @@
|| (seen == DSTORE)
|| ((seen >= ASTORE_0) && (seen <= ASTORE_3))
|| ((seen >= ISTORE_0) && (seen <= ISTORE_3))
- || ((seen >= LSTORE_0) && (seen <= LSTORE_1))
+ || ((seen >= LSTORE_0) && (seen <= LSTORE_3))
|| ((seen >= FSTORE_0) && (seen <= FSTORE_1))
|| ((seen >= DSTORE_0) && (seen <= DSTORE_1))) {
int reg = RegisterUtils.getStoreReg(this, seen);
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2011-03-06 16:59:36
|
Revision: 1657
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1657&view=rev
Author: dbrosius
Date: 2011-03-06 16:59:29 +0000 (Sun, 06 Mar 2011)
Log Message:
-----------
add ability to ignore BAS from method calls that are risky
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-03-06 16:36:11 UTC (rev 1656)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-03-06 16:59:29 UTC (rev 1657)
@@ -47,6 +47,11 @@
*/
public class BloatedAssignmentScope extends BytecodeScanningDetector
{
+ private static final Set<String> dangerousAssignmentSources = new HashSet<String>();
+ static {
+ dangerousAssignmentSources.add("java/lang/System.currentTimeMillis()J");
+ }
+
BugReporter bugReporter;
private OpcodeStack stack;
private Set<Integer> ignoreRegs;
@@ -145,7 +150,7 @@
*/
@Override
public void sawOpcode(int seen) {
- Comparable<?> caller = null;
+ UserObject uo = null;
try {
if ((seen == ASTORE)
|| (seen == ISTORE)
@@ -160,6 +165,7 @@
int reg = RegisterUtils.getStoreReg(this, seen);
Integer iReg = Integer.valueOf(reg);
int pc = getPC();
+
if (catchHandlers.contains(Integer.valueOf(pc)))
{
ignoreRegs.add(iReg);
@@ -176,14 +182,19 @@
if (!ignoreRegs.contains(iReg)) {
ScopeBlock sb = findScopeBlock(rootScopeBlock, pc);
if (sb != null) {
- Object assoc = null;
+ UserObject assoc = null;
if (stack.getStackDepth() > 0) {
- assoc = stack.getStackItem(0).getUserValue();
+ assoc = (UserObject)stack.getStackItem(0).getUserValue();
}
- sb.addStore(reg, pc, assoc);
- if (sawDup)
- {
- sb.addLoad(reg, pc);
+
+ if ((assoc != null) && assoc.isRisky) {
+ ignoreRegs.add(iReg);
+ } else {
+ sb.addStore(reg, pc, assoc);
+ if (sawDup)
+ {
+ sb.addLoad(reg, pc);
+ }
}
}
else
@@ -332,15 +343,19 @@
dontReport = true;
}
- caller = getCallingObject();
+ uo = new UserObject();
+ uo.isRisky = isRiskyMethodCall();
+ uo.caller = getCallingObject();
- if (caller != null) {
+ if (uo.caller != null) {
ScopeBlock sb = findScopeBlock(rootScopeBlock, getPC());
if (sb != null) {
- sb.removeByAssoc(caller);
+ sb.removeByAssoc(uo.caller);
}
}
-
+ } else if ((seen == INVOKESTATIC) || (seen == INVOKESPECIAL)) {
+ uo = new UserObject();
+ uo.isRisky = isRiskyMethodCall();
} else if (seen == MONITORENTER) {
monitorSyncPCs.add(Integer.valueOf(getPC()));
} else if (seen == MONITOREXIT) {
@@ -354,10 +369,10 @@
sawNull = (seen == ACONST_NULL);
} finally {
stack.sawOpcode(this, seen);
- if (caller != null) {
+ if (uo != null) {
if (stack.getStackDepth() > 0) {
OpcodeStack.Item item = stack.getStackItem(0);
- item.setUserValue(caller);
+ item.setUserValue(uo);
}
}
}
@@ -462,7 +477,7 @@
private boolean isGoto;
private Map<Integer, Integer> loads;
private Map<Integer, Integer> stores;
- private Map<Object, Integer> assocs;
+ private Map<UserObject, Integer> assocs;
private List<ScopeBlock> children;
/** construts a new scope block
@@ -574,7 +589,7 @@
* @param reg the register that was stored
* @param pc the instruction that did the store
*/
- public void addStore(int reg, int pc, Object assocObject) {
+ public void addStore(int reg, int pc, UserObject assocObject) {
if (stores == null)
{
stores = new HashMap<Integer, Integer>();
@@ -583,7 +598,7 @@
stores.put(Integer.valueOf(reg), Integer.valueOf(pc));
if (assocs == null)
{
- assocs = new HashMap<Object, Integer>();
+ assocs = new HashMap<UserObject, Integer>();
}
assocs.put(assocObject, Integer.valueOf(reg));
}
@@ -781,4 +796,14 @@
}
}
}
+
+ public boolean isRiskyMethodCall() {
+ String key = getClassConstantOperand() + "." + getNameConstantOperand() + getSigConstantOperand();
+ return dangerousAssignmentSources.contains(key);
+ }
+
+ class UserObject {
+ Comparable<?> caller;
+ boolean isRisky;
+ }
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2011-03-06 21:56:55
|
Revision: 1658
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1658&view=rev
Author: dbrosius
Date: 2011-03-06 21:56:49 +0000 (Sun, 06 Mar 2011)
Log Message:
-----------
rule out ObjectInput as well
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-03-06 16:59:29 UTC (rev 1657)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-03-06 21:56:49 UTC (rev 1658)
@@ -47,9 +47,13 @@
*/
public class BloatedAssignmentScope extends BytecodeScanningDetector
{
- private static final Set<String> dangerousAssignmentSources = new HashSet<String>();
+ private static final Set<String> dangerousAssignmentClassSources = new HashSet<String>();
+ private static final Set<String> dangerousAssignmentMethodSources = new HashSet<String>();
+
static {
- dangerousAssignmentSources.add("java/lang/System.currentTimeMillis()J");
+ dangerousAssignmentClassSources.add("java/io/InputStream");
+ dangerousAssignmentClassSources.add("java/io/ObjectInput");
+ dangerousAssignmentMethodSources.add("java/lang/System.currentTimeMillis()J");
}
BugReporter bugReporter;
@@ -798,8 +802,15 @@
}
public boolean isRiskyMethodCall() {
- String key = getClassConstantOperand() + "." + getNameConstantOperand() + getSigConstantOperand();
- return dangerousAssignmentSources.contains(key);
+
+ String clsName =getClassConstantOperand();
+
+ if (dangerousAssignmentClassSources.contains(clsName)) {
+ return true;
+ }
+
+ String key = clsName + "." + getNameConstantOperand() + getSigConstantOperand();
+ return dangerousAssignmentMethodSources.contains(key);
}
class UserObject {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2011-06-04 00:13:02
|
Revision: 1667
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1667&view=rev
Author: dbrosius
Date: 2011-06-04 00:12:55 +0000 (Sat, 04 Jun 2011)
Log Message:
-----------
handle IFNULL and IFNONNULL
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-05-05 01:01:17 UTC (rev 1666)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-06-04 00:12:55 UTC (rev 1667)
@@ -270,7 +270,7 @@
ignoreRegs.add(Integer.valueOf(reg));
}
}
- } else if (((seen >= IFEQ) && (seen <= GOTO)) || (seen == GOTO_W)) {
+ } else if (((seen >= IFEQ) && (seen <= GOTO)) || (seen == IFNULL) || (seen == IFNONNULL) || (seen == GOTO_W)) {
int target = getBranchTarget();
if (target > getPC()) {
if ((seen == GOTO) || (seen == GOTO_W)) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2011-06-04 04:45:26
|
Revision: 1669
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1669&view=rev
Author: dbrosius
Date: 2011-06-04 04:45:20 +0000 (Sat, 04 Jun 2011)
Log Message:
-----------
spacing
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-06-04 04:44:54 UTC (rev 1668)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-06-04 04:45:20 UTC (rev 1669)
@@ -803,7 +803,7 @@
public boolean isRiskyMethodCall() {
- String clsName =getClassConstantOperand();
+ String clsName = getClassConstantOperand();
if (dangerousAssignmentClassSources.contains(clsName)) {
return true;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <dbr...@us...> - 2011-10-14 05:34:21
|
Revision: 1705
http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1705&view=rev
Author: dbrosius
Date: 2011-10-14 05:34:15 +0000 (Fri, 14 Oct 2011)
Log Message:
-----------
don't report ignored regs
Modified Paths:
--------------
trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java
===================================================================
--- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-08-23 10:31:31 UTC (rev 1704)
+++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/BloatedAssignmentScope.java 2011-10-14 05:34:15 UTC (rev 1705)
@@ -707,6 +707,7 @@
stores.keySet().removeAll(loads.keySet());
}
stores.keySet().removeAll(parentUsedRegs);
+ stores.keySet().removeAll(ignoreRegs);
if (stores.size() > 0) {
if (children != null) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|