Skip to content

Releases: google/error-prone

Error Prone 2.6.0

01 Apr 19:35
Compare
Choose a tag to compare

Checkers Added:

Issues Closed:

  • RFE: configurable DoNotCall/RestrictedApi/JdkObsolete/DefaultCharset/JavaTimeDefaultTimeZone check (#1211)
  • Add SystemOut checker (#1534)
  • WellKnownMutability: add java.awt.Color (#1682)
  • IdentityHashMapUsage warnings differ from its documentation (#2095)
  • UnusedMethod no longer works (#2215)
  • Document naming convention for UnusedMethod (#2223)

Error Prone 2.5.1

15 Jan 04:32
Compare
Choose a tag to compare

Changes

NoSuchMethodError: 'com.sun.tools.javac.util.List com.sun.tools.javac.code.Symbol$TypeSymbol.getEnclosedElements

  • Fixed NoSuchMethodError crash in HidingField (#2092)
  • Fixed NoSuchElementException crash in RestrictedApiChecker (#2099)
  • False positive in DifferentNameButSame (#2094)
  • False positive in UnnecessaryOptionalGet (#2101)
  • False positive in UnnecessaryMethodReference (#2102)
  • Fixed a regression in JDK 16-EA support (#2105)

Error Prone 2.5.0

Error Prone 2.4.0

Error Prone 2.3.4

02 Dec 23:15
Compare
Choose a tag to compare

Error Prone 2.3.3

20 Mar 18:31
Compare
Choose a tag to compare

New checks:

  • AssignmentToMock: Fields annotated with @mock should not be manually assigned to.
  • AutoValueImmutableFields: AutoValue recommends using immutable collections
  • CompareToZero: The result of #compareTo or #compare should only be compared to 0. It is an implementation detail whether a given type returns strictly the values {-1, 0, +1} or others.
  • DeduplicateConstants: This expression was previously declared as a constant; consider replacing this occurrence.
  • DiscardedPostfixExpression: The result of this unary operation on a lambda parameter is discarded
  • DuplicateMapKeys: Map#ofEntries will throw an IllegalArgumentException if there are any duplicate keys
  • EscapedEntity: HTML entities in @code/@literal tags will appear literally in the rendered javadoc.
  • InheritDoc: Invalid use of @inheritdoc.
  • InterfaceWithOnlyStatics: This interface only contains static fields and methods; consider making it a final class instead to prevent subclassing.
  • InvalidBlockTag: This tag is invalid.
  • InvalidInlineTag: This tag is invalid.
  • MissingSummary: A summary line is required on public/protected Javadocs.
  • MixedDescriptors: The field number passed into #getFieldByNumber belongs to a different proto to the Descriptor.
  • MixedMutabilityReturnType: This method returns both mutable and immutable collections or maps from different paths. This may be confusing for users of the method.
  • MockitoInternalUsage: org.mockito.internal.* is a private API and should not be used by clients
  • OptionalMapToOptional: Mapping to another Optional will yield a nested Optional. Did you mean flatMap?
  • OutlineNone: Setting CSS outline style to none or 0 (while not otherwise providing visual focus indicators) is inaccessible for users navigating a web page without a mouse.
  • PreconditionsCheckNotNullRepeated: Including the first argument of checkNotNull in the failure message is not useful, as it will always be null.
  • RedundantOverride: This override is redundant, and can be removed.
  • RefersToDaggerCodegen: Don't refer to Dagger's internal or generated code
  • RxReturnValueIgnored: Returned Rx objects must be checked. Ignoring a returned Rx value means it is never scheduled for execution
  • TreeToString: Tree#toString shouldn't be used for Trees deriving from the code being compiled, as it discards whitespace and comments.
  • TypeEquals: com.sun.tools.javac.code.Type doesn't override Object.equals and instances are not interned by javac, so testing types for equality should be done with Types#isSameType instead
  • UnescapedEntity: Javadoc is interpreted as HTML, so HTML entities such as &, <, > must be escaped.
  • UnusedMethod: Unused.
  • UnusedNestedClass: This nested class is unused, and can be removed.
  • UnusedVariable: Unused.

New date and time related checks:

  • JavaDurationGetSecondsGetNano: duration.getNano() only accesses the underlying nanosecond adjustment from the whole second.
  • JavaDurationWithNanos: Use of java.time.Duration.withNanos(int) is not allowed.
  • JavaDurationWithSeconds: Use of java.time.Duration.withSeconds(long) is not allowed.
  • JavaInstantGetSecondsGetNano: instant.getNano() only accesses the underlying nanosecond adjustment from the whole second.
  • JavaTimeDefaultTimeZone: java.time APIs that silently use the default system time-zone are not allowed.
  • JodaDurationConstructor: Use of new Duration(long) is not allowed. Please use Duration.millis(long) instead.
  • JodaDurationWithMillis: Use of duration.withMillis(long) is not allowed. Please use Duration.millis(long) instead.
  • JodaInstantWithMillis: Use of instant.withMillis(long) is not allowed. Please use new Instant(long) instead.
  • JodaNewPeriod: This may have surprising semantics, e.g. new Period(LocalDate.parse("1970-01-01"), LocalDate.parse("1970-02-02")).getDays() == 1, not 32.
  • JodaPlusMinusLong: Use of JodaTime's type.plus(long) or type.minus(long) is not allowed (where = {Duration,Instant,DateTime,DateMidnight}). Please use type.plus(Duration.millis(long)) or type.minus(Duration.millis(long)) instead.
  • JodaTimeConverterManager: Joda-Time's ConverterManager makes the semantics of DateTime/Instant/etc construction subject to global static state. If you need to define your own converters, use a helper.
  • JodaToSelf: Use of Joda-Time's DateTime.toDateTime(), Duration.toDuration(), Instant.toInstant(), Interval.toInterval(), and Period.toPeriod() are not allowed.
  • JodaWithDurationAddedLong: Use of JodaTime's type.withDurationAdded(long, int) (where = {Duration,Instant,DateTime}). Please use type.withDurationAdded(Duration.millis(long), int) instead.
  • TemporalAccessorGetChronoField: TemporalAccessor.get() only works for certain values of ChronoField.
  • TimeUnitConversionChecker: This TimeUnit conversion looks buggy: converting from a smaller unit to a larger unit (and passing a constant), converting to/from the same TimeUnit, or converting TimeUnits where the result is statically known to be 0 or 1 are all buggy patterns.
  • DurationFrom: Duration.from(Duration) returns itself; from(Period) throws a runtime exception.
  • DurationGetTemporalUnit: Duration.get() only works with SECONDS or NANOS.
  • DurationToLongTimeUnit: Unit mismatch when decomposing a Duration or Instant to call a <long, TimeUnit> API
  • InvalidZoneId: Invalid zone identifier. ZoneId.of(String) will throw exception at runtime.
  • PeriodFrom: Period.from(Period) returns itself; from(Duration) throws a runtime exception.
  • PeriodGetTemporalUnit: Period.get() only works with YEARS, MONTHS, or DAYS.
  • PeriodTimeMath: When adding or subtracting from a Period, Duration is incompatible.
  • ProtoDurationGetSecondsGetNano: getNanos() only accesses the underlying nanosecond-adjustment of the duration.
  • ProtoTimestampGetSecondsGetNano: getNanos() only accesses the underlying nanosecond-adjustment of the instant.
  • ProtoTruthMixedDescriptors: The arguments passed to ignoringFields are inconsistent with the proto which is the subject of the assertion.
  • TimeUnitMismatch: An value that appears to be represented in one unit is used where another appears to be required (e.g., seconds where nanos are needed)

API changes:

  • @BugPattern.category is no longer supported; prefer @BugPattern.tags as a means to apply general tags to checks.

Other changes:

  • Suppress checks thoroughly when -XepDisableWarningsInGeneratedCode is passed.
  • Make UnusedVariable match unused assignments too.
  • Handle static methods in InfiniteRecursion
  • Add common java.time types to ReturnValueIgnored.
  • ModifiedButNotUsed: match orphaned chains of proto/collection builders
  • Improve NarrowingCompoundAssignment's fixes for ternary
  • Allow suppressing AutoValueImmutableFields at the field level rather than just for the entire class...
Read more

Error Prone 2.3.2

11 Oct 18:58
Compare
Choose a tag to compare

Highlights:

  • Opt-in check AndroidJdkLibsChecker enforces which JDK libraries can be used in Android applications, and, with the -XepOpt:Android:Java8Libs flag, can allow select Java 8 library support via https://developer.android.com/studio/write/java8-support. Look out for this in bazel.build after the next release.
  • Immutable{Annotation,Enum}Checker now requires the Error Prone @Immutable annotation, not the JSR-305 @Immutable annotation

New Checks:

Fixes Issues:

#1008, #1028, #1038, #1040, #1077, #1078, #1079, #1083, #1084, #1085, #1095, #1096, #1101, #1125, #1129, #1130, #35, #607, #783, #849, #926

Error Prone 2.3.1

20 Apr 22:36
Compare
Choose a tag to compare

New checks:

  • [AssertThrowsMultipleStatements] The lambda passed to assertThows should contain exactly one statement
  • [FieldCanBeFinal] This field is only assigned during initialization; consider making it final
  • [ObjectToString] Calling toString on Objects that don't override toString() doesn't provide useful information

Other changes:

  • Make ParcelableCreator check an ERROR
  • OrphanedFormatString detects string literals correctly passed to @FormatMethod methods

Fixes issues: #996, #999, #1001, #1004

Error Prone 2.3.0

19 Apr 00:16
Compare
Choose a tag to compare

New checks:

  • [ParcelableCreator]: Detects classes which implement Parcelable but don't have CREATOR
  • [InconsistentCapitalization] It is confusing to have a field and a parameter under the same scope that differ only in capitalization
  • [TruthIncompatibleType] Argument is not compatible with the subject's type
  • [ByteBufferBackingArray] ByteBuffer.array() shouldn't be called unless ByteBuffer.arrayOffset() is used or if the ByteBuffer was initialized using ByteBuffer.wrap() or ByteBuffer.allocate()
  • [OrphanedFormatString] String literal contains format specifiers, but is not passed to a format method
  • [ScopeOnModule] Scopes on modules have no function and will soon be an error
  • [CatchAndPrintStackTrace] Logging or rethrowing exceptions should usually be preferred to catching and calling printStackTrace
  • [VarTypeName] var should not be used as a type name

Other changes:

  • Remove MoreAsserts from TryFailThrowable
  • Add java.util.Arrays to ReturnValueIgnored check
  • Improve BugCheckerRefactoringTestHelper usability
  • Extend SizeGreaterThanOrEqualsZero check to check proto repeated fields
  • Disallow method references to @DonotCall methods
  • Disallow Error Prone BugPattern names that includes spaces.
  • Add an optional suffix comment to SuggestedFixes.addSuppressWarnings
  • Allow @CompatibleWith to be used on varargs parameters.
  • Make StreamResourceLeak a warning
  • Recognize null test methods in java.util.Objects in nullness analysis
  • Detect more cases of nested and ignored futures.
  • Make the failure message in DiagnosticTestHelper easier to read.
  • Enable QualifierOrScopeOnInjectMethod as a WARNING
  • Consolidate NamedParameters and ParameterName

Fixes issues: #789, #893, #897, #899, #899, #904, #914, #921, #931, #942, #945, #954, #993

Error Prone 2.2.0

08 Jan 23:44
Compare
Choose a tag to compare

New errors:

  • [ComparableType] A new check for detecting incompatibility of types between the type of a class implementing Comparable<T> and T.
  • [ConditionalExpressionNumericPromotion] A conditional expression with numeric second and third operands of differing types may give surprising results.

New warnings:

New optional checks:

  • [StringSplit] detects String.split(String), which has surprising behaviour.
  • [StringSplitter] refactors uses of String.split to Splitter.
  • [TypeParameterNaming] enforces that type parameters are named according to the google style guide.
  • [RandomCast] casting a random number in the range [0.0, 1.0) to an integer or long always results in 0.

Changes to existing checks

  • ArrayEquals now detects misuse of android.support.v4.util.ObjectsCompat#equals.
  • EqualsIncompatibleType now detects misuse of android.support.v4.util.ObjectsCompat#equals.
  • SizeGreaterThanOrEqualsZero now detects misuse of common Android-specific collections.
  • FilesLinesLeak was renamed to StreamResourceLeak, and now checks other methods in Files.
  • FunctionalInterfaceClash is no longer enabled by default.
  • JUnit4{SetUp,TearDown}NotRun will find methods that look like setup or teardown methods, but have a @Before or @After annotation that are not org.junit.Before or org.junit.After.
  • SimpleDateFormatConstant now handles all DateFormats, and is renamed to DateFormatConstant
  • Disable RestrictToEnforcer by default (fixes #812).
  • EqualsIncompatibleType/PredicateIncompatibleType/CollectionIncompatible now explore type parameters to ensure their compatibility: Foo<A> is incompatible with Foo<B> if A and B are incompatible with each-other.

Other changes

  • Update to javac 9+181-r4173-1 (fixes #781 and #784).
  • Remove BugPattern.suppressibility and BugPattern.customSuppressionAnnotations: suppressionAnnotations should be used instead.