[Fb-contrib-commit] SF.net SVN: fb-contrib:[1207] trunk/fb-contrib/src/com/mebigfatguy/ fbcontrib/
Brought to you by:
dbrosius
From: <dbr...@us...> - 2009-05-10 23:38:54
|
Revision: 1207 http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=1207&view=rev Author: dbrosius Date: 2009-05-10 23:38:50 +0000 (Sun, 10 May 2009) Log Message: ----------- make sure caller and callee are in the same basic package Modified Paths: -------------- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/StutteredMethodArguments.java Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/StutteredMethodArguments.java =================================================================== --- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/StutteredMethodArguments.java 2009-05-10 15:22:44 UTC (rev 1206) +++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/StutteredMethodArguments.java 2009-05-10 23:38:50 UTC (rev 1207) @@ -24,6 +24,8 @@ import org.apache.bcel.classfile.Code; import org.apache.bcel.generic.Type; +import com.mebigfatguy.fbcontrib.utils.SignatureUtils; + import edu.umd.cs.findbugs.BugInstance; import edu.umd.cs.findbugs.BugReporter; import edu.umd.cs.findbugs.BytecodeScanningDetector; @@ -42,6 +44,7 @@ } private final BugReporter bugReporter; private OpcodeStack stack; + private String processedPackageName; private String processedMethodName; /** @@ -64,9 +67,11 @@ { try { stack = new OpcodeStack(); + processedPackageName = classContext.getJavaClass().getPackageName(); super.visitClassContext(classContext); } finally { stack = null; + processedPackageName = null; } } @@ -77,9 +82,14 @@ */ @Override public void visitCode(Code obj) { - stack.resetForMethodEntry(this); - processedMethodName = getMethod().getName(); - super.visitCode(obj); + try { + stack.resetForMethodEntry(this); + processedMethodName = getMethod().getName(); + super.visitCode(obj); + } finally { + processedMethodName = null; + } + } /** @@ -99,18 +109,27 @@ case INVOKEINTERFACE: case INVOKESPECIAL: String clsName = getClassConstantOperand(); - String methodName = getNameConstantOperand(); - String signature = getSigConstantOperand(); - String methodInfo = clsName + ":" + methodName + signature; - if ((!processedMethodName.equals(methodName)) && !ignorableSignatures.contains(methodInfo)) { - Type[] parms = Type.getArgumentTypes(signature); - if (parms.length > 1) { - if (stack.getStackDepth() > parms.length) { - if (duplicateArguments(stack, parms)) { - bugReporter.reportBug(new BugInstance(this, "SMA_STUTTERED_METHOD_ARGUMENTS", NORMAL_PRIORITY) - .addClass(this) - .addMethod(this) - .addSourceLine(this)); + String packageName; + int slashPos = clsName.lastIndexOf('/'); + if (slashPos >= 0) + packageName = clsName.substring(0, slashPos); + else + packageName = ""; + + if (SignatureUtils.similarPackages(processedPackageName, packageName, 2)) { + String methodName = getNameConstantOperand(); + String signature = getSigConstantOperand(); + String methodInfo = clsName + ":" + methodName + signature; + if ((!processedMethodName.equals(methodName)) && !ignorableSignatures.contains(methodInfo)) { + Type[] parms = Type.getArgumentTypes(signature); + if (parms.length > 1) { + if (stack.getStackDepth() > parms.length) { + if (duplicateArguments(stack, parms)) { + bugReporter.reportBug(new BugInstance(this, "SMA_STUTTERED_METHOD_ARGUMENTS", NORMAL_PRIORITY) + .addClass(this) + .addMethod(this) + .addSourceLine(this)); + } } } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |