Class BugChecker

java.lang.Object
com.google.errorprone.bugpatterns.BugChecker
All Implemented Interfaces:
Suppressible, Serializable
Direct Known Subclasses:
AbstractAsKeyOfSetOrMap, AbstractBanUnsafeAPIChecker, AbstractMockChecker, AbstractMustBeClosedChecker, AbstractPatternSyntaxChecker, AbstractReferenceEquality, AbstractReturnValueIgnored, AbstractToString, AbstractUseSwitch, AddressSelection, AlmostJavadoc, AlreadyChecked, AlwaysThrows, AmbiguousMethodReference, AndroidInjectionBeforeSuper, AnnotateFormatMethod, AnnotationPosition, ApiDiffChecker, ArgumentSelectionDefectChecker, ArrayEquals, ArrayFillIncompatibleType, ArrayHashCode, ArraysAsListPrimitiveArray, AssertEqualsArgumentOrderChecker, AssertFalse, AssertionFailureIgnored, AssertThrowsMultipleStatements, AssistedInjectAndInjectOnConstructors, AssistedInjectAndInjectOnSameConstructor, AssistedInjectScoping, AssistedParameters, ASTHelpersSuggestions, AsyncCallableReturnsNull, AsyncFunctionReturnsNull, AttemptedNegativeZero, AutoFactoryAtInject, AutoValueBuilderDefaultsInConstructor, AutoValueConstructorOrderChecker, AutoValueFinalMethods, AutoValueImmutableFields, AutoValueSubclassLeaked, AvoidObjectArrays, BadAnnotationImplementation, BadComparable, BadImport, BadInstanceof, BadShiftAmount, BigDecimalEquals, BigDecimalLiteralDouble, BinderIdentityRestoredDangerously, BindingToUnqualifiedCommonType, BooleanParameter, BoxedPrimitiveConstructor, BugPatternNaming, BuilderReturnThis, BundleDeserializationCast, ByteBufferBackingArray, CacheLoaderNull, CanIgnoreReturnValueSuggester, CannotMockFinalClass, CannotMockMethod, CanonicalDuration, CatchAndPrintStackTrace, CatchFail, CatchingUnchecked, ChainedAssertionLosesContext, ChainingConstructorIgnoresParameter, CharacterGetNumericValue, CheckedExceptionNotThrown, CheckNotNullMultipleTimes, ClassCanBeStatic, ClassInitializationDeadlock, ClassName, ClassNamedLikeTypeParameter, ClassNewInstance, CloseableProvides, ClosingStandardOutputStreams, CollectionIncompatibleType, CollectionToArraySafeParameter, CollectionUndefinedEquality, CollectorShouldNotUseState, ComparableAndComparator, ComparableType, CompareToZero, ComparingThisWithNull, ComparisonContractViolated, ComparisonOutOfRange, CompatibleWithMisuse, CompileTimeConstantChecker, ComplexBooleanConstant, ComputeIfAbsentAmbiguousReference, ConditionalExpressionNumericPromotion, ConstantField, ConstantOverflow, ConstantPatternCompile, DangerousLiteralNullChecker, DateChecker, DateFormatConstant, DeadException, DeadThread, DeduplicateConstants, DefaultCharset, DefaultPackage, DepAnn, DeprecatedVariable, DereferenceWithNullBranch, DifferentNameButSame, DirectInvocationOnMock, DiscardedPostfixExpression, DistinctVarargsChecker, DoNotCallChecker, DoNotCallSuggester, DoNotClaimAnnotations, DoNotUseRuleChain, DoubleBraceInitialization, DoubleCheckedLocking, DuplicateMapKeys, DurationFrom, DurationGetTemporalUnit, DurationTemporalUnit, DurationToLongTimeUnit, EmptyBlockTag, EmptyCatch, EmptyIfStatement, EmptySetMultibindingContributions, EmptyTopLevelDeclaration, EnumOrdinal, EqualsBrokenForNull, EqualsGetClass, EqualsHashCode, EqualsIncompatibleType, EqualsMissingNullable, EqualsNaN, EqualsNull, EqualsReference, EqualsUnsafeCast, EqualsUsingHashCode, EqualsWrongThing, ErroneousBitwiseExpression, ErroneousThreadPoolConstructorChecker, EscapedEntity, ExpectedExceptionChecker, ExtendingJUnitAssert, ExtendsAutoValue, ExtendsObject, FallThrough, FieldCanBeFinal, FieldCanBeLocal, FieldCanBeStatic, FieldMissingNullable, Finalize, Finally, FloatCast, FloatingPointAssertionWithinEpsilon, FloatingPointLiteralPrecision, FloggerArgumentToString, FloggerFormatString, FloggerLogString, FloggerLogVarargs, FloggerLogWithCause, FloggerMessageFormat, FloggerRedundantIsEnabled, FloggerRequiredModifiers, FloggerSplitLogStatement, FloggerStringConcatenation, FloggerWithCause, FloggerWithoutCause, ForEachIterable, FormatString, FormatStringAnnotationChecker, ForOverrideChecker, FragmentInjection, FragmentNotInstantiable, FromTemporalAccessor, FunctionalInterfaceClash, FunctionalInterfaceMethodChanged, FuturesGetCheckedIllegalExceptionType, FuzzyEqualsShouldNotBeUsedInEqualsMethod, GetClassOnAnnotation, GetClassOnClass, GetClassOnEnum, GuardedByChecker, HardCodedSdCardPath, HashtableContains, HidingField, ICCProfileGetInstance, IdentityBinaryExpression, IdentityHashMapBoxing, IdentityHashMapUsage, ImmutableAnnotationChecker, ImmutableChecker, ImmutableEnumChecker, ImmutableMemberCollection, ImmutableRefactoring, ImmutableSetForContains, ImplementAssertionWithChaining, ImpossibleNullComparison, Incomparable, IncompatibleArgumentType, IncompatibleModifiersChecker, InconsistentCapitalization, InconsistentHashCode, InconsistentOverloads, IncorrectMainMethod, IncrementInForLoopAndHeader, IndexOfChar, InexactVarargsConditional, InfiniteRecursion, InheritDoc, InitializeInline, InjectedConstructorAnnotations, InjectOnBugCheckers, InjectOnConstructorOfAbstractClass, InjectOnFinalField, InjectOnMemberAndConstructor, InlineFormatString, Inliner, InlineTrivialConstant, InputStreamSlowMultibyteRead, InsecureCipherMode, InstanceOfAndCastMatchWrongType, InstantTemporalUnit, InterfaceWithOnlyStatics, InterruptedExceptionSwallowed, Interruption, IntLongMath, InvalidBlockTag, InvalidInlineTag, InvalidJavaTimeConstant, InvalidLink, InvalidParam, InvalidTargetingOnScopingAnnotation, InvalidThrows, InvalidThrowsLink, InvalidTimeZoneID, InvalidZoneId, IsInstanceIncompatibleType, IsInstanceOfClass, IsLoggableTagLength, IterableAndIterator, IterablePathParameter, JavaDurationGetSecondsGetNano, JavaDurationWithNanos, JavaDurationWithSeconds, JavaInstantGetSecondsGetNano, JavaLangClash, JavaLocalDateTimeGetNano, JavaLocalTimeGetNano, JavaPeriodGetDays, JavaTimeDefaultTimeZone, JavaUtilDateChecker, JavaxInjectOnAbstractMethod, JavaxInjectOnFinalField, JdkObsolete, JodaConstructors, JodaDateTimeConstants, JodaDurationWithMillis, JodaInstantWithMillis, JodaNewPeriod, JodaPlusMinusLong, JodaTimeConverterManager, JodaToSelf, JodaWithDurationAddedLong, JUnit3FloatingPointComparisonWithoutDelta, JUnit3TestNotRun, JUnit4ClassAnnotationNonStatic, JUnit4ClassUsedInJUnit3, JUnit4SetUpNotRun, JUnit4TearDownNotRun, JUnit4TestNotRun, JUnit4TestsNotRunWithinEnclosed, JUnitAmbiguousTestClass, JUnitAssertSameCheck, JUnitIncompatibleType, JUnitParameterMethodNotFound, LabelledBreakTarget, LambdaFunctionalInterface, LenientFormatStringValidation, LiteByteStringUtf8, LiteEnumValueOf, LocalDateTemporalAmount, LockNotBeforeTry, LockOnBoxedPrimitive, LockOnNonEnclosingClassLiteral, LogicalAssignment, LongDoubleConversion, LongFloatConversion, LongLiteralLowerCaseSuffix, LoopConditionChecker, LoopOverCharArray, LossyPrimitiveCompare, MalformedInlineTag, MathAbsoluteNegative, MathRoundIntLong, MemberName, MemoizeConstantVisitorStateLookups, MethodCanBeStatic, MislabeledAndroidString, MisplacedScopeAnnotations, MissingBraces, MissingCasesInEnumSwitch, MissingDefault, MissingFail, MissingImplementsComparable, MissingOverride, MissingRefasterAnnotation, MissingSummary, MissingSuperCall, MissingTestCall, MisusedDateFormat, MixedArrayDimensions, MixedDescriptors, MixedMutabilityReturnType, MockitoUsage, MockNotUsedInProduction, ModifiedButNotUsed, ModifyCollectionInEnhancedForLoop, ModifyingCollectionWithItself, ModifySourceCollectionInStream, MoreThanOneInjectableConstructor, MoreThanOneQualifier, MoreThanOneScopeAnnotationOnClass, MultimapKeys, MultipleNullnessAnnotations, MultipleParallelOrSequentialCalls, MultipleTopLevelClasses, MultipleUnaryOperatorsInMethodCall, MultiVariableDeclaration, MutableGuiceModule, MutablePublicArray, NamedLikeContextualKeyword, NarrowCalculation, NarrowingCompoundAssignment, NCopiesOfChar, NegativeCharLiteral, NestedInstanceOfConditions, NewFileSystem, NoAllocationChecker, NoCanIgnoreReturnValueOnClasses, NonApiType, NonAtomicVolatileUpdate, NonCanonicalStaticImport, NonCanonicalStaticMemberImport, NonCanonicalType, NonFinalCompileTimeConstant, NonFinalStaticField, NonOverridingEquals, NonRuntimeAnnotation, NotJavadoc, NullableConstructor, NullableOnContainingClass, NullableOptional, NullablePrimitive, NullablePrimitiveArray, NullableTypeParameter, NullableVoid, NullableWildcard, NullArgumentForNonNullParameter, NullOptional, NullTernary, ObjectEqualsForPrimitives, ObjectsHashCodePrimitive, OperatorPrecedence, OptionalMapToOptional, OptionalMapUnusedValue, OptionalNotPresent, OptionalOfRedundantMethod, OrphanedFormatString, OutlineNone, OverlappingQualifierAndScopeAnnotation, Overrides, OverridesGuiceInjectableMethod, OverridesJavaxInjectableMethod, OverrideThrowableToString, OverridingMethodInconsistentArgumentNamesChecker, PackageInfo, PackageLocation, ParameterComment, ParameterMissingNullable, ParameterName, ParametersButNotParameterized, ParcelableCreator, PeriodFrom, PeriodGetTemporalUnit, PeriodTimeMath, PreconditionsCheckNotNullRepeated, PreconditionsInvalidPlaceholder, PreferJavaTimeOverload, PreferredInterfaceType, PrimitiveArrayPassedToVarargsMethod, PrimitiveAtomicReference, PrivateConstructorForNoninstantiableModule, PrivateConstructorForUtilityClass, PrivateSecurityContractProtoAccess, ProtectedMembersInFinalClass, ProtocolBufferOrdinal, ProtoDurationGetSecondsGetNano, ProtoStringFieldReferenceEquality, ProtoTimestampGetSecondsGetNano, ProtoTruthMixedDescriptors, ProvidesMethodOutsideOfModule, ProvidesNull, PublicApiNamedStreamShouldReturnStream, QualifierOrScopeOnInjectMethod, QualifierWithTypeUse, RandomCast, RandomModInteger, ReachabilityFenceUsage, RedundantOverride, RedundantSetterCall, RedundantThrows, RefersToDaggerCodegen, RemoveUnusedImports, RequiredModifiersChecker, RestrictedApiChecker, RethrowReflectiveOperationExceptionAsLinkageError, ReturnAtTheEndOfVoidFunction, ReturnFromVoid, ReturnMissingNullable, ReturnsNullCollection, RobolectricShadowDirectlyOn, SameNameButDifferent, ScopeAnnotationOnInterfaceOrAbstractClass, ScopeOnModule, ScopeOrQualifierAnnotationRetention, SelfAlwaysReturnsThis, SelfAssignment, SelfComparison, SelfEquals, ShortCircuitBoolean, ShouldHaveEvenArgs, SizeGreaterThanOrEqualsZero, StatementSwitchToExpressionSwitch, StaticAssignmentInConstructor, StaticAssignmentOfThrowable, StaticGuardedByInstance, StaticMockMember, StaticOrDefaultInterfaceMethod, StaticQualifiedUsingExpression, StreamToIterable, StringBuilderInitWithChar, StringCaseLocaleUsage, StringCharset, StringFormatWithLiteral, StringSplitter, StronglyTypeByteString, StronglyTypeTime, SubstringOfZero, Suggester, SuperCallToObjectMethod, SuppressWarningsDeprecated, SuppressWarningsWithoutExplanation, SwigMemoryLeak, SwitchDefault, SynchronizeOnNonFinalField, SystemConsoleNull, SystemExitOutsideMain, SystemOut, TemporalAccessorGetChronoField, TestExceptionChecker, TestParametersNotInitialized, TheoryButNoTheories, ThreadJoinLoop, ThreadLocalUsage, ThreadPriorityCheck, ThreadSafeChecker, ThreeLetterTimeZoneID, ThrowIfUncheckedKnownChecked, ThrowNull, ThrowSpecificExceptions, ThrowsUncheckedException, TimeUnitConversionChecker, TimeUnitMismatch, TooManyParameters, ToStringReturnsNull, TransientMisuse, TruthAssertExpected, TruthConstantAsserts, TruthContainsExactlyElementsInUsage, TruthGetOrDefault, TruthIncompatibleType, TruthSelfEquals, TryFailRefactoring, TryFailThrowable, TryWithResourcesVariable, TypeEqualsChecker, TypeNameShadowing, TypeParameterNaming, TypeParameterQualifier, TypeParameterShadowing, TypeParameterUnusedInFormals, UndefinedEquals, UnescapedEntity, UngroupedOverloads, UnicodeDirectionalityCharacters, UnicodeEscape, UnicodeInCode, UnnecessarilyFullyQualified, UnnecessarilyUsedValue, UnnecessarilyVisible, UnnecessaryAnonymousClass, UnnecessaryAssignment, UnnecessaryAsync, UnnecessaryBoxedAssignment, UnnecessaryBoxedVariable, UnnecessaryCheckNotNull, UnnecessaryDefaultInEnumSwitch, UnnecessaryFinal, UnnecessaryLambda, UnnecessaryLongToIntConversion, UnnecessaryMethodInvocationMatcher, UnnecessaryMethodReference, UnnecessaryOptionalGet, UnnecessaryParentheses, UnnecessarySetDefault, UnnecessaryStaticImport, UnnecessaryStringBuilder, UnnecessaryTestMethodPrefix, UnnecessaryTypeArgument, UnrecognisedJavadocTag, UnsafeFinalization, UnsafeLocaleUsage, UnsafeReflectiveConstructionCast, UnsafeWildcard, UnsynchronizedOverridesSynchronized, UnusedAnonymousClass, UnusedCollectionModifiedInPlace, UnusedException, UnusedLabel, UnusedMethod, UnusedNestedClass, UnusedTypeParameter, UnusedVariable, URLEqualsHashCode, UrlInSee, UseBinds, UseCorrectAssertInTests, UsingJsr305CheckReturnValue, Validator, VarChecker, VariableNameSameAsType, Varifier, VarTypeName, VoidMissingNullable, WaitNotInLoop, WakelockReleasedDangerously, WildcardImport, WithSignatureDiscouraged, WrongOneof, XorPower, YodaCondition, ZoneIdOfZ

public abstract class BugChecker extends Object implements Suppressible, Serializable
A base class for implementing bug checkers. The BugChecker supplies a Scanner implementation for this checker, making it easy to use a single checker. Subclasses should also implement one or more of the *Matcher interfaces in this class to declare which tree node types to match against.
Author:
Colin Decker, Eddie Aftandilian (eaftan@google.com)
See Also:
  • Constructor Details

    • BugChecker

      public BugChecker()
  • Method Details

    • describeMatch

      @CheckReturnValue public Description describeMatch(com.sun.source.tree.Tree node, Fix fix)
      Helper to create a Description for the common case where there is a fix.
    • describeMatch

      @CheckReturnValue public Description describeMatch(com.sun.tools.javac.tree.JCTree node, Fix fix)
      Helper to create a Description for the common case where there is a fix.
    • describeMatch

      @CheckReturnValue public Description describeMatch(com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition position, Fix fix)
      Helper to create a Description for the common case where there is a fix.
    • describeMatch

      @CheckReturnValue public Description describeMatch(com.sun.source.tree.Tree node)
      Helper to create a Description for the common case where there is no fix.
    • describeMatch

      @CheckReturnValue public Description describeMatch(com.sun.tools.javac.tree.JCTree node)
      Helper to create a Description for the common case where there is no fix.
    • describeMatch

      @CheckReturnValue public Description describeMatch(com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition position)
      Helper to create a Description for the common case where there is no fix.
    • buildDescription

      @CheckReturnValue public Description.Builder buildDescription(com.sun.source.tree.Tree node)
      Returns a Description builder, which allows you to customize the diagnostic with a custom message or multiple fixes.
    • buildDescription

      @CheckReturnValue public Description.Builder buildDescription(com.sun.tools.javac.util.JCDiagnostic.DiagnosticPosition position)
      Returns a Description builder, which allows you to customize the diagnostic with a custom message or multiple fixes.
    • buildDescription

      @CheckReturnValue public Description.Builder buildDescription(com.sun.tools.javac.tree.JCTree tree)
      Returns a Description builder, which allows you to customize the diagnostic with a custom message or multiple fixes.
    • canonicalName

      public String canonicalName()
      Description copied from interface: Suppressible
      The canonical name of the check.
      Specified by:
      canonicalName in interface Suppressible
    • allNames

      public Set<String> allNames()
      Description copied from interface: Suppressible
      Returns all of the name strings that this checker should respect as part of a @SuppressWarnings annotation.
      Specified by:
      allNames in interface Suppressible
    • message

      public String message()
    • defaultSeverity

      public BugPattern.SeverityLevel defaultSeverity()
    • linkUrl

      public String linkUrl()
    • supportsSuppressWarnings

      public boolean supportsSuppressWarnings()
      Description copied from interface: Suppressible
      Returns true if this checker can be suppressed using @SuppressWarnings.
      Specified by:
      supportsSuppressWarnings in interface Suppressible
    • disableable

      public boolean disableable()
    • customSuppressionAnnotations

      public Set<Class<? extends Annotation>> customSuppressionAnnotations()
      Description copied from interface: Suppressible
      Returns the custom suppression annotations for this checker, if custom suppression is used.
      Specified by:
      customSuppressionAnnotations in interface Suppressible
    • suppressedByAnyOf

      public boolean suppressedByAnyOf(Set<com.sun.tools.javac.util.Name> annotations, VisitorState s)
      Specified by:
      suppressedByAnyOf in interface Suppressible
    • isSuppressed

      @Deprecated public boolean isSuppressed(com.sun.source.tree.Tree tree)
      Deprecated.
    • isSuppressed

      @Deprecated public boolean isSuppressed(com.sun.tools.javac.code.Symbol symbol)
      Deprecated.
    • isSuppressed

      public boolean isSuppressed(com.sun.source.tree.Tree tree, VisitorState state)
      Returns true if the given tree is annotated with a @SuppressWarnings that disables this bug checker.
    • isSuppressed

      public boolean isSuppressed(com.sun.tools.javac.code.Symbol sym, VisitorState state)
      Returns true if the given symbol is annotated with a @SuppressWarnings or other annotation that disables this bug checker.
    • suppressedRegions

      public com.google.common.collect.ImmutableRangeSet<Integer> suppressedRegions(VisitorState state)
      Computes a RangeSet of code regions which are suppressed by this bug checker.
    • equals

      public boolean equals(Object obj)
      Overrides:
      equals in class Object
    • hashCode

      public int hashCode()
      Overrides:
      hashCode in class Object