changes.html
来自「JSP页面代码排错」· HTML 代码 · 共 1,335 行 · 第 1/5 页
HTML
1,335 行
this will result in a NullPointerException. </ul> <li>Changes to Existing Reports</li> <ul> <li>RV_DONT_JUST_NULL_CHECK_READLINE: CORRECTNESS -> STYLE</li> <li>DMI_INVOKING_TOSTRING_ON_ARRAY: Long description mentions array name whenever possible</li> </ul> <li>Fixes:</li> <ul> <li>Updated manual to mention that Java 1.5 is now a requirement for running FindBugs <li>Applied patch 1840206 fixing issue "Ant task does not work when presetdef is used" - thanks to phejl <li>Applied patch 1778690 fixing issue "Ant task: tolerate but complain about invalid auxClasspath" - thanks to David Schmidt <li>Applied patch 1852125 adding a Chinese-language GUI bundle props file - thanks to fifi <li>Applied patch 1845903 adding ability to load XML results with the Eclipse plugin - thanks to Alex Mont <li>Fixed issue 1844671 - "FP for "reversed" null check in catch for stream close" <li>Fixed issue 1836050 - "-onlyAnalyze broken" <li>Fixed issue 1853011 - "Typo: Field names should start with aN lower case letter" <li>Fixed issue 1844181 - "JNLP file does not contain all necessary JARs" <li>Fixed issue 1840245 - "xxxException class does not derive from Exception" <li>Fixed issue 1840277 - "[M D EC] Typo in bug documentation" <li>Fixed issue 1782447 - "OutOfMemoryError if i activate Findbugs on my project" <li>Fixed issue 1830576 - "[regression] keySet/entrySet false positive" </ul> <li>Other:</li> <ul> <li>New bug code: "IO" (for IO_APPENDING_TO_OBJECT_OUTPUT_STREAM)</li> <li>Added "-onlyMostRecent" option for computeBugHistory script/ant task <li>More explicit language in RV_RETURN_VALUE_IGNORED_BAD_PRACTICE messages <li>Modified ResourceValueAnalysis to correctly identify null == X or null != X as a null check (for issue 1844671) <li>Modified DMI_HARDCODED_ABSOLUTE_FILENAME logic in DumbMethodInvocations to ignore files from /etc or /dev and increase priority of files from /home <li>Better bug details for infinite loop warnings <li>Modified unread-fields detector to reduce false positives from reflective fields <li>build.xml "classes" target now builds all sources in one step </ul> </ul> <p> Changes since version 1.2.1</p> <ul> <li>New Detectors and Reports</li> <ul> <li>SynchronizationOnSharedBuiltinConstant</li> <ul> <li>DL_SYNCHRONIZATION_ON_SHARED_CONSTANT: The code synchronizes on a shared primitive constant, such as an interned String. Such constants are interned and shared across all other classes loaded by the JVM. Thus, this could be locking on something that other code might also be locking. This could result in very strange and hard to diagnose blocking and deadlock behavior. See <a href="http://www.javalobby.org/java/forums/t96352.html">http://www.javalobby.org/java/forums/t96352.html</a> and <a href="http://jira.codehaus.org/browse/JETTY-352">http://jira.codehaus.org/browse/JETTY-352</a>. </ul> <li>OverridingEqualsNotSymmetrical</li> <ul> <li>EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC: Looks for equals methods that override equals methods in a superclass where the equivalence relationship might not be symmetrical. </ul> <li>CheckTypeQualifiers</li> <ul> <li>TQ_ALWAYS_VALUE_USED_WHERE_NEVER_REQUIRED: A value specified as carrying a type qualifier annotation is consumed in a location or locations requiring that the value not carry that annotation. More precisely, a value annotated with a type qualifier specifying when=ALWAYS is guaranteed to reach a use or uses where the same type qualifier specifies when=NEVER. </li> <li>TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED: A value specified as not carrying a type qualifier annotation is guaranteed to be consumed in a location or locations requiring that the value does carry that annotation. More precisely, a value annotated with a type qualifier specifying when=NEVER is guaranteed to reach a use or uses where the same type qualifier specifies when=ALWAYS. </li> <li>TQ_MAYBE_SOURCE_VALUE_REACHES_ALWAYS_SINK: A value that might not carry a type qualifier annotation reaches a use which requires that annotation. </li> <li>TQ_MAYBE_SOURCE_VALUE_REACHES_NEVER_SINK: A value which might carry a type qualifier annotation reaches a use which forbids values carrying that annotation. </li> </ul> </ul> <li>New Reports (existing detectors)</li> <ul> <li>FindHEmismatch</li> <ul> <li>EQ_DOESNT_OVERRIDE_EQUALS: This class extends a class that defines an equals method and adds fields, but doesn't define an equals method itself. Thus, equality on instances of this class will ignore the identity of the subclass and the added fields. Be sure this is what is intended, and that you don't need to override the equals method. Even if you don't need to override the equals method, consider overriding it anyway to document the fact that the equals method for the subclass just return the result of invoking super.equals(o). </li> </ul> <li>Naming <ul> <li>NM_WRONG_PACKAGE, NM_WRONG_PACKAGE_INTENTIONAL: The method in the subclass doesn't override a similar method in a superclass because the type of a parameter doesn't exactly match the type of the corresponding parameter in the superclass. </li> <li>NM_SAME_SIMPLE_NAME_AS_SUPERCLASS: This class has a simple name that is identical to that of its superclass, except that its superclass is in a different package (e.g., <code>alpha.Foo</code> extends <code>beta.Foo</code>). This can be exceptionally confusing, create lots of situations in which you have to look at import statements to resolve references and creates many opportunities to accidently define methods that do not override methods in their superclasses. </li> <li>NM_SAME_SIMPLE_NAME_AS_INTERFACE: This class/interface has a simple name that is identical to that of an implemented/extended interface, except that the interface is in a different package (e.g., <code>alpha.Foo</code> extends <code>beta.Foo</code>). This can be exceptionally confusing, create lots of situations in which you have to look at import statements to resolve references and creates many opportunities to accidently define methods that do not override methods in their superclasses. </li> </ul> <li>FindRefComparison</li> <ul> <li>EC_UNRELATED_TYPES_USING_POINTER_EQUALITY: This method uses using pointer equality to compare two references that seem to be of different types. The result of this comparison will always be false at runtime. </li> </ul> <li>IncompatMask</li> <ul> <li>BIT_SIGNED_CHECK, BIT_SIGNED_CHECK_HIGH_BIT: This method compares an expression such as <tt>((event.detail & SWT.SELECTED) > 0)</tt>. Using bit arithmetic and then comparing with the greater than operator can lead to unexpected results (of course depending on the value of SWT.SELECTED). If SWT.SELECTED is a negative number, this is a candidate for a bug. Even when SWT.SELECTED is not negative, it seems good practice to use '!= 0' instead of '> 0'. </li> </ul> <li>LazyInit</li> <ul> <li>LI_LAZY_INIT_UPDATE_STATIC: This method contains an unsynchronized lazy initialization of a static field. After the field is set, the object stored into that location is further accessed. The setting of the field is visible to other threads as soon as it is set. If the further accesses in the method that set the field serve to initialize the object, then you have a <em>very serious</em> multithreading bug, unless something else prevents any other thread from accessing the stored object until it is fully initialized. </li> </ul> <li>FindDeadLocalStores</li> <ul> <li>DLS_DEAD_STORE_OF_CLASS_LITERAL: This instruction assigns a class literal to a variable and then never uses it. <a href="//java.sun.com/j2se/1.5.0/compatibility.html#literal">The behavior of this differs in Java 1.4 and in Java 5.</a> In Java 1.4 and earlier, a reference to <code>Foo.class</code> would force the static initializer for <code>Foo</code> to be executed, if it has not been executed already. In Java 5 and later, it does not. See Sun's <a href="//java.sun.com/j2se/1.5.0/compatibility.html#literal">article on Java SE compatibility</a> for more details and examples, and suggestions on how to force class initialization in Java 5. </li> </ul> <li>MethodReturnCheck</li> <ul> <li>RV_RETURN_VALUE_IGNORED_BAD_PRACTICE: This method returns a value that is not checked. The return value should be checked since it can indication an unusual or unexpected function execution. For example, the <code>File.delete()</code> method returns false if the file could not be successfully deleted (rather than throwing an Exception). If you don't check the result, you won't notice if the method invocation signals unexpected behavior by returning an atypical return value. </li> <li>RV_EXCEPTION_NOT_THROWN: This code creates an exception (or error) object, but doesn't do anything with it. </li> </ul> </ul> <li>Changes to Existing Reports</li> <ul> <li>NS_NON_SHORT_CIRCUIT: BAD_PRACTICE -> STYLE</li> <li>NS_DANGEROUS_NON_SHORT_CIRCUIT: CORRECTNESS -> STYLE</li> <li>RC_REF_COMPARISON: CORRECTNESS -> BAD_PRACTICE</li> </ul> <li>GUI Changes</li> <ul> <li>Added importing and exporting of bug filters</li> <li>Better handling of failed analysis runs</li> <li>Added "-look" parameter for selecting look-and-feel</li> <li>Fixed incorrect package filtering</li> <li>Fixed issue where "synchronized" was not syntax-highlighted</li> </ul> <li>Ant-task Changes</li> <ul> <li>Refactored common ant-task code to AbstractFindBugsTask</li> <li>Added tasks for computeBugHistory, convertXmlToText, filterBugs, mineBugHistory, setBugDatabaseInfo</li> </ul> <li>Manual</li> <ul> <li>Updates to GUI section, including new screenshots</li> <li>Added description of rejarForAnalysis</li> <li>Revamp of data-mining section</li> </ul> <li>Other Major</li> <ul> <li>Internal restructuring for lower memory overhead</li> </ul> <li>Other Minor</li> <ul> <li>Fixed typo: was STCAL_STATIC_SIMPLE_DATA_FORMAT_INSTANCE now STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE</li> <li>-outputFile parameter became -output</li> <li>More sensitivity and specificity inLazyInit detector</li> <li>More sensitivity and specificity in Naming detector</li> <li>More sensitivity and specificity in UnreadFields detector</li> <li>More sensitivity in FindNullDeref detector</li> <li>More sensitivity in FindBadCast2 detector</li> <li>More specificity in FindReturnRef detector</li> <li>Many other tweaks and bug fixes</li> </ul> </ul> <p> Changes since version 1.2.0</p> <ul> <li>Bug fixes: <ul> <li><a href="http://fisheye2.cenqua.com/changelog/findbugs/?cs=8219">Fix</a> <a href="http://sourceforge.net/tracker/index.php?func=detail&aid=1726946&group_id=96405&atid=614693">bug</a> with detectors that were requested to be disabled but were enabled due to requirements of other detectors.</li> <li>Fix bugs in incremental analysis within Eclipse plugin</li> <li>Fix some analysis errors</li> <li>Fix some threading bugs in GUI2</li> <li>Report version as version when it was compiled, not when it was run</li> <li>Copy analysis time stamp when filtering or transforming analysis files.</li> </ul>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?