[Fb-contrib-commit] fb-contrib/src/com/mebigfatguy/fbcontrib/detect OverlyConcreteParameter.java,1.2
Brought to you by:
dbrosius
|
From: Dave B. <dbr...@us...> - 2005-11-01 04:29:58
|
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; } |