From c804507faa104c54059a66037e881e1fd15fd831 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Sun, 14 Jun 2026 20:46:16 -0700 Subject: [PATCH] Add `final` to classes with `private` constructors. (prompted by https://github.com/google/error-prone/issues/5865) And suppress some warnings in `Refaster` and `ASTHelpers`. PiperOrigin-RevId: 932200535 --- .../src/main/java/com/google/errorprone/BugCheckerInfo.java | 2 +- .../main/java/com/google/errorprone/ErrorProneAnalyzer.java | 2 +- .../src/main/java/com/google/errorprone/ErrorProneFlags.java | 2 +- .../main/java/com/google/errorprone/ErrorProneOptions.java | 2 +- .../com/google/errorprone/JavacErrorDescriptionListener.java | 2 +- .../java/com/google/errorprone/RefactoringCollection.java | 2 +- .../src/main/java/com/google/errorprone/SuppressionInfo.java | 2 +- .../src/main/java/com/google/errorprone/VisitorState.java | 4 ++-- .../dataflow/nullnesspropagation/NullnessAnnotations.java | 2 +- .../inference/NullnessQualifierInference.java | 2 +- .../com/google/errorprone/fixes/BranchedSuggestedFixes.java | 2 +- .../java/com/google/errorprone/fixes/SuggestedFixes.java | 2 +- .../google/errorprone/matchers/AnnotationMatcherUtils.java | 2 +- .../java/com/google/errorprone/matchers/Description.java | 4 ++-- .../main/java/com/google/errorprone/matchers/Enclosing.java | 2 +- .../main/java/com/google/errorprone/matchers/Matchers.java | 2 +- .../java/com/google/errorprone/matchers/TestNgMatchers.java | 2 +- .../errorprone/matchers/method/MethodInvocationMatcher.java | 2 +- .../com/google/errorprone/names/LevenshteinEditDistance.java | 2 +- .../src/main/java/com/google/errorprone/util/ASTHelpers.java | 3 ++- .../src/main/java/com/google/errorprone/util/TargetType.java | 2 +- .../errorprone/bugpatterns/ByteBufferBackingArray.java | 4 ++-- .../google/errorprone/bugpatterns/CanBeStaticAnalyzer.java | 2 +- .../com/google/errorprone/bugpatterns/EqualsGetClass.java | 2 +- .../errorprone/bugpatterns/EqualsIncompatibleType.java | 2 +- .../com/google/errorprone/bugpatterns/FieldCanBeFinal.java | 2 +- .../errorprone/bugpatterns/ImpossibleNullComparison.java | 2 +- .../errorprone/bugpatterns/InconsistentCapitalization.java | 4 ++-- .../com/google/errorprone/bugpatterns/MissingSuperCall.java | 2 +- .../google/errorprone/bugpatterns/ModifiedButNotUsed.java | 2 +- .../com/google/errorprone/bugpatterns/UnusedVariable.java | 2 +- .../checkreturnvalue/CanIgnoreReturnValueSuggester.java | 2 +- .../bugpatterns/checkreturnvalue/ErrorMessages.java | 2 +- .../bugpatterns/flogger/FloggerArgumentToString.java | 2 +- .../formatstring/StrictFormatStringValidation.java | 2 +- .../bugpatterns/threadsafety/GuardedByExpression.java | 2 +- .../bugpatterns/threadsafety/GuardedBySymbolResolver.java | 2 +- .../bugpatterns/threadsafety/HeldLockAnalyzer.java | 4 ++-- .../errorprone/bugpatterns/threadsafety/HeldLockSet.java | 2 +- .../errorprone/bugpatterns/threadsafety/ThreadSafety.java | 2 +- .../google/errorprone/bugpatterns/time/NearbyCallers.java | 2 +- .../com/google/errorprone/refaster/ControlFlowVisitor.java | 4 ++-- .../main/java/com/google/errorprone/refaster/Refaster.java | 5 ++++- .../main/java/com/google/errorprone/refaster/UTypeVar.java | 2 +- .../google/errorprone/scanner/BuiltInCheckerSuppliers.java | 2 +- .../bugpatterns/CompileTimeConstantCheckerTest.java | 2 +- .../bugpatterns/nullness/UnnecessaryCheckNotNullTest.java | 4 ++-- .../google/errorprone/BugCheckerRefactoringTestHelper.java | 4 ++-- .../java/com/google/errorprone/CompilationTestHelper.java | 2 +- 49 files changed, 61 insertions(+), 57 deletions(-) diff --git a/check_api/src/main/java/com/google/errorprone/BugCheckerInfo.java b/check_api/src/main/java/com/google/errorprone/BugCheckerInfo.java index 6ebbcfb1c03..60e4eda265b 100644 --- a/check_api/src/main/java/com/google/errorprone/BugCheckerInfo.java +++ b/check_api/src/main/java/com/google/errorprone/BugCheckerInfo.java @@ -35,7 +35,7 @@ * An accessor for information about a single bug checker, including the metadata in the check's * {@code @BugPattern} annotation and the class that implements the check. */ -public class BugCheckerInfo implements Serializable { +public final class BugCheckerInfo implements Serializable { /** The BugChecker class. */ private final Class checker; diff --git a/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java b/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java index fa3ef98d709..a9beac856df 100644 --- a/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java +++ b/check_api/src/main/java/com/google/errorprone/ErrorProneAnalyzer.java @@ -52,7 +52,7 @@ /** A {@link TaskListener} that runs Error Prone over attributed compilation units. */ @Trusted -public class ErrorProneAnalyzer implements TaskListener { +public final class ErrorProneAnalyzer implements TaskListener { // The set of trees that have already been scanned. private final Set seen = new HashSet<>(); diff --git a/check_api/src/main/java/com/google/errorprone/ErrorProneFlags.java b/check_api/src/main/java/com/google/errorprone/ErrorProneFlags.java index 09b3d18b534..144452429d5 100644 --- a/check_api/src/main/java/com/google/errorprone/ErrorProneFlags.java +++ b/check_api/src/main/java/com/google/errorprone/ErrorProneFlags.java @@ -191,7 +191,7 @@ public ErrorProneFlags plus(ErrorProneFlags other) { } /** Builder for Error Prone command-line flags object. Parses flags from strings. */ - public static class Builder { + public static final class Builder { private final HashMap flagsMap = new HashMap<>(); diff --git a/check_api/src/main/java/com/google/errorprone/ErrorProneOptions.java b/check_api/src/main/java/com/google/errorprone/ErrorProneOptions.java index 48632b27696..da631ca6a81 100644 --- a/check_api/src/main/java/com/google/errorprone/ErrorProneOptions.java +++ b/check_api/src/main/java/com/google/errorprone/ErrorProneOptions.java @@ -49,7 +49,7 @@ * * @author eaftan@google.com (Eddie Aftandilian) */ -public class ErrorProneOptions { +public final class ErrorProneOptions { private static final String PREFIX = "-Xep"; private static final String SEVERITY_PREFIX = "-Xep:"; diff --git a/check_api/src/main/java/com/google/errorprone/JavacErrorDescriptionListener.java b/check_api/src/main/java/com/google/errorprone/JavacErrorDescriptionListener.java index 6227bca46dd..6fef73355d9 100644 --- a/check_api/src/main/java/com/google/errorprone/JavacErrorDescriptionListener.java +++ b/check_api/src/main/java/com/google/errorprone/JavacErrorDescriptionListener.java @@ -46,7 +46,7 @@ * * @author alexeagle@google.com (Alex Eagle) */ -public class JavacErrorDescriptionListener implements DescriptionListener { +public final class JavacErrorDescriptionListener implements DescriptionListener { private final Log log; private final JavaFileObject sourceFile; private final BiFunction fixToAppliedFix; diff --git a/check_api/src/main/java/com/google/errorprone/RefactoringCollection.java b/check_api/src/main/java/com/google/errorprone/RefactoringCollection.java index 479fd90e754..2d5bfc217e0 100644 --- a/check_api/src/main/java/com/google/errorprone/RefactoringCollection.java +++ b/check_api/src/main/java/com/google/errorprone/RefactoringCollection.java @@ -49,7 +49,7 @@ import java.util.logging.Logger; /** A container of fixes that have been collected during a single compilation phase. */ -public class RefactoringCollection implements DescriptionListener.Factory { +public final class RefactoringCollection implements DescriptionListener.Factory { private static final Logger logger = Logger.getLogger(RefactoringCollection.class.getName()); diff --git a/check_api/src/main/java/com/google/errorprone/SuppressionInfo.java b/check_api/src/main/java/com/google/errorprone/SuppressionInfo.java index da48ddffb1c..45d4ef2cd81 100644 --- a/check_api/src/main/java/com/google/errorprone/SuppressionInfo.java +++ b/check_api/src/main/java/com/google/errorprone/SuppressionInfo.java @@ -47,7 +47,7 @@ */ @Immutable @CheckReturnValue -public class SuppressionInfo { +public final class SuppressionInfo { public static final SuppressionInfo EMPTY = new SuppressionInfo(ImmutableSet.of(), ImmutableSet.of(), false); diff --git a/check_api/src/main/java/com/google/errorprone/VisitorState.java b/check_api/src/main/java/com/google/errorprone/VisitorState.java index 3dd07819aa5..0f4271bcbbb 100644 --- a/check_api/src/main/java/com/google/errorprone/VisitorState.java +++ b/check_api/src/main/java/com/google/errorprone/VisitorState.java @@ -71,7 +71,7 @@ /** * @author alexeagle@google.com (Alex Eagle) */ -public class VisitorState { +public /* TODO: cl/931120620 - final */ class VisitorState { private final SharedState sharedState; public final Context context; @@ -606,7 +606,7 @@ public AutoCloseable timingSpan(Suppressible suppressible) { return sharedState.timings.span(suppressible); } - private static class Cache implements Supplier { + private static final class Cache implements Supplier { private final Supplier impl; /* Uses T instead of Optional because we don't want to cache null results (b/138753468). These inline caches persist between compilation units, and a type that fails to diff --git a/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/NullnessAnnotations.java b/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/NullnessAnnotations.java index 1e93d261073..1d12cbb8a5d 100644 --- a/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/NullnessAnnotations.java +++ b/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/NullnessAnnotations.java @@ -44,7 +44,7 @@ import org.jspecify.annotations.Nullable; /** Utilities to extract {@link Nullness} from annotations. */ -public class NullnessAnnotations { +public final class NullnessAnnotations { // TODO(kmb): Correctly handle JSR 305 @Nonnull(NEVER) etc. private static final Predicate ANNOTATION_RELEVANT_TO_NULLNESS = Pattern.compile( diff --git a/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/inference/NullnessQualifierInference.java b/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/inference/NullnessQualifierInference.java index deced247508..aa32cdfc567 100644 --- a/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/inference/NullnessQualifierInference.java +++ b/check_api/src/main/java/com/google/errorprone/dataflow/nullnesspropagation/inference/NullnessQualifierInference.java @@ -71,7 +71,7 @@ * * @author bennostein@google.com (Benno Stein) */ -public class NullnessQualifierInference extends TreeScanner { +public final class NullnessQualifierInference extends TreeScanner { private static final LoadingCache inferenceCache = Caffeine.newBuilder() diff --git a/check_api/src/main/java/com/google/errorprone/fixes/BranchedSuggestedFixes.java b/check_api/src/main/java/com/google/errorprone/fixes/BranchedSuggestedFixes.java index 850bb2d1de5..fd28098deb2 100644 --- a/check_api/src/main/java/com/google/errorprone/fixes/BranchedSuggestedFixes.java +++ b/check_api/src/main/java/com/google/errorprone/fixes/BranchedSuggestedFixes.java @@ -43,7 +43,7 @@ * * @author andrewrice@google.com (Andrew Rice) */ -public class BranchedSuggestedFixes { +public final class BranchedSuggestedFixes { private final ImmutableList fixes; diff --git a/check_api/src/main/java/com/google/errorprone/fixes/SuggestedFixes.java b/check_api/src/main/java/com/google/errorprone/fixes/SuggestedFixes.java index 7c384c113a3..d5bba61bb5e 100644 --- a/check_api/src/main/java/com/google/errorprone/fixes/SuggestedFixes.java +++ b/check_api/src/main/java/com/google/errorprone/fixes/SuggestedFixes.java @@ -1942,7 +1942,7 @@ public static VariableNamer variableNamer(VisitorState state) { } /** Helper class for avoiding variable name shadowing. */ - public static class VariableNamer { + public static final class VariableNamer { private final Set idents; private VariableNamer(VisitorState state) { diff --git a/check_api/src/main/java/com/google/errorprone/matchers/AnnotationMatcherUtils.java b/check_api/src/main/java/com/google/errorprone/matchers/AnnotationMatcherUtils.java index 51704364c1d..5635ba67c53 100644 --- a/check_api/src/main/java/com/google/errorprone/matchers/AnnotationMatcherUtils.java +++ b/check_api/src/main/java/com/google/errorprone/matchers/AnnotationMatcherUtils.java @@ -26,7 +26,7 @@ * * @author mwacker@google.com (Mike Wacker) */ -public class AnnotationMatcherUtils { +public final class AnnotationMatcherUtils { /** * Gets the value for an argument, or null if the argument does not exist. diff --git a/check_api/src/main/java/com/google/errorprone/matchers/Description.java b/check_api/src/main/java/com/google/errorprone/matchers/Description.java index 7247b3dc004..de1828afe3d 100644 --- a/check_api/src/main/java/com/google/errorprone/matchers/Description.java +++ b/check_api/src/main/java/com/google/errorprone/matchers/Description.java @@ -42,7 +42,7 @@ * * @author alexeagle@google.com (Alex Eagle) */ -public class Description { +public final class Description { /** Describes the sentinel value of the case where the match failed. */ public static final Description NO_MATCH = new Description( @@ -151,7 +151,7 @@ public static Builder builder( } /** Builder for {@code Description}s. */ - public static class Builder { + public static final class Builder { private final ErrorPronePosition position; private final String name; private String linkUrl; diff --git a/check_api/src/main/java/com/google/errorprone/matchers/Enclosing.java b/check_api/src/main/java/com/google/errorprone/matchers/Enclosing.java index c78becb0eef..cf94d284eca 100644 --- a/check_api/src/main/java/com/google/errorprone/matchers/Enclosing.java +++ b/check_api/src/main/java/com/google/errorprone/matchers/Enclosing.java @@ -30,7 +30,7 @@ * * @author alexeagle@google.com (Alex Eagle) */ -public class Enclosing { +public final class Enclosing { private Enclosing() {} private abstract static class EnclosingMatcher diff --git a/check_api/src/main/java/com/google/errorprone/matchers/Matchers.java b/check_api/src/main/java/com/google/errorprone/matchers/Matchers.java index 02c440b6e47..5cb11478e25 100644 --- a/check_api/src/main/java/com/google/errorprone/matchers/Matchers.java +++ b/check_api/src/main/java/com/google/errorprone/matchers/Matchers.java @@ -114,7 +114,7 @@ * * @author alexeagle@google.com (Alex Eagle) */ -public class Matchers { +public final class Matchers { private Matchers() {} diff --git a/check_api/src/main/java/com/google/errorprone/matchers/TestNgMatchers.java b/check_api/src/main/java/com/google/errorprone/matchers/TestNgMatchers.java index b5b0f9ca678..89fe8e59609 100644 --- a/check_api/src/main/java/com/google/errorprone/matchers/TestNgMatchers.java +++ b/check_api/src/main/java/com/google/errorprone/matchers/TestNgMatchers.java @@ -30,7 +30,7 @@ * * @author bhagwani@google.com (Sumit Bhagwani) */ -public class TestNgMatchers { +public final class TestNgMatchers { /** * Checks if a method, or any overridden method, is annotated with any annotation from the diff --git a/check_api/src/main/java/com/google/errorprone/matchers/method/MethodInvocationMatcher.java b/check_api/src/main/java/com/google/errorprone/matchers/method/MethodInvocationMatcher.java index d533678f262..2bbf78f8c8d 100644 --- a/check_api/src/main/java/com/google/errorprone/matchers/method/MethodInvocationMatcher.java +++ b/check_api/src/main/java/com/google/errorprone/matchers/method/MethodInvocationMatcher.java @@ -46,7 +46,7 @@ * The machinery and type definitions necessary to model and compile a single efficient matcher out * of a list of {@link com.google.errorprone.matchers.method.MethodMatchers.MethodMatcher}s. */ -public class MethodInvocationMatcher { +public final class MethodInvocationMatcher { record Context(MethodSymbol sym, ExpressionTree tree) { static Optional create(ExpressionTree tree) { diff --git a/check_api/src/main/java/com/google/errorprone/names/LevenshteinEditDistance.java b/check_api/src/main/java/com/google/errorprone/names/LevenshteinEditDistance.java index 40a5dae69b2..9627c0471aa 100644 --- a/check_api/src/main/java/com/google/errorprone/names/LevenshteinEditDistance.java +++ b/check_api/src/main/java/com/google/errorprone/names/LevenshteinEditDistance.java @@ -28,7 +28,7 @@ * * @author eaftan@google.com (Eddie Aftandilian) */ -public class LevenshteinEditDistance { +public final class LevenshteinEditDistance { private LevenshteinEditDistance() { /* disallow instantiation */ diff --git a/check_api/src/main/java/com/google/errorprone/util/ASTHelpers.java b/check_api/src/main/java/com/google/errorprone/util/ASTHelpers.java index 94d3bf53755..a3081fa4bb4 100644 --- a/check_api/src/main/java/com/google/errorprone/util/ASTHelpers.java +++ b/check_api/src/main/java/com/google/errorprone/util/ASTHelpers.java @@ -162,7 +162,8 @@ import org.jspecify.annotations.Nullable; /** This class contains utility methods to work with the javac AST. */ -public class ASTHelpers { +@SuppressWarnings("IdentifierName") // should have been "AstHelpers" but too disruptive to change +public final class ASTHelpers { /** * Determines whether two expressions refer to the same variable. Note that returning false * doesn't necessarily mean the expressions do *not* refer to the same field. We don't attempt to diff --git a/check_api/src/main/java/com/google/errorprone/util/TargetType.java b/check_api/src/main/java/com/google/errorprone/util/TargetType.java index c9b8542e7db..7b7350596d6 100644 --- a/check_api/src/main/java/com/google/errorprone/util/TargetType.java +++ b/check_api/src/main/java/com/google/errorprone/util/TargetType.java @@ -176,7 +176,7 @@ private static boolean canHaveTargetType(Tree tree) { } @VisibleForTesting - static class TargetTypeVisitor extends SimpleTreeVisitor { + static final class TargetTypeVisitor extends SimpleTreeVisitor { private final VisitorState state; private final TreePath parent; private final ExpressionTree current; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/ByteBufferBackingArray.java b/core/src/main/java/com/google/errorprone/bugpatterns/ByteBufferBackingArray.java index c2df097a585..6b176af6de0 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/ByteBufferBackingArray.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/ByteBufferBackingArray.java @@ -123,7 +123,7 @@ private static boolean isValidInitializerOrNotAByteBuffer( * Scan for a call to ByteBuffer.arrayOffset() or check if buffer was initialized with either * ByteBuffer.wrap() or ByteBuffer.allocate(). */ - private static class ValidByteBufferArrayScanner extends TreeScanner { + private static final class ValidByteBufferArrayScanner extends TreeScanner { private final Symbol searchedBufferSymbol; private boolean visited; @@ -185,7 +185,7 @@ private void checkForInitializer( } /** Scan for a call to ByteBuffer.wrap() or ByteBuffer.allocate(). */ - private static class ValidByteBufferInitializerScanner + private static final class ValidByteBufferInitializerScanner extends TreeScanner { static Boolean scan(ExpressionTree tree, VisitorState state) { diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/CanBeStaticAnalyzer.java b/core/src/main/java/com/google/errorprone/bugpatterns/CanBeStaticAnalyzer.java index 8e6a83da6cf..e17fd573874 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/CanBeStaticAnalyzer.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/CanBeStaticAnalyzer.java @@ -39,7 +39,7 @@ import java.util.Set; /** Analyzes trees for references to their enclosing instance. */ -public class CanBeStaticAnalyzer extends TreeScanner { +public final class CanBeStaticAnalyzer extends TreeScanner { /** Returns true if the tree references its enclosing class. */ public static boolean referencesOuter(Tree tree, Symbol owner, VisitorState state) { diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/EqualsGetClass.java b/core/src/main/java/com/google/errorprone/bugpatterns/EqualsGetClass.java index b0ebb50c42a..676e511e464 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/EqualsGetClass.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/EqualsGetClass.java @@ -107,7 +107,7 @@ public Description matchMethodInvocation(MethodInvocationTree tree, VisitorState return describeMatch(methodTree, fixer.getFix()); } - private static class EqualsFixer extends TreePathScanner { + private static final class EqualsFixer extends TreePathScanner { private static final Matcher GET_CLASS = instanceMethod().onDescendantOf("java.lang.Object").named("getClass").withNoParameters(); diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/EqualsIncompatibleType.java b/core/src/main/java/com/google/errorprone/bugpatterns/EqualsIncompatibleType.java index cfd1284759c..b0ef8b4d15d 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/EqualsIncompatibleType.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/EqualsIncompatibleType.java @@ -202,7 +202,7 @@ private static String getMessage( + " are incompatible."; } - private static class TypeStringPair { + private static final class TypeStringPair { private String receiverTypeString; private String argumentTypeString; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/FieldCanBeFinal.java b/core/src/main/java/com/google/errorprone/bugpatterns/FieldCanBeFinal.java index 9654cab479c..c70ba8af508 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/FieldCanBeFinal.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/FieldCanBeFinal.java @@ -253,7 +253,7 @@ public Description matchCompilationUnit(CompilationUnitTree tree, VisitorState s } /** Record assignments to possibly-final variables in a compilation unit. */ - private class FinalScanner extends TreePathScanner { + private final class FinalScanner extends TreePathScanner { private final VariableAssignmentRecords writes; private final VisitorState compilationState; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/ImpossibleNullComparison.java b/core/src/main/java/com/google/errorprone/bugpatterns/ImpossibleNullComparison.java index b42113e8a30..e9195f102bd 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/ImpossibleNullComparison.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/ImpossibleNullComparison.java @@ -169,7 +169,7 @@ public Description matchCompilationUnit(CompilationUnitTree tree, VisitorState s return Description.NO_MATCH; } - private class NullComparisonScanner extends TreePathScanner { + private final class NullComparisonScanner extends TreePathScanner { private final Map effectivelyFinalValues = new HashMap<>(); private final VisitorState state; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/InconsistentCapitalization.java b/core/src/main/java/com/google/errorprone/bugpatterns/InconsistentCapitalization.java index f7b0f27be9f..3e1e2c44595 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/InconsistentCapitalization.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/InconsistentCapitalization.java @@ -142,7 +142,7 @@ private static boolean isUpperCaseAndStatic(Symbol symbol) { * Matcher for all fields of the given class node that are either instance members or not all * upper case. */ - private static class FieldScanner extends TreeScanner { + private static final class FieldScanner extends TreeScanner { static ImmutableSet findFields(ClassTree tree) { ImmutableSet.Builder fieldsBuilder = ImmutableSet.builder(); @@ -177,7 +177,7 @@ public Void visitVariable(VariableTree tree, Void unused) { * Matcher for all parameters (methods, constructors, lambda expressions) that have the same name * as one of the provided fields but with different capitalization. */ - private static class MatchingParametersScanner extends TreePathScanner { + private static final class MatchingParametersScanner extends TreePathScanner { static ImmutableMap findMatchingParameters( ImmutableMap fieldNamesMap, TreePath path) { diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/MissingSuperCall.java b/core/src/main/java/com/google/errorprone/bugpatterns/MissingSuperCall.java index 0a9a37de834..3147a897349 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/MissingSuperCall.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/MissingSuperCall.java @@ -164,7 +164,7 @@ public Description matchMethod(MethodTree tree, VisitorState state) { } /** Scans a tree looking for calls to a method that is overridden by the given one. */ - private static class FindSuperTreeScanner extends TreeScanner { + private static final class FindSuperTreeScanner extends TreeScanner { private final String overridingMethodName; private FindSuperTreeScanner(String overridingMethodName) { diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/ModifiedButNotUsed.java b/core/src/main/java/com/google/errorprone/bugpatterns/ModifiedButNotUsed.java index 63d32f7d856..4534894785b 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/ModifiedButNotUsed.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/ModifiedButNotUsed.java @@ -301,7 +301,7 @@ private static boolean newFluentChain(ExpressionTree tree, VisitorState state) { .orElse(false); } - private static class UnusedScanner extends TreePathScanner { + private static final class UnusedScanner extends TreePathScanner { private final Symbol symbol; private final VisitorState state; private final Matcher matcher; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/UnusedVariable.java b/core/src/main/java/com/google/errorprone/bugpatterns/UnusedVariable.java index 0c238cd8ae0..018b85228ac 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/UnusedVariable.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/UnusedVariable.java @@ -650,7 +650,7 @@ private boolean exemptedByName(Name name) { || exemptNames.contains(nameString); } - private class VariableFinder extends TreePathScanner { + private final class VariableFinder extends TreePathScanner { private final Map unusedElements = new HashMap<>(); private final Set onlyCheckForReassignments = new HashSet<>(); diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/CanIgnoreReturnValueSuggester.java b/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/CanIgnoreReturnValueSuggester.java index ad0d2de792f..edb3da5fc3f 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/CanIgnoreReturnValueSuggester.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/CanIgnoreReturnValueSuggester.java @@ -301,7 +301,7 @@ private static boolean isDefinitionOfZeroArgSelf(MethodSymbol methodSymbol) { } private static boolean methodReturnsIgnorableValues(MethodTree tree, VisitorState state) { - class ReturnValuesFromMethodAreIgnorable extends TreeScanner { + final class ReturnValuesFromMethodAreIgnorable extends TreeScanner { private final VisitorState state; private final Type enclosingClassType; private final Type methodReturnType; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ErrorMessages.java b/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ErrorMessages.java index 623926b0727..4b3190a636c 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ErrorMessages.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/checkreturnvalue/ErrorMessages.java @@ -21,7 +21,7 @@ import java.util.List; /** Error messages used by {@link com.google.errorprone.bugpatterns.CheckReturnValue}. */ -public class ErrorMessages { +public final class ErrorMessages { private ErrorMessages() {} /** diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/flogger/FloggerArgumentToString.java b/core/src/main/java/com/google/errorprone/bugpatterns/flogger/FloggerArgumentToString.java index b63c7553a3a..505a9075359 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/flogger/FloggerArgumentToString.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/flogger/FloggerArgumentToString.java @@ -117,7 +117,7 @@ public class FloggerArgumentToString extends BugChecker implements MethodInvocat private static final Character HEX_FORMAT = 'x'; private static final Character UPPER_HEX_FORMAT = 'X'; - static class Parameter { + static final class Parameter { final Supplier source; final Type type; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/formatstring/StrictFormatStringValidation.java b/core/src/main/java/com/google/errorprone/bugpatterns/formatstring/StrictFormatStringValidation.java index 1276da1296c..92ccda3f000 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/formatstring/StrictFormatStringValidation.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/formatstring/StrictFormatStringValidation.java @@ -49,7 +49,7 @@ * Format string validation utility that fails on more cases than {@link FormatStringValidation} to * enforce strict format string checking. */ -public class StrictFormatStringValidation { +public final class StrictFormatStringValidation { private static final Matcher MOCKITO_MATCHERS = staticMethod().onClassAny("org.mockito.Matchers", "org.mockito.ArgumentMatchers"); diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedByExpression.java b/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedByExpression.java index e41048bf1ec..1d077fa558f 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedByExpression.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedByExpression.java @@ -104,7 +104,7 @@ public String guardString() { /** A simple 'this literal. */ // Don't use AutoValue here, since sym and type need to be 'null'. (And since // it's a singleton we don't need to implement equals() or hashCode()). - public static class ThisLiteral extends GuardedByExpression { + public static final class ThisLiteral extends GuardedByExpression { static final ThisLiteral INSTANCE = new ThisLiteral(); diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedBySymbolResolver.java b/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedBySymbolResolver.java index 23fba0e4331..ed1aded3e1c 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedBySymbolResolver.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/GuardedBySymbolResolver.java @@ -51,7 +51,7 @@ * * @author cushon@google.com (Liam Miller-Cushon) */ -public class GuardedBySymbolResolver implements GuardedByBinder.Resolver { +public final class GuardedBySymbolResolver implements GuardedByBinder.Resolver { private final ClassSymbol enclosingClass; private final MethodInfo method; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/HeldLockAnalyzer.java b/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/HeldLockAnalyzer.java index bb92c373093..29c79c4b8ed 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/HeldLockAnalyzer.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/HeldLockAnalyzer.java @@ -133,7 +133,7 @@ private static HeldLockSet handleMonitorGuards(VisitorState state, HeldLockSet l .orElse(locks); } - private static class LockScanner extends TreePathScanner { + private static final class LockScanner extends TreePathScanner { private final VisitorState visitorState; private final LockEventListener listener; @@ -306,7 +306,7 @@ static LockResource create(String className, String unlockMethod) { LockResource.create("com.google.common.util.concurrent.Monitor", "leave"), LockResource.create("java.util.concurrent.Semaphore", "release")); - private static class LockOperationFinder extends TreeScanner { + private static final class LockOperationFinder extends TreeScanner { static Collection find( Tree tree, VisitorState state, Matcher lockOperationMatcher) { diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/HeldLockSet.java b/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/HeldLockSet.java index 53706dadaad..6314df4afcf 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/HeldLockSet.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/HeldLockSet.java @@ -30,7 +30,7 @@ * * @author cushon@google.com (Liam Miller-Cushon) */ -class HeldLockSet { +final class HeldLockSet { final PSet locks; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ThreadSafety.java b/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ThreadSafety.java index 0f62569aa04..1c4b4af6fcf 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ThreadSafety.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/threadsafety/ThreadSafety.java @@ -421,7 +421,7 @@ private Violation isThreadSafeTypeInternal( null); } - private class ThreadSafeTypeVisitor extends Types.SimpleVisitor { + private final class ThreadSafeTypeVisitor extends Types.SimpleVisitor { private final boolean allowContainerTypeParameters; private final Set containerTypeParameters; diff --git a/core/src/main/java/com/google/errorprone/bugpatterns/time/NearbyCallers.java b/core/src/main/java/com/google/errorprone/bugpatterns/time/NearbyCallers.java index 22a01972cde..f8875feed17 100644 --- a/core/src/main/java/com/google/errorprone/bugpatterns/time/NearbyCallers.java +++ b/core/src/main/java/com/google/errorprone/bugpatterns/time/NearbyCallers.java @@ -43,7 +43,7 @@ * *

TODO(glorioso): Coalesce this with ByteBufferBackingArray since they have similar aims? */ -public class NearbyCallers { +public final class NearbyCallers { private NearbyCallers() {} // lifted from com.google.devtools.javatools.refactory.refaster.cleanups.proto.ProtoMatchers diff --git a/core/src/main/java/com/google/errorprone/refaster/ControlFlowVisitor.java b/core/src/main/java/com/google/errorprone/refaster/ControlFlowVisitor.java index 882038084c3..c5a20a0341e 100644 --- a/core/src/main/java/com/google/errorprone/refaster/ControlFlowVisitor.java +++ b/core/src/main/java/com/google/errorprone/refaster/ControlFlowVisitor.java @@ -52,7 +52,7 @@ * * @author lowasser@google.com (Louis Wasserman) */ -public class ControlFlowVisitor extends SimpleTreeVisitor { +public final class ControlFlowVisitor extends SimpleTreeVisitor { public static final ControlFlowVisitor INSTANCE = new ControlFlowVisitor(); /** @@ -120,7 +120,7 @@ Result then(Result other) { abstract Result then(Result other); } - static class BreakContext { + static final class BreakContext { final Set internalLabels; int loopDepth; diff --git a/core/src/main/java/com/google/errorprone/refaster/Refaster.java b/core/src/main/java/com/google/errorprone/refaster/Refaster.java index 30a84ee0684..7e21ca88acb 100644 --- a/core/src/main/java/com/google/errorprone/refaster/Refaster.java +++ b/core/src/main/java/com/google/errorprone/refaster/Refaster.java @@ -23,7 +23,9 @@ * * @author lowasser@google.com (Louis Wasserman) */ -public class Refaster { +// We need to call these methods from templates that aren't run as normal Java code. +@SuppressWarnings("DoNotCallSuggester") +public final class Refaster { private Refaster() {} /** @@ -98,6 +100,7 @@ public static T anyOf(T... expressions) { * * @throws IllegalArgumentException if T is not specified explicitly. */ + @SuppressWarnings("UnusedTypeParameter") // The type parameter supports extralinguistic magic public static boolean isInstance(Object o) { // real code wouldn't have an unused type parameter (T) or an unused argument (o) throw new UnsupportedOperationException(o.toString()); diff --git a/core/src/main/java/com/google/errorprone/refaster/UTypeVar.java b/core/src/main/java/com/google/errorprone/refaster/UTypeVar.java index 102d779b23f..97c9486eab4 100644 --- a/core/src/main/java/com/google/errorprone/refaster/UTypeVar.java +++ b/core/src/main/java/com/google/errorprone/refaster/UTypeVar.java @@ -31,7 +31,7 @@ * * @author Louis Wasserman */ -public class UTypeVar extends UType { +public final class UTypeVar extends UType { // This can't be @AutoValue'd, since the fields are mutable. /** Bindings key linked to a {@code UTypeVar}. */ diff --git a/core/src/main/java/com/google/errorprone/scanner/BuiltInCheckerSuppliers.java b/core/src/main/java/com/google/errorprone/scanner/BuiltInCheckerSuppliers.java index 809fc65e29a..191262da674 100644 --- a/core/src/main/java/com/google/errorprone/scanner/BuiltInCheckerSuppliers.java +++ b/core/src/main/java/com/google/errorprone/scanner/BuiltInCheckerSuppliers.java @@ -671,7 +671,7 @@ * Static helper class that provides {@link ScannerSupplier}s and {@link BugChecker}s for the * built-in Error Prone checks, as opposed to plugin checks or checks used in tests. */ -public class BuiltInCheckerSuppliers { +public final class BuiltInCheckerSuppliers { @SafeVarargs public static ImmutableSet getSuppliers(Class... checkers) { return getSuppliers(Arrays.asList(checkers)); diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/CompileTimeConstantCheckerTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/CompileTimeConstantCheckerTest.java index 7cba8744f22..419eb2878c8 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/CompileTimeConstantCheckerTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/CompileTimeConstantCheckerTest.java @@ -345,7 +345,7 @@ public static CompileTimeConstantTestCase makeNew(String x) { } /** Holder for a method we wish to reference from a test. */ - public static class Holder { + public static final class Holder { public static void m(String s, @CompileTimeConstant String... p) {} private Holder() {} diff --git a/core/src/test/java/com/google/errorprone/bugpatterns/nullness/UnnecessaryCheckNotNullTest.java b/core/src/test/java/com/google/errorprone/bugpatterns/nullness/UnnecessaryCheckNotNullTest.java index 1afad3cf771..55c5cdb8cd9 100644 --- a/core/src/test/java/com/google/errorprone/bugpatterns/nullness/UnnecessaryCheckNotNullTest.java +++ b/core/src/test/java/com/google/errorprone/bugpatterns/nullness/UnnecessaryCheckNotNullTest.java @@ -517,8 +517,8 @@ void foo(String x, A a) { } // TODO(mdempsky): Make this more reusable. - private static class TestScanner extends Scanner { - private static class Match { + private static final class TestScanner extends Scanner { + private static final class Match { private final ImmutableList expected; private boolean found = false; diff --git a/test_helpers/src/main/java/com/google/errorprone/BugCheckerRefactoringTestHelper.java b/test_helpers/src/main/java/com/google/errorprone/BugCheckerRefactoringTestHelper.java index 8f1321b3347..de8eb9f22ff 100644 --- a/test_helpers/src/main/java/com/google/errorprone/BugCheckerRefactoringTestHelper.java +++ b/test_helpers/src/main/java/com/google/errorprone/BugCheckerRefactoringTestHelper.java @@ -85,7 +85,7 @@ * @author kurs@google.com (Jan Kurs) */ @CheckReturnValue -public class BugCheckerRefactoringTestHelper { +public final class BugCheckerRefactoringTestHelper { /** Test mode for matching refactored source against expected source. */ public enum TestMode { @@ -451,7 +451,7 @@ private static String getFullyQualifiedName(JCCompilationUnit tree) { } /** To assert the proper {@code .addInput().addOutput()} chain. */ - public class ExpectOutput { + public final class ExpectOutput { private final JavaFileObject input; private ExpectOutput(JavaFileObject input) { diff --git a/test_helpers/src/main/java/com/google/errorprone/CompilationTestHelper.java b/test_helpers/src/main/java/com/google/errorprone/CompilationTestHelper.java index 45ae57efdcd..05713c0b97c 100644 --- a/test_helpers/src/main/java/com/google/errorprone/CompilationTestHelper.java +++ b/test_helpers/src/main/java/com/google/errorprone/CompilationTestHelper.java @@ -59,7 +59,7 @@ /** Helps test Error Prone bug checkers and compilations. */ @CheckReturnValue -public class CompilationTestHelper { +public final class CompilationTestHelper { private static final ImmutableList DEFAULT_ARGS = ImmutableList.of( "-encoding",