[Fb-contrib-commit] SF.net SVN: fb-contrib: [976] trunk/fb-contrib
Brought to you by:
dbrosius
From: <dbr...@us...> - 2007-11-23 03:50:45
|
Revision: 976 http://fb-contrib.svn.sourceforge.net/fb-contrib/?rev=976&view=rev Author: dbrosius Date: 2007-11-22 19:50:50 -0800 (Thu, 22 Nov 2007) Log Message: ----------- add checks for Boolean constant boxing Modified Paths: -------------- trunk/fb-contrib/etc/findbugs.xml trunk/fb-contrib/etc/messages.xml trunk/fb-contrib/samples/NAB_Sample.java trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/NeedlessAutoboxing.java Modified: trunk/fb-contrib/etc/findbugs.xml =================================================================== --- trunk/fb-contrib/etc/findbugs.xml 2007-11-23 00:52:32 UTC (rev 975) +++ trunk/fb-contrib/etc/findbugs.xml 2007-11-23 03:50:50 UTC (rev 976) @@ -115,7 +115,7 @@ <Detector class="com.mebigfatguy.fbcontrib.detect.NeedlessAutoboxing" speed="fast" - reports="NAB_NEEDLESS_AUTOBOXING_CTOR,NAB_NEEDLESS_BOXING_STRING_CTOR,NAB_NEEDLESS_AUTOBOXING_VALUEOF,NAB_NEEDLESS_BOXING_PARSE,NAB_NEEDLESS_BOXING_VALUEOF,NAB_NEEDLESS_BOX_TO_UNBOX,NAB_NEEDLESS_BOX_TO_CAST" /> + reports="NAB_NEEDLESS_AUTOBOXING_CTOR,NAB_NEEDLESS_BOXING_STRING_CTOR,NAB_NEEDLESS_AUTOBOXING_VALUEOF,NAB_NEEDLESS_BOXING_PARSE,NAB_NEEDLESS_BOXING_VALUEOF,NAB_NEEDLESS_BOX_TO_UNBOX,NAB_NEEDLESS_BOX_TO_CAST,NAB_NEEDLESS_BOOLEAN_CONSTANT_CONVERSION" /> <Detector class="com.mebigfatguy.fbcontrib.detect.UnnecessaryStoreBeforeReturn" speed="fast" @@ -335,6 +335,7 @@ <BugPattern abbrev="NAB" type="NAB_NEEDLESS_BOXING_VALUEOF" category="PERFORMANCE" /> <BugPattern abbrev="NAB" type="NAB_NEEDLESS_BOX_TO_UNBOX" category="PERFORMANCE" /> <BugPattern abbrev="NAB" type="NAB_NEEDLESS_BOX_TO_CAST" category="PERFORMANCE" /> + <BugPattern abbrev="NAB" type="NAB_NEEDLESS_BOOLEAN_CONSTANT_CONVERSION" category="PERFORMANCE" /> <BugPattern abbrev="USBR" type="USBR_UNNECESSARY_STORE_BEFORE_RETURN" category="STYLE" /> <BugPattern abbrev="COM" type="COM_COPIED_OVERRIDDEN_METHOD" category="STYLE" /> <BugPattern abbrev="ABC" type="ABC_ARRAY_BASED_COLLECTIONS" category="CORRECTNESS" /> Modified: trunk/fb-contrib/etc/messages.xml =================================================================== --- trunk/fb-contrib/etc/messages.xml 2007-11-23 00:52:32 UTC (rev 975) +++ trunk/fb-contrib/etc/messages.xml 2007-11-23 03:50:50 UTC (rev 976) @@ -1208,6 +1208,26 @@ ]]> </Details> </BugPattern> + + <BugPattern type="NAB_NEEDLESS_BOOLEAN_CONSTANT_CONVERSION"> + <ShortDescription>method needlessly boxes a boolean constant</ShortDescription> + <LongDescription>method {1} needlessly boxes a boolean constant</LongDescription> + <Details> + <![CDATA[ + <p>This method assigns a Boxed boolean constant to a primitive boolean variable, or assigns a primitive boolean + constant to a Boxed boolean variable. Use the correct constant for the variable desired. Use</p> + <pre> + boolean b = true; + boolean b = false; + + or + + Boolean b = Boolean.TRUE; + Boolean b = Boolean.FALSE; + </pre> + ]]> + </Details> + </BugPattern> <BugPattern type="USBR_UNNECESSARY_STORE_BEFORE_RETURN"> <ShortDescription>method stores return result in local before immediately returning it</ShortDescription> Modified: trunk/fb-contrib/samples/NAB_Sample.java =================================================================== --- trunk/fb-contrib/samples/NAB_Sample.java 2007-11-23 00:52:32 UTC (rev 975) +++ trunk/fb-contrib/samples/NAB_Sample.java 2007-11-23 03:50:50 UTC (rev 976) @@ -122,4 +122,12 @@ d = new Double(6.0).floatValue(); d = Double.valueOf(6.0).floatValue(); } + + public void testBooleanConsts() + { + boolean b = Boolean.FALSE; + b = Boolean.TRUE; + Boolean bb = false; + bb = true; + } } Modified: trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/NeedlessAutoboxing.java =================================================================== --- trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/NeedlessAutoboxing.java 2007-11-23 00:52:32 UTC (rev 975) +++ trunk/fb-contrib/src/com/mebigfatguy/fbcontrib/detect/NeedlessAutoboxing.java 2007-11-23 03:50:50 UTC (rev 976) @@ -40,6 +40,8 @@ private static final int SEEN_PARSE = 3; private static final int SEEN_CTOR = 4; private static final int SEEN_VALUEOFPRIMITIVE = 5; + private static final int SEEN_ICONST = 6; + private static final int SEEN_GETSTATIC = 7; private static final Map<String, String[]> boxClasses = new HashMap<String, String[]>(); static { @@ -125,6 +127,15 @@ state = SEEN_CTOR; } } + } else if ((seen == ICONST_0) || (seen == ICONST_1)) { + state = SEEN_ICONST; + } else if (seen == GETSTATIC) { + String clsName = getClassConstantOperand(); + String fldName = getNameConstantOperand(); + if ("java/lang/Boolean".equals(clsName)) { + if ("TRUE".equals(fldName) || "FALSE".equals(fldName)) + state = SEEN_GETSTATIC; + } } break; @@ -213,6 +224,34 @@ } state = SEEN_NOTHING; break; + + case SEEN_ICONST: + if (seen == INVOKESTATIC) { + if (("java/lang/Boolean".equals(getClassConstantOperand()) + && ("valueOf".equals(getNameConstantOperand()) + && ("(Z)Ljava/lang/Boolean;".equals(getSigConstantOperand()))))) { + bugReporter.reportBug(new BugInstance(this, "NAB_NEEDLESS_BOOLEAN_CONSTANT_CONVERSION", NORMAL_PRIORITY) + .addClass(this) + .addMethod(this) + .addSourceLine(this)); + } + } + state = SEEN_NOTHING; + break; + + case SEEN_GETSTATIC: + if (seen == INVOKEVIRTUAL) { + if (("java/lang/Boolean".equals(getClassConstantOperand()) + && ("booleanValue".equals(getNameConstantOperand()) + && ("()Z".equals(getSigConstantOperand()))))) { + bugReporter.reportBug(new BugInstance(this, "NAB_NEEDLESS_BOOLEAN_CONSTANT_CONVERSION", NORMAL_PRIORITY) + .addClass(this) + .addMethod(this) + .addSourceLine(this)); + } + } + state = SEEN_NOTHING; + break; } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |