Repository navigation
New checks:
HashCodeInObjectsHash: Detect redundanthashCode()orObjects.hash()calls insideObjects.hash(...), and simplify single-argumentObjects.hash(x)calls toObjects.hashCode(x).LoopToTestParameter: Suggest migrating loops in unit tests toTestParameterInjector.MissingJavadoc: Flag public types that are missing Javadoc comments (disabled by default).PreferCharsetOverload: Prefer calling method and constructor overloads that accept aCharsetover those that accept aStringencoding name.PreferPreconditions: Suggest using Guava'sPreconditionsinstead of explicitif-throwstatements for parameter validation (disabled by default).RequireNonNullRefactoring: Refactor explicitif (x == null) { throw new NullPointerException(...); }checks toObjects.requireNonNull(disabled by default).SimplifyTestParameter: Remove redundant explicit value lists on@TestParameterannotations forbooleanandEnumtypes when all values are specified (disabled by default).TraditionalJavadocToMarkdown: Convert traditional/** ... */Javadoc comments into///Markdown Javadoc comments (disabled by default).ValueClassIdentity: Flag reliance on identity semantics (such as synchronization,WeakReference,IdentityHashMap, orSystem.identityHashCode) of value-based classes (disabled by default).
Other changes:
CompareToZero: Upgraded from warning to error, and expanded to flag non-relational operations, unary negation, andswitchstatements/expressions oncompareToandcompareresults withoutInteger.signum.IfChainToSwitch: Enabled by default as a warning.UndefinedEquals: MergedArrayAsKeyOfSetOrMapandCollectionUndefinedEqualityintoUndefinedEquals(retaining their names asaltNames), and generalized detection of types without well-definedequalsorhashCodeacross direct equality, collection containment, and hash-based containers.EqualsIncompatibleType/TruthIncompatibleType: Flag equality comparisons between distinctrecordtypes (#6107).ReferenceEquality: Allow==comparisons onprivateclasses whose type hierarchy does not overrideObject.equals(#5865),private static finalsentinel fields,Thread(#5900), andcom.sun.source.tree.Tree.PatternMatchingInstanceof: Supportwhileandforloops, parenthesized expressions (#5843), and replacing additional redundant casts when theinstanceofalready introduces a pattern variable.DistinctVarargsChecker: Expanded to checkObjects.hash,CompletableFuture.allOf/anyOf,EnumSet.of,Sets.union/intersection/difference,Stream.concat,Math.min/max, and additional JDK, Guava, Protobuf, Truth, and Mockito methods.MustBeClosedChecker: Requirejava.lang.foreign.Arena.ofConfinedandArena.ofSharedto be closed.ImpossibleNullComparison: Flag null checks on the return value ofClass.forName.RestrictedApi/RestrictedInheritance: Added anallowedPathsattribute to allow calls or inheritance from matching file paths without a regular expression.InlineMeInliner: Support substituting type arguments at call sites when inlining generic@InlineMemethods.WellKnownKeep: Recognize Apache BeamDoFnannotations and retain open-source library annotations (Gson,Mockito,Guice,Objectify,TestParameterInjector,AutoFactory).- Per-check timing collection is now disabled by default, reducing Error Prone compile-time overhead by ~3–5%; pass
-XepPrintTimingsto print a timing report after compilation or-XepRecordTimingsto record timings programmatically (#6079). CompilationTestHelpernow reports all lines with mismatched diagnostic expectations in a single test run rather than failing on the first mismatch (#6116).- Replaced the RE2/J dependency with SafeRE.
Closed issues: #4914, #5182, #5843, #5857, #5865, #5878, #5900, #6029, #6079, #6107, #6116, #6133