diff options
-rwxr-xr-x | tools/warn.py | 1072 |
1 files changed, 993 insertions, 79 deletions
diff --git a/tools/warn.py b/tools/warn.py index 135cd51630..a4a9e16bb9 100755 --- a/tools/warn.py +++ b/tools/warn.py @@ -312,87 +312,1001 @@ warnpatterns = [ 'description':'Java: Unchecked conversion', 'patterns':[r".*: warning: \[unchecked\] unchecked conversion"] }, - # Warnings from error prone. - { 'category':'java', 'severity':severity.LOW, 'members':[], 'option':'', - 'description':'Java: Long literal suffix', - 'patterns':[r".*: warning: \[LongLiteralLowerCaseSuffix\] Prefer 'L' to 'l' for the suffix to long literal"] }, - { 'category':'java', 'severity':severity.LOW, 'members':[], 'option':'', - 'description':'Java: Missing @Deprecated', - 'patterns':[r".*: warning: \[DepAnn\] Deprecated item is not annotated with @Deprecated"] }, - { 'category':'java', 'severity':severity.LOW, 'members':[], 'option':'', - 'description':'Java: Use of deprecated member', - 'patterns':[r".*: warning: \[deprecation\] .+ in .+ has been deprecated"] }, - { 'category':'java', 'severity':severity.LOW, 'members':[], 'option':'', - 'description':'Java: Missing hashCode method', - 'patterns':[r".*: warning: \[EqualsHashCode\] Classes that override equals should also override hashCode."] }, - { 'category':'java', 'severity':severity.LOW, 'members':[], 'option':'', - 'description':'Java: Hashtable contains is a legacy method', - 'patterns':[r".*: warning: \[HashtableContains\] contains\(\) is a legacy method that is equivalent to containsValue\(\)"] }, - { 'category':'java', 'severity':severity.LOW, 'members':[], 'option':'', - 'description':'Java: Type parameter used only for return type', - 'patterns':[r".*: warning: \[TypeParameterUnusedInFormals\] Declaring a type parameter that is only used in the return type is a misuse of generics: operations on the type parameter are unchecked, it hides unsafe casts at invocations of the method, and it interacts badly with method overload resolution."] }, + # Warnings from Error Prone. + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': 'Java: Use of deprecated member', + 'patterns': [r'.*: warning: \[deprecation\] .+']}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': 'Java: Unchecked conversion', + 'patterns': [r'.*: warning: \[unchecked\] .+']}, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: reference equality used on arrays', - 'patterns':[r".*: warning: \[ArrayEquals\] Reference equality used to compare arrays"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: hashcode used on array', - 'patterns':[r".*: warning: \[ArrayHashCode\] hashcode method on array does not hash array contents"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: toString used on an array', - 'patterns':[r".*: warning: \[ArrayToStringConcatenation\] Implicit toString used on an array \(String \+ Array\)", - r".*: warning: \[ArrayToString\] Calling toString on an array does not provide useful information"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Exception created but not thrown', - 'patterns':[r".*: warning: \[DeadException\] Exception created but not thrown"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Return or throw from a finally', - 'patterns':[r".*: warning: \[Finally\] If you return or throw from a finally, then values returned or thrown from the try-catch block will be ignored. Consider using try-with-resources instead."] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Erroneous use of @GuardedBy', - 'patterns':[r".*: warning: \[GuardedByChecker\] This access should be guarded by '.+'; instead found: '.+'", - r".*: warning: \[GuardedByChecker\] This access should be guarded by '.+', which is not currently held"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Mislabeled Android string', - 'patterns':[r".*: warning: \[MislabeledAndroidString\] .+ is not \".+\" but \".+\"; prefer .+ for clarity"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Missing cases in enum switch', - 'patterns':[r".*: warning: \[MissingCasesInEnumSwitch\] Non-exhaustive switch, expected cases for: .+"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Multiple top-level classes (inhibits bug analysis)', - 'patterns':[r".*: warning: \[MultipleTopLevelClasses\] Expected at most one top-level class declaration, instead found: .+"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: equals method doesn\'t override Object.equals', - 'patterns':[r".*: warning: \[NonOverridingEquals\] equals method doesn't override Object\.equals.*"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Update of a volatile variable is non-atomic', - 'patterns':[r".*: warning: \[NonAtomicVolatileUpdate\] This update of a volatile variable is non-atomic"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Return value ignored', - 'patterns':[r".*: warning: \[ReturnValueIgnored\] Return value of this method must be used", - r".*: warning: \[RectIntersectReturnValueIgnored\] Return value of android.graphics.Rect.intersect\(\) must be checked"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Static variable accessed from an object instance', - 'patterns':[r".*: warning: \[StaticAccessedFromInstance\] Static (method|variable) .+ should not be accessed from an object instance; instead use .+"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Static guarded by instance', - 'patterns':[r".*: warning: \[StaticGuardedByInstance\] Write to static variable should not be guarded by instance lock '.+'"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: String reference equality', - 'patterns':[r".*: warning: \[StringEquality\] String comparison using reference equality instead of value equality"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Synchronization on non-final field', - 'patterns':[r".*: warning: \[SynchronizeOnNonFinalField\] Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects."] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Catch masks fail or assert', - 'patterns':[r".*: warning: \[TryFailThrowable\] Catching Throwable/Error masks failures from fail\(\) or assert\*\(\) in the try block"] }, - { 'category':'java', 'severity':severity.MEDIUM, 'members':[], 'option':'', - 'description':'Java: Wait not in a loop', - 'patterns':[r".*: warning: \[WaitNotInLoop\] Because of spurious wakeups, a?wait.*\(.*\) must always be called in a loop"] }, + # Warnings from Error Prone (auto generated list). + {'category': 'java', + 'severity': severity.LOW, + 'members': [], + 'option': '', + 'description': + 'Java: Deprecated item is not annotated with @Deprecated', + 'patterns': [r".*: warning: \[DepAnn\] .+"]}, + {'category': 'java', + 'severity': severity.LOW, + 'members': [], + 'option': '', + 'description': + 'Java: Fallthrough warning suppression has no effect if warning is suppressed', + 'patterns': [r".*: warning: \[FallthroughSuppression\] .+"]}, + {'category': 'java', + 'severity': severity.LOW, + 'members': [], + 'option': '', + 'description': + 'Java: Prefer \'L\' to \'l\' for the suffix to long literals', + 'patterns': [r".*: warning: \[LongLiteralLowerCaseSuffix\] .+"]}, + {'category': 'java', + 'severity': severity.LOW, + 'members': [], + 'option': '', + 'description': + 'Java: @Binds is a more efficient and declaritive mechanism for delegating a binding.', + 'patterns': [r".*: warning: \[UseBinds\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Assertions may be disabled at runtime and do not guarantee that execution will halt here; consider throwing an exception instead', + 'patterns': [r".*: warning: \[AssertFalse\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Classes that implement Annotation must override equals and hashCode. Consider using AutoAnnotation instead of implementing Annotation by hand.', + 'patterns': [r".*: warning: \[BadAnnotationImplementation\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: BigDecimal(double) and BigDecimal.valueOf(double) may lose precision, prefer BigDecimal(String) or BigDecimal(long)', + 'patterns': [r".*: warning: \[BigDecimalLiteralDouble\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Mockito cannot mock final classes', + 'patterns': [r".*: warning: \[CannotMockFinalClass\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: This code, which counts elements using a loop, can be replaced by a simpler library method', + 'patterns': [r".*: warning: \[ElementsCountedInLoop\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Empty top-level type declaration', + 'patterns': [r".*: warning: \[EmptyTopLevelDeclaration\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Classes that override equals should also override hashCode.', + 'patterns': [r".*: warning: \[EqualsHashCode\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: An equality test between objects with incompatible types always returns false', + 'patterns': [r".*: warning: \[EqualsIncompatibleType\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: If you return or throw from a finally, then values returned or thrown from the try-catch block will be ignored. Consider using try-with-resources instead.', + 'patterns': [r".*: warning: \[Finally\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: This annotation has incompatible modifiers as specified by its @IncompatibleModifiers annotation', + 'patterns': [r".*: warning: \[IncompatibleModifiers\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Class should not implement both `Iterable` and `Iterator`', + 'patterns': [r".*: warning: \[IterableAndIterator\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Floating-point comparison without error tolerance', + 'patterns': [r".*: warning: \[JUnit3FloatingPointComparisonWithoutDelta\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Test class inherits from JUnit 3\'s TestCase but has JUnit 4 @Test annotations.', + 'patterns': [r".*: warning: \[JUnitAmbiguousTestClass\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Enum switch statement is missing cases', + 'patterns': [r".*: warning: \[MissingCasesInEnumSwitch\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Not calling fail() when expecting an exception masks bugs', + 'patterns': [r".*: warning: \[MissingFail\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: method overrides method in supertype; expected @Override', + 'patterns': [r".*: warning: \[MissingOverride\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Source files should not contain multiple top-level class declarations', + 'patterns': [r".*: warning: \[MultipleTopLevelClasses\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: This update of a volatile variable is non-atomic', + 'patterns': [r".*: warning: \[NonAtomicVolatileUpdate\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Static import of member uses non-canonical name', + 'patterns': [r".*: warning: \[NonCanonicalStaticMemberImport\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: equals method doesn\'t override Object.equals', + 'patterns': [r".*: warning: \[NonOverridingEquals\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Constructors should not be annotated with @Nullable since they cannot return null', + 'patterns': [r".*: warning: \[NullableConstructor\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: @Nullable should not be used for primitive types since they cannot be null', + 'patterns': [r".*: warning: \[NullablePrimitive\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: void-returning methods should not be annotated with @Nullable, since they cannot return null', + 'patterns': [r".*: warning: \[NullableVoid\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Package names should match the directory they are declared in', + 'patterns': [r".*: warning: \[PackageLocation\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Second argument to Preconditions.* is a call to String.format(), which can be unwrapped', + 'patterns': [r".*: warning: \[PreconditionsErrorMessageEagerEvaluation\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Preconditions only accepts the %s placeholder in error message strings', + 'patterns': [r".*: warning: \[PreconditionsInvalidPlaceholder\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Passing a primitive array to a varargs method is usually wrong', + 'patterns': [r".*: warning: \[PrimitiveArrayPassedToVarargsMethod\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Protobuf fields cannot be null, so this check is redundant', + 'patterns': [r".*: warning: \[ProtoFieldPreconditionsCheckNotNull\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: This annotation is missing required modifiers as specified by its @RequiredModifiers annotation', + 'patterns': [r".*: warning: \[RequiredModifiers\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: A static variable or method should not be accessed from an object instance', + 'patterns': [r".*: warning: \[StaticAccessedFromInstance\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: String comparison using reference equality instead of value equality', + 'patterns': [r".*: warning: \[StringEquality\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Declaring a type parameter that is only used in the return type is a misuse of generics: operations on the type parameter are unchecked, it hides unsafe casts at invocations of the method, and it interacts badly with method overload resolution.', + 'patterns': [r".*: warning: \[TypeParameterUnusedInFormals\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Using static imports for types is unnecessary', + 'patterns': [r".*: warning: \[UnnecessaryStaticImport\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Unsynchronized method overrides a synchronized method.', + 'patterns': [r".*: warning: \[UnsynchronizedOverridesSynchronized\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Non-constant variable missing @Var annotation', + 'patterns': [r".*: warning: \[Var\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Because of spurious wakeups, Object.wait() and Condition.await() must always be called in a loop', + 'patterns': [r".*: warning: \[WaitNotInLoop\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Subclasses of Fragment must be instantiable via Class#newInstance(): the class must be public, static and have a public nullary constructor', + 'patterns': [r".*: warning: \[FragmentNotInstantiable\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Hardcoded reference to /sdcard', + 'patterns': [r".*: warning: \[HardCodedSdCardPath\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Incompatible type as argument to Object-accepting Java collections method', + 'patterns': [r".*: warning: \[CollectionIncompatibleType\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: @AssistedInject and @Inject should not be used on different constructors in the same class.', + 'patterns': [r".*: warning: \[AssistedInjectAndInjectOnConstructors\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Although Guice allows injecting final fields, doing so is not recommended because the injected value may not be visible to other threads.', + 'patterns': [r".*: warning: \[GuiceInjectOnFinalField\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: This method is not annotated with @Inject, but it overrides a method that is annotated with @com.google.inject.Inject. Guice will inject this method, and it is recommended to annotate it explicitly.', + 'patterns': [r".*: warning: \[OverridesGuiceInjectableMethod\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Double-checked locking on non-volatile fields is unsafe', + 'patterns': [r".*: warning: \[DoubleCheckedLocking\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Writes to static fields should not be guarded by instance locks', + 'patterns': [r".*: warning: \[StaticGuardedByInstance\] .+"]}, + {'category': 'java', + 'severity': severity.MEDIUM, + 'members': [], + 'option': '', + 'description': + 'Java: Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects.', + 'patterns': [r".*: warning: \[SynchronizeOnNonFinalField\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Reference equality used to compare arrays', + 'patterns': [r".*: warning: \[ArrayEquals\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: hashcode method on array does not hash array contents', + 'patterns': [r".*: warning: \[ArrayHashCode\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Calling toString on an array does not provide useful information', + 'patterns': [r".*: warning: \[ArrayToString.*\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Arrays.asList does not autobox primitive arrays, as one might expect.', + 'patterns': [r".*: warning: \[ArraysAsListPrimitiveArray\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: AsyncCallable should not return a null Future, only a Future whose result is null.', + 'patterns': [r".*: warning: \[AsyncCallableReturnsNull\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: AsyncFunction should not return a null Future, only a Future whose result is null.', + 'patterns': [r".*: warning: \[AsyncFunctionReturnsNull\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Possible sign flip from narrowing conversion', + 'patterns': [r".*: warning: \[BadComparable\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Shift by an amount that is out of range', + 'patterns': [r".*: warning: \[BadShiftAmount\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: valueOf provides better time and space performance', + 'patterns': [r".*: warning: \[BoxedPrimitiveConstructor\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: The called constructor accepts a parameter with the same name and type as one of its caller\'s parameters, but its caller doesn\'t pass that parameter to it. It\'s likely that it was intended to.', + 'patterns': [r".*: warning: \[ChainingConstructorIgnoresParameter\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Ignored return value of method that is annotated with @CheckReturnValue', + 'patterns': [r".*: warning: \[CheckReturnValue\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Inner class is non-static but does not reference enclosing class', + 'patterns': [r".*: warning: \[ClassCanBeStatic\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: The source file name should match the name of the top-level class it contains', + 'patterns': [r".*: warning: \[ClassName\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: This comparison method violates the contract', + 'patterns': [r".*: warning: \[ComparisonContractViolated\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Comparison to value that is out of range for the compared type', + 'patterns': [r".*: warning: \[ComparisonOutOfRange\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Non-compile-time constant expression passed to parameter with @CompileTimeConstant type annotation.', + 'patterns': [r".*: warning: \[CompileTimeConstant\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Exception created but not thrown', + 'patterns': [r".*: warning: \[DeadException\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Division by integer literal zero', + 'patterns': [r".*: warning: \[DivZero\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Empty statement after if', + 'patterns': [r".*: warning: \[EmptyIf\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: == NaN always returns false; use the isNaN methods instead', + 'patterns': [r".*: warning: \[EqualsNaN\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Method annotated @ForOverride must be protected or package-private and only invoked from declaring class', + 'patterns': [r".*: warning: \[ForOverride\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Futures.getChecked requires a checked exception type with a standard constructor.', + 'patterns': [r".*: warning: \[FuturesGetCheckedIllegalExceptionType\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Calling getClass() on an object of type Class returns the Class object for java.lang.Class; you probably meant to operate on the object directly', + 'patterns': [r".*: warning: \[GetClassOnClass\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: An object is tested for equality to itself using Guava Libraries', + 'patterns': [r".*: warning: \[GuavaSelfEquals\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: contains() is a legacy method that is equivalent to containsValue()', + 'patterns': [r".*: warning: \[HashtableContains\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Cipher.getInstance() is invoked using either the default settings or ECB mode', + 'patterns': [r".*: warning: \[InsecureCipherMode\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Invalid syntax used for a regular expression', + 'patterns': [r".*: warning: \[InvalidPatternSyntax\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: The argument to Class#isInstance(Object) should not be a Class', + 'patterns': [r".*: warning: \[IsInstanceOfClass\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: jMock tests must have a @RunWith(JMock.class) annotation, or the Mockery field must have a @Rule JUnit annotation', + 'patterns': [r".*: warning: \[JMockTestWithoutRunWithOrRuleAnnotation\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Test method will not be run; please prefix name with "test"', + 'patterns': [r".*: warning: \[JUnit3TestNotRun\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: setUp() method will not be run; Please add a @Before annotation', + 'patterns': [r".*: warning: \[JUnit4SetUpNotRun\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: tearDown() method will not be run; Please add an @After annotation', + 'patterns': [r".*: warning: \[JUnit4TearDownNotRun\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Test method will not be run; please add @Test annotation', + 'patterns': [r".*: warning: \[JUnit4TestNotRun\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Printf-like format string does not match its arguments', + 'patterns': [r".*: warning: \[MalformedFormatString\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Use of "YYYY" (week year) in a date pattern without "ww" (week in year). You probably meant to use "yyyy" (year) instead.', + 'patterns': [r".*: warning: \[MisusedWeekYear\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: A bug in Mockito will cause this test to fail at runtime with a ClassCastException', + 'patterns': [r".*: warning: \[MockitoCast\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Missing method call for verify(mock) here', + 'patterns': [r".*: warning: \[MockitoUsage\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Modifying a collection with itself', + 'patterns': [r".*: warning: \[ModifyingCollectionWithItself\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Compound assignments to bytes, shorts, chars, and floats hide dangerous casts', + 'patterns': [r".*: warning: \[NarrowingCompoundAssignment\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: @NoAllocation was specified on this method, but something was found that would trigger an allocation', + 'patterns': [r".*: warning: \[NoAllocation\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Static import of type uses non-canonical name', + 'patterns': [r".*: warning: \[NonCanonicalStaticImport\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: @CompileTimeConstant parameters should be final', + 'patterns': [r".*: warning: \[NonFinalCompileTimeConstant\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Calling getAnnotation on an annotation that is not retained at runtime.', + 'patterns': [r".*: warning: \[NonRuntimeAnnotation\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Numeric comparison using reference equality instead of value equality', + 'patterns': [r".*: warning: \[NumericEquality\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Comparison using reference equality instead of value equality', + 'patterns': [r".*: warning: \[OptionalEquality\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Varargs doesn\'t agree for overridden method', + 'patterns': [r".*: warning: \[Overrides\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Literal passed as first argument to Preconditions.checkNotNull() can never be null', + 'patterns': [r".*: warning: \[PreconditionsCheckNotNull\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: First argument to `Preconditions.checkNotNull()` is a primitive rather than an object reference', + 'patterns': [r".*: warning: \[PreconditionsCheckNotNullPrimitive\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Protobuf fields cannot be null', + 'patterns': [r".*: warning: \[ProtoFieldNullComparison\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Comparing protobuf fields of type String using reference equality', + 'patterns': [r".*: warning: \[ProtoStringFieldReferenceEquality\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Check for non-whitelisted callers to RestrictedApiChecker.', + 'patterns': [r".*: warning: \[RestrictedApiChecker\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Return value of this method must be used', + 'patterns': [r".*: warning: \[ReturnValueIgnored\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Variable assigned to itself', + 'patterns': [r".*: warning: \[SelfAssignment\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: An object is compared to itself', + 'patterns': [r".*: warning: \[SelfComparision\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Variable compared to itself', + 'patterns': [r".*: warning: \[SelfEquality\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: An object is tested for equality to itself', + 'patterns': [r".*: warning: \[SelfEquals\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Comparison of a size >= 0 is always true, did you intend to check for non-emptiness?', + 'patterns': [r".*: warning: \[SizeGreaterThanOrEqualsZero\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Calling toString on a Stream does not provide useful information', + 'patterns': [r".*: warning: \[StreamToString\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: StringBuilder does not have a char constructor; this invokes the int constructor.', + 'patterns': [r".*: warning: \[StringBuilderInitWithChar\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Suppressing "deprecated" is probably a typo for "deprecation"', + 'patterns': [r".*: warning: \[SuppressWarningsDeprecated\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: throwIfUnchecked(knownCheckedException) is a no-op.', + 'patterns': [r".*: warning: \[ThrowIfUncheckedKnownChecked\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Catching Throwable/Error masks failures from fail() or assert*() in the try block', + 'patterns': [r".*: warning: \[TryFailThrowable\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Type parameter used as type qualifier', + 'patterns': [r".*: warning: \[TypeParameterQualifier\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Non-generic methods should not be invoked with type arguments', + 'patterns': [r".*: warning: \[UnnecessaryTypeArgument\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Instance created but never used', + 'patterns': [r".*: warning: \[UnusedAnonymousClass\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Use of wildcard imports is forbidden', + 'patterns': [r".*: warning: \[WildcardImport\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Method parameter has wrong package', + 'patterns': [r".*: warning: \[ParameterPackage\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Certain resources in `android.R.string` have names that do not match their content', + 'patterns': [r".*: warning: \[MislabeledAndroidString\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Return value of android.graphics.Rect.intersect() must be checked', + 'patterns': [r".*: warning: \[RectIntersectReturnValueIgnored\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Invalid printf-style format string', + 'patterns': [r".*: warning: \[FormatString\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: @AssistedInject and @Inject cannot be used on the same constructor.', + 'patterns': [r".*: warning: \[AssistedInjectAndInjectOnSameConstructor\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Injected constructors cannot be optional nor have binding annotations', + 'patterns': [r".*: warning: \[InjectedConstructorAnnotations\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: The target of a scoping annotation must be set to METHOD and/or TYPE.', + 'patterns': [r".*: warning: \[InjectInvalidTargetingOnScopingAnnotation\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Abstract methods are not injectable with javax.inject.Inject.', + 'patterns': [r".*: warning: \[JavaxInjectOnAbstractMethod\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: @javax.inject.Inject cannot be put on a final field.', + 'patterns': [r".*: warning: \[JavaxInjectOnFinalField\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: A class may not have more than one injectable constructor.', + 'patterns': [r".*: warning: \[MoreThanOneInjectableConstructor\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Using more than one qualifier annotation on the same element is not allowed.', + 'patterns': [r".*: warning: \[InjectMoreThanOneQualifier\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: A class can be annotated with at most one scope annotation', + 'patterns': [r".*: warning: \[InjectMoreThanOneScopeAnnotationOnClass\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Annotations cannot be both Qualifiers/BindingAnnotations and Scopes', + 'patterns': [r".*: warning: \[OverlappingQualifierAndScopeAnnotation\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Scope annotation on an interface or abstact class is not allowed', + 'patterns': [r".*: warning: \[InjectScopeAnnotationOnInterfaceOrAbstractClass\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Scoping and qualifier annotations must have runtime retention.', + 'patterns': [r".*: warning: \[InjectScopeOrQualifierAnnotationRetention\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Dagger @Provides methods may not return null unless annotated with @Nullable', + 'patterns': [r".*: warning: \[DaggerProvidesNull\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Scope annotation on implementation class of AssistedInject factory is not allowed', + 'patterns': [r".*: warning: \[GuiceAssistedInjectScoping\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: A constructor cannot have two @Assisted parameters of the same type unless they are disambiguated with named @Assisted annotations. ', + 'patterns': [r".*: warning: \[GuiceAssistedParameters\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: This method is not annotated with @Inject, but it overrides a method that is annotated with @javax.inject.Inject.', + 'patterns': [r".*: warning: \[OverridesJavaxInjectableMethod\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Checks for unguarded accesses to fields and methods with @GuardedBy annotations', + 'patterns': [r".*: warning: \[GuardedByChecker\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Invalid @GuardedBy expression', + 'patterns': [r".*: warning: \[GuardedByValidator\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: Type declaration annotated with @Immutable is not immutable', + 'patterns': [r".*: warning: \[Immutable\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: This method does not acquire the locks specified by its @LockMethod annotation', + 'patterns': [r".*: warning: \[LockMethodChecker\] .+"]}, + {'category': 'java', + 'severity': severity.HIGH, + 'members': [], + 'option': '', + 'description': + 'Java: This method does not acquire the locks specified by its @UnlockMethod annotation', + 'patterns': [r".*: warning: \[UnlockMethod\] .+"]}, - { 'category':'java', 'severity':severity.UNKNOWN, 'members':[], 'option':'', - 'description':'Java: Unclassified/unrecognized warnings', - 'patterns':[r".*: warning: \[.+\] .+"] }, + {'category': 'java', + 'severity': severity.UNKNOWN, + 'members': [], + 'option': '', + 'description': 'Java: Unclassified/unrecognized warnings', + 'patterns': [r".*: warning: \[.+\] .+"]}, { 'category':'aapt', 'severity':severity.MEDIUM, 'members':[], 'option':'', 'description':'aapt: No default translation', |