[Fb-contrib-commit] SF.net SVN: fb-contrib: [430] trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/det
Brought to you by:
dbrosius
From: <dbr...@us...> - 2006-04-09 21:02:45
|
Revision: 430 Author: dbrosius Date: 2006-04-09 14:02:41 -0700 (Sun, 09 Apr 2006) ViewCVS: http://svn.sourceforge.net/fb-contrib/?rev=430&view=rev Log Message: ----------- based on set not get Modified Paths: -------------- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/NonRecycleableTaglibs.java Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/NonRecycleableTaglibs.java =================================================================== --- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/NonRecycleableTaglibs.java 2006-04-09 20:52:22 UTC (rev 429) +++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/NonRecycleableTaglibs.java 2006-04-09 21:02:41 UTC (rev 430) @@ -8,6 +8,7 @@ import org.apache.bcel.classfile.Code; import org.apache.bcel.classfile.JavaClass; import org.apache.bcel.classfile.Method; +import org.apache.bcel.generic.Type; import edu.umd.cs.findbugs.BugReporter; import edu.umd.cs.findbugs.BytecodeScanningDetector; @@ -26,10 +27,25 @@ tagClasses.add("javax.servlet.jsp.tagext.TagSupport"); tagClasses.add("javax.servlet.jsp.tagext.BodyTagSupport"); } + + private static final Set<String> validAttrTypes = new HashSet<String>(); + static { + validAttrTypes.add("B"); + validAttrTypes.add("C"); + validAttrTypes.add("D"); + validAttrTypes.add("F"); + validAttrTypes.add("I"); + validAttrTypes.add("J"); + validAttrTypes.add("S"); + validAttrTypes.add("Z"); + validAttrTypes.add("Ljava/lang/String;"); + validAttrTypes.add("Ljava/util/Date;"); + } + private BugReporter bugReporter; private Map<String, String> attributes; private boolean isAttribute; - private boolean sawPut; + private boolean sawSet; /** * constructs a NRTL detector given the reporter to report bugs on. @@ -90,16 +106,18 @@ Method[] methods = cls.getMethods(); for (Method m : methods) { String name = m.getName(); - if (name.startsWith("get") && m.isPublic() && !m.isStatic()) { + if (name.startsWith("set") && m.isPublic() && !m.isStatic()) { String sig = m.getSignature(); - if (sig.startsWith("()")) { - String retSig = sig.substring(sig.indexOf(")")+1); - if ((retSig.charAt(0) != 'L') && ("Ljava/lang/String;".equals(retSig))) { + Type ret = Type.getReturnType(sig); + Type[] args = Type.getArgumentTypes(sig); + if (ret.equals(Type.VOID) && (args.length == 1)) { + String parmSig = args[0].getSignature(); + if (validAttrTypes.contains(parmSig)) { Code code = m.getCode(); - if ((code != null) && code.getCode().length > MAX_ATTRIBUTE_CODE_LENGTH) { - attributes.put(name.substring("get".length()), retSig); + if ((code != null) && code.getCode().length < MAX_ATTRIBUTE_CODE_LENGTH) { + attributes.put(name.substring("set".length()), parmSig); isAttribute = true; - sawPut = false; + sawSet = false; super.visitMethod(m); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |