From 0caeb90df921882572b8963d4851e36852358fa5 Mon Sep 17 00:00:00 2001 From: Fabrice Bellingard Date: Tue, 15 May 2012 15:43:03 +0200 Subject: [PATCH] SONAR-3074 Add new Findbugs 2.0 new rules --- .../findbugs/profile-sonar-way-findbugs.xml | 72 ++++++++ .../org/sonar/plugins/findbugs/rules.xml | 168 ++++++++++++++++++ .../SonarWayWithFindbugsProfileTest.java | 9 +- .../org/sonar/l10n/findbugs.properties | 24 +++ ...ON_SEQUENCE_ON_CONCURRENT_ABSTRACTION.html | 1 + .../BX_UNBOXING_IMMEDIATELY_REBOXED.html | 1 + .../CO_COMPARETO_RESULTS_MIN_VALUE.html | 5 + .../DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD.html | 4 + .../findbugs/DMI_ARGUMENTS_WRONG_ORDER.html | 3 + ...MI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE.html | 5 + .../l10n/findbugs/rules/findbugs/DMI_DOH.html | 1 + ...MI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS.html | 5 + .../rules/findbugs/DM_DEFAULT_ENCODING.html | 4 + .../findbugs/ICAST_INT_2_LONG_AS_INSTANT.html | 20 +++ .../INT_BAD_COMPARISON_WITH_INT_VALUE.html | 2 + ...JSR166_CALLING_WAIT_RATHER_THAN_AWAIT.html | 4 + ...P_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.html | 3 + ...UNSATISFIED_OBLIGATION_EXCEPTION_EDGE.html | 6 + ...DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS.html | 4 + ...K_COMPARETO_FOR_SPECIFIC_RETURN_VALUE.html | 4 + .../RV_NEGATING_RESULT_OF_COMPARETO.html | 4 + .../RV_RETURN_VALUE_IGNORED_INFERRED.html | 8 + ...OCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD.html | 9 + .../URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD.html | 2 + .../UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD.html | 2 + ...F_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.html | 2 + .../VA_FORMAT_STRING_USES_NEWLINE.html | 2 + .../rules/findbugs/VO_VOLATILE_INCREMENT.html | 2 + 28 files changed, 371 insertions(+), 5 deletions(-) create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/BX_UNBOXING_IMMEDIATELY_REBOXED.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/CO_COMPARETO_RESULTS_MIN_VALUE.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_ARGUMENTS_WRONG_ORDER.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_DOH.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DM_DEFAULT_ENCODING.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/ICAST_INT_2_LONG_AS_INSTANT.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/INT_BAD_COMPARISON_WITH_INT_VALUE.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_NEGATING_RESULT_OF_COMPARETO.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_RETURN_VALUE_IGNORED_INFERRED.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/VA_FORMAT_STRING_USES_NEWLINE.html create mode 100644 plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/VO_VOLATILE_INCREMENT.html diff --git a/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/profile-sonar-way-findbugs.xml b/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/profile-sonar-way-findbugs.xml index ffa99664c9d..1fc95f1a2ec 100644 --- a/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/profile-sonar-way-findbugs.xml +++ b/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/profile-sonar-way-findbugs.xml @@ -1126,4 +1126,76 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/rules.xml b/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/rules.xml index 4c2de7efcbd..44df2180ea9 100644 --- a/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/rules.xml +++ b/plugins/sonar-findbugs-plugin/src/main/resources/org/sonar/plugins/findbugs/rules.xml @@ -2751,4 +2751,172 @@ + + + MAJOR + + + + + + + MAJOR + + + + + + + MAJOR + + + + + + + MAJOR + + + + + + + MINOR + + + + + + + MAJOR + + + + + + + MAJOR + + + + + + + MAJOR + + + + + + + MAJOR + + + + + + + MAJOR + + + + + + + MAJOR + + + + + + + MAJOR + + + + + + + MAJOR + + + + + + + CRITICAL + + + + + + + MAJOR + + + + + + + MAJOR + + + + + + + MINOR + + + + + + + MINOR + + + + + + + MAJOR + + + + + + + INFO + + + + + + + INFO + + + + + + + MINOR + + + + + + + MAJOR + + + + + + + CRITICAL + + + + diff --git a/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/SonarWayWithFindbugsProfileTest.java b/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/SonarWayWithFindbugsProfileTest.java index cec6f6d13bd..0186ca90b37 100644 --- a/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/SonarWayWithFindbugsProfileTest.java +++ b/plugins/sonar-findbugs-plugin/src/test/java/org/sonar/plugins/findbugs/SonarWayWithFindbugsProfileTest.java @@ -19,14 +19,13 @@ */ package org.sonar.plugins.findbugs; -import static org.hamcrest.core.Is.is; -import static org.hamcrest.number.OrderingComparisons.greaterThan; -import static org.junit.Assert.assertThat; - import org.junit.Test; import org.sonar.api.profiles.RulesProfile; import org.sonar.api.utils.ValidationMessages; +import static org.hamcrest.core.Is.is; +import static org.junit.Assert.assertThat; + public class SonarWayWithFindbugsProfileTest { @Test @@ -35,7 +34,7 @@ public class SonarWayWithFindbugsProfileTest { SonarWayWithFindbugsProfile sonarWayWithFindbugs = new SonarWayWithFindbugsProfile(importer); ValidationMessages validation = ValidationMessages.create(); RulesProfile profile = sonarWayWithFindbugs.createProfile(validation); - assertThat(profile.getActiveRulesByRepository(FindbugsConstants.REPOSITORY_KEY).size(), greaterThan(300)); + assertThat(profile.getActiveRulesByRepository(FindbugsConstants.REPOSITORY_KEY).size(), is(399)); assertThat(validation.hasErrors(), is(false)); } } diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs.properties b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs.properties index fd373090b75..78db2934d2f 100644 --- a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs.properties +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs.properties @@ -382,3 +382,27 @@ rule.findbugs.DMI_BAD_MONTH.name=Correctness - Bad constant value for month rule.findbugs.MS_MUTABLE_ARRAY.name=Malicious code vulnerability - Field is a mutable array rule.findbugs.SE_INNER_CLASS.name=Bad practice - Serializable inner class rule.findbugs.OS_OPEN_STREAM_EXCEPTION_PATH.name=Bad practice - Method may fail to close stream on exception +rule.findbugs.AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION.name=Sequence of calls to concurrent abstraction may not be atomic +rule.findbugs.BX_UNBOXING_IMMEDIATELY_REBOXED.name=Boxed value is unboxed and then immediately reboxed +rule.findbugs.CO_COMPARETO_RESULTS_MIN_VALUE.name=compareTo()/compare() returns Integer.MIN_VALUE +rule.findbugs.DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD.name=Dead store to local variable that shadows field +rule.findbugs.DMI_ARGUMENTS_WRONG_ORDER.name=Reversed method arguments +rule.findbugs.DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE.name=BigDecimal constructed from double that isn't represented precisely +rule.findbugs.DMI_DOH.name=D'oh! A nonsensical method invocation +rule.findbugs.DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS.name=Adding elements of an entry set may fail due to reuse of Entry objects +rule.findbugs.DM_DEFAULT_ENCODING.name=Reliance on default encoding +rule.findbugs.ICAST_INT_2_LONG_AS_INSTANT.name=int value converted to long and used as absolute time +rule.findbugs.INT_BAD_COMPARISON_WITH_INT_VALUE.name=Bad comparison of int value with long constant +rule.findbugs.JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT.name=Using monitor style wait methods on util.concurrent abstraction +rule.findbugs.NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.name=Read of unwritten public or protected field +rule.findbugs.OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE.name=Method may fail to clean up stream or resource on checked exception +rule.findbugs.PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS.name=Don't reuse entry objects in iterators +rule.findbugs.RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE.name=Code checks for specific values returned by compareTo +rule.findbugs.RV_NEGATING_RESULT_OF_COMPARETO.name=Negating the result of compareTo()/compare() +rule.findbugs.RV_RETURN_VALUE_IGNORED_INFERRED.name=Method ignores return value, is this OK? +rule.findbugs.SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD.name=Self assignment of local rather than assignment to field +rule.findbugs.URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD.name=Unread public/protected field +rule.findbugs.UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD.name=Unused public or protected field +rule.findbugs.UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.name=Unwritten public or protected field +rule.findbugs.VA_FORMAT_STRING_USES_NEWLINE.name=Format string should use %n rather than \n +rule.findbugs.VO_VOLATILE_INCREMENT.name=An increment to a volatile field isn't atomic diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION.html new file mode 100644 index 00000000000..74cc5af6bdf --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION.html @@ -0,0 +1 @@ +

This code contains a sequence of calls to a concurrent abstraction (such as a concurrent hash map). These calls will not be executed atomically.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/BX_UNBOXING_IMMEDIATELY_REBOXED.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/BX_UNBOXING_IMMEDIATELY_REBOXED.html new file mode 100644 index 00000000000..89a888cafc9 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/BX_UNBOXING_IMMEDIATELY_REBOXED.html @@ -0,0 +1 @@ +

A boxed value is unboxed and then immediately reboxed.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/CO_COMPARETO_RESULTS_MIN_VALUE.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/CO_COMPARETO_RESULTS_MIN_VALUE.html new file mode 100644 index 00000000000..a36b96fa453 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/CO_COMPARETO_RESULTS_MIN_VALUE.html @@ -0,0 +1,5 @@ +

In some situation, this compareTo or compare method returns the constant Integer.MIN_VALUE, +which is an exceptionally bad practice. The only thing that matters about the return value of +compareTo is the sign of the result. But people will sometimes negate the return value of compareTo, +expecting that this will negate the sign of the result. And it will, except in the case where +the value returned is Integer.MIN_VALUE. So just return -1 rather than Integer.MIN_VALUE.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD.html new file mode 100644 index 00000000000..f1f27912d24 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD.html @@ -0,0 +1,4 @@ +

This instruction assigns a value to a local variable, but the value is not read or used in +any subsequent instruction. Often, this indicates an error, because the value computed is never +used. There is a field with the same name as the local variable. Did you mean to assign to that +variable instead?

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_ARGUMENTS_WRONG_ORDER.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_ARGUMENTS_WRONG_ORDER.html new file mode 100644 index 00000000000..ccad0255b64 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_ARGUMENTS_WRONG_ORDER.html @@ -0,0 +1,3 @@ +

The arguments to this method call seem to be in the wrong order. For example, a call +Preconditions.checkNotNull("message", message) has reserved arguments: the value +to be checked is the first argument.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE.html new file mode 100644 index 00000000000..2d8b67b28fd --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE.html @@ -0,0 +1,5 @@ +

This code creates a BigDecimal from a double value that doesn't translate well to a decimal number. For example, +one might assume that writing new BigDecimal(0.1) in Java creates a BigDecimal which is exactly equal to 0.1 +(an unscaled value of 1, with a scale of 1), but it is actually equal to 0.1000000000000000055511151231257827021181583404541015625. +You probably want to use the BigDecimal.valueOf(double d) method, which uses the String representation of the double to +create the BigDecimal (e.g., BigDecimal.valueOf(0.1) gives 0.1).

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_DOH.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_DOH.html new file mode 100644 index 00000000000..a71cb32d7ee --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_DOH.html @@ -0,0 +1 @@ +

This partical method invocation doesn't make sense, for reasons that should be apparent from inspection.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS.html new file mode 100644 index 00000000000..cc4e393d925 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS.html @@ -0,0 +1,5 @@ +

The entrySet() method is allowed to return a view of the underlying Map in which a single Entry + object is reused and returned during the iteration. As of Java 1.6, both IdentityHashMap and EnumMap + did so. When iterating through such a Map, the Entry value is only valid until you advance to the + next iteration. If, for example, you try to pass such an entrySet to an addAll method, things will + go badly wrong.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DM_DEFAULT_ENCODING.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DM_DEFAULT_ENCODING.html new file mode 100644 index 00000000000..2f5fa97d507 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/DM_DEFAULT_ENCODING.html @@ -0,0 +1,4 @@ +

Found a call to a method which will perform a byte to String (or String to byte) conversion, +and will assume that the default platform encoding is suitable. This will cause the application +behaviour to vary between platforms. Use an alternative API and specify a charset name or +Charset object explicitly.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/ICAST_INT_2_LONG_AS_INSTANT.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/ICAST_INT_2_LONG_AS_INSTANT.html new file mode 100644 index 00000000000..f525431f0ab --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/ICAST_INT_2_LONG_AS_INSTANT.html @@ -0,0 +1,20 @@ +

This code converts a 32-bit int value to a 64-bit long value, and then passes that value for a +method parameter that requires an absolute time value. An absolute time value is the number of +milliseconds since the standard base time known as "the epoch", namely January 1, 1970, 00:00:00 GMT. +For example, the following method, intended to convert seconds since the epoc into a Date, is badly broken: +

+Date getDate(int seconds) { return new Date(seconds * 1000); }
+
+

+

The multiplication is done using 32-bit arithmetic, and then converted to a 64-bit value. When a 32-bit +value is converted to 64-bits and used to express an absolute time value, only dates in December 1969 and +January 1970 can be represented.

+

Correct implementations for the above method are: +

+// Fails for dates after 2037
+Date getDate(int seconds) { return new Date(seconds * 1000L); }
+
+// better, works for all dates
+Date getDate(long seconds) { return new Date(seconds * 1000); }
+
+

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/INT_BAD_COMPARISON_WITH_INT_VALUE.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/INT_BAD_COMPARISON_WITH_INT_VALUE.html new file mode 100644 index 00000000000..fc96ac19118 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/INT_BAD_COMPARISON_WITH_INT_VALUE.html @@ -0,0 +1,2 @@ +

This code compares an int value with a long constant that is outside the range of values that can + be represented as an int value. This comparison is vacuous and possibily to be incorrect.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT.html new file mode 100644 index 00000000000..f4e02a85d54 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/JML_JSR166_CALLING_WAIT_RATHER_THAN_AWAIT.html @@ -0,0 +1,4 @@ +

This method calls wait(), notify() or notifyAll() on an object that also +provides an await(), signal(), signalAll() method (such as util.concurrent +Condition objects). This probably isn't what you want, and even if you do want it, you should consider changing your +design, as other developers will find it exceptionally confusing.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.html new file mode 100644 index 00000000000..01f258746be --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.html @@ -0,0 +1,3 @@ +

The program is dereferencing a public or protected field that does not seem to ever have a non-null + value written to it. Unless the field is initialized via some mechanism not seen by the analysis, + dereferencing this value will generate a null pointer exception.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE.html new file mode 100644 index 00000000000..2b410336e5d --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE.html @@ -0,0 +1,6 @@ +

This method may fail to clean up (close, dispose of) a stream, database object, or other resource requiring an +explicit cleanup operation.
In general, if a method opens a stream or other resource, the method should use a try/finally block to ensure +that the stream or resource is cleaned up before the method returns.

+

This bug pattern is essentially the same as the OS_OPEN_STREAM and ODR_OPEN_DATABASE_RESOURCE bug patterns, but is based on a different +(and hopefully better) static analysis technique. See Weimer and Necula, Finding and Preventing Run-Time Error Handling Mistakes, for a +description of the analysis technique. .

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS.html new file mode 100644 index 00000000000..353b2d70334 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/PZ_DONT_REUSE_ENTRY_OBJECTS_IN_ITERATORS.html @@ -0,0 +1,4 @@ +

The entrySet() method is allowed to return a view of the underlying Map in which an Iterator +and Map.Entry. This clever idea was used in several Map implementations, but introduces the possibility of + nasty coding mistakes. If a map m returns such an iterator for an entrySet, then c.addAll(m.entrySet()) will + go badly wrong. All of the Map implementations in OpenJDK 1.7 have been rewritten to avoid this, you should to.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE.html new file mode 100644 index 00000000000..9b24fc51025 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE.html @@ -0,0 +1,4 @@ +

This code invoked a compareTo or compare method, and checks to see if the return value is a specific +value, such as 1 or -1. When invoking these methods, you should only check the sign of the result, not +for any specific non-zero value. While many or most compareTo and compare methods only return -1, 0 or 1, +some of them will return other values.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_NEGATING_RESULT_OF_COMPARETO.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_NEGATING_RESULT_OF_COMPARETO.html new file mode 100644 index 00000000000..96e92b5e4e6 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_NEGATING_RESULT_OF_COMPARETO.html @@ -0,0 +1,4 @@ +

This code negatives the return value of a compareTo or compare method. This is a questionable or bad +programming practice, since if the return value is Integer.MIN_VALUE, negating the return value won't +negate the sign of the result. You can achieve the same intended result by reversing the order of the +operands rather than by negating the results.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_RETURN_VALUE_IGNORED_INFERRED.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_RETURN_VALUE_IGNORED_INFERRED.html new file mode 100644 index 00000000000..c50a2185d2f --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/RV_RETURN_VALUE_IGNORED_INFERRED.html @@ -0,0 +1,8 @@ +

This code calls a method and ignores the return value. The return value is the same type as the type the +method is invoked on, and from our analysis it looks like the return value might be important (e.g., like +ignoring the return value of String.toLowerCase()). +

+

We are guessing that ignoring the return value might be a bad idea just from a simple analysis of the +body of the method. You can use a @CheckReturnValue annotation to instruct FindBugs as to whether +ignoring the return value of this method is important or acceptable.

+

Please investigate this closely to decide whether it is OK to ignore the return value.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD.html new file mode 100644 index 00000000000..0b150015a7a --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD.html @@ -0,0 +1,9 @@ +

This method contains a self assignment of a local variable, and there is a field with an identical name. +Assignment appears to have been ; e.g. +

+  int foo;
+  public void setFoo(int foo) {
+    foo = foo;
+  }
+
+The assignment is useless. Did you mean to assign to the field instead?

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD.html new file mode 100644 index 00000000000..9626b396733 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD.html @@ -0,0 +1,2 @@ +

This field is never read. The field is public or protected, so perhaps it is intended to be +used with classes not seen as part of the analysis. If not, consider removing it from the class.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD.html new file mode 100644 index 00000000000..5132a784703 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD.html @@ -0,0 +1,2 @@ +

This field is never used. The field is public or protected, so perhaps it is intended to be used +with classes not seen as part of the analysis. If not, consider removing it from the class.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.html new file mode 100644 index 00000000000..287196216ba --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD.html @@ -0,0 +1,2 @@ +

No writes were seen to this public/protected field. All reads of it will return the default value. +Check for errors (should it have been initialized?), or remove it if it is useless.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/VA_FORMAT_STRING_USES_NEWLINE.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/VA_FORMAT_STRING_USES_NEWLINE.html new file mode 100644 index 00000000000..eba4c7386a5 --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/VA_FORMAT_STRING_USES_NEWLINE.html @@ -0,0 +1,2 @@ +

This format string include a newline character (\n). In format strings, it is generally preferable +better to use %n, which will produce the platform-specific line separator.

\ No newline at end of file diff --git a/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/VO_VOLATILE_INCREMENT.html b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/VO_VOLATILE_INCREMENT.html new file mode 100644 index 00000000000..ebf2745165b --- /dev/null +++ b/plugins/sonar-l10n-en-plugin/src/main/resources/org/sonar/l10n/findbugs/rules/findbugs/VO_VOLATILE_INCREMENT.html @@ -0,0 +1,2 @@ +

This code increments a volatile field. Increments of volatile fields aren't atomic. If more +than one thread is incrementing the field at the same time, increments could be lost.

\ No newline at end of file -- 2.39.5