Update of /cvsroot/fb-contrib/fb-contrib/src/com/mebigfatguy/fbcontrib/detect
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv25859/src/com/mebigfatguy/fbcontrib/detect
Modified Files:
OverlyConcreteParameter.java
Log Message:
Fix OCP Bug if a value is directly loaded or saved to a field in a parameter, then don't report it.
Index: OverlyConcreteParameter.java
===================================================================
RCS file: /cvsroot/fb-contrib/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/OverlyConcreteParameter.java,v
retrieving revision 1.21
retrieving revision 1.22
diff -u -d -r1.21 -r1.22
--- OverlyConcreteParameter.java 19 Oct 2005 04:08:48 -0000 1.21
+++ OverlyConcreteParameter.java 1 Nov 2005 04:29:49 -0000 1.22
@@ -123,7 +123,7 @@
parameterDefiners.clear();
}
}
- } else if ((seen == ASTORE) || ((seen >= ASTORE_0) && (seen <= ASTORE_3)) || (seen == PUTFIELD) || (seen == PUTSTATIC)) {
+ } else if ((seen == ASTORE) || ((seen >= ASTORE_0) && (seen <= ASTORE_3)) || (seen == PUTFIELD) || (seen == GETFIELD) || (seen == PUTSTATIC) || (seen == GETSTATIC)) {
//Don't check parameters that are aliased
if (stack.getStackDepth() > 0) {
OpcodeStack.Item itm = stack.getStackItem(0);
@@ -136,6 +136,21 @@
} else {
parameterDefiners.clear();
}
+
+ if ((seen == GETFIELD) || (seen == PUTFIELD)) {
+ if (stack.getStackDepth() > 1) {
+ OpcodeStack.Item itm = stack.getStackItem(1);
+ int reg = itm.getRegisterNumber();
+ int parm = reg;
+ if (!methodIsStatic)
+ parm--;
+ if ((parm >= 0) && (parm < parmCount))
+ parameterDefiners.remove(reg);
+ } else {
+ parameterDefiners.clear();
+ }
+ }
+
} else if ((seen == ALOAD) || ((seen >= ALOAD_0) && (seen <= ALOAD_3))) {
int reg;
if (seen == ALOAD)
@@ -231,14 +246,6 @@
definers.put(ci, methodInfos);
}
}
-/* It seems problematic to suggest using a super class so comment this out for now
- for (JavaClass ci : cls.getSuperClasses()) {
- List<String> methodInfos = getPublicMethodInfos(ci);
- if (methodInfos.size() > 0) {
- definers.put(ci, methodInfos);
- }
- }
-*/
return definers;
}
|