# python3
# Copyright (C) 2019 The Android Open Source Project
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

"""Warning patterns for Java compiler tools."""

# pylint:disable=relative-beyond-top-level
from .cpp_warn_patterns import compile_patterns
# pylint:disable=g-importing-member
from .severity import Severity


def java_warn(severity, description, pattern_list):
  return {
      'category': 'Java',
      'severity': severity,
      'description': 'Java: ' + description,
      'patterns': pattern_list
  }


def java_high(description, pattern_list):
  return java_warn(Severity.HIGH, description, pattern_list)


def java_medium(description, pattern_list):
  return java_warn(Severity.MEDIUM, description, pattern_list)


def warn_with_name(name, severity, description=None):
  if description is None:
    description = name
  return java_warn(severity, description,
                   [r'.*\.java:.*: warning: .+ \[' + name + r'\]$',
                    r'.*\.java:.*: warning: \[' + name + r'\] .+'])


def high(name, description=None):
  return warn_with_name(name, Severity.HIGH, description)


def medium(name, description=None):
  return warn_with_name(name, Severity.MEDIUM, description)


def low(name, description=None):
  return warn_with_name(name, Severity.LOW, description)


warn_patterns = [
    # pylint:disable=line-too-long,g-inconsistent-quotes
    # Warnings from Javac
    java_medium('Use of deprecated',
                [r'.*: warning: \[deprecation\] .+',
                 r'.*: warning: \[removal\] .+ has been deprecated and marked for removal$']),
    java_medium('Incompatible SDK implementation',
                [r'.*\.java:.*: warning: @Implementation .+ has .+ not .+ as in the SDK ']),
    medium('unchecked', 'Unchecked conversion'),
    java_medium('No annotation method',
                [r'.*\.class\): warning: Cannot find annotation method .+ in']),
    java_medium('No class/method in SDK ...',
                [r'.*\.java:.*: warning: No such (class|method) .* for SDK']),
    # Warnings generated by Error Prone
    java_medium('Non-ascii characters used, but ascii encoding specified',
                [r".*: warning: unmappable character for encoding ascii"]),
    java_medium('Non-varargs call of varargs method with inexact argument type for last parameter',
                [r".*: warning: non-varargs call of varargs method with inexact argument type for last parameter"]),
    java_medium('Unchecked method invocation',
                [r".*: warning: \[unchecked\] unchecked method invocation: .+ in class .+"]),
    java_medium('Unchecked conversion',
                [r".*: warning: \[unchecked\] unchecked conversion"]),
    java_medium('_ used as an identifier',
                [r".*: warning: '_' used as an identifier"]),
    java_medium('hidden superclass',
                [r".*: warning: .* stripped of .* superclass .* \[HiddenSuperclass\]"]),
    java_high('Use of internal proprietary API',
              [r".*: warning: .* is internal proprietary API and may be removed"]),
    low('BooleanParameter',
        'Use parameter comments to document ambiguous literals'),
    low('ClassNamedLikeTypeParameter',
        'This class\'s name looks like a Type Parameter.'),
    low('ConstantField',
        'Field name is CONSTANT_CASE, but field is not static and final'),
    low('EmptySetMultibindingContributions',
        '@Multibinds is a more efficient and declarative mechanism for ensuring that a set multibinding is present in the graph.'),
    low('ExpectedExceptionRefactoring',
        'Prefer assertThrows to ExpectedException'),
    low('FieldCanBeFinal',
        'This field is only assigned during initialization; consider making it final'),
    low('FieldMissingNullable',
        'Fields that can be null should be annotated @Nullable'),
    low('ImmutableRefactoring',
        'Refactors uses of the JSR 305 @Immutable to Error Prone\'s annotation'),
    low('LambdaFunctionalInterface',
        u'Use Java\'s utility functional interfaces instead of Function\u003cA, B> for primitive types.'),
    low('MethodCanBeStatic',
        'A private method that does not reference the enclosing instance can be static'),
    low('MixedArrayDimensions',
        'C-style array declarations should not be used'),
    low('MultiVariableDeclaration',
        'Variable declarations should declare only one variable'),
    low('MultipleTopLevelClasses',
        'Source files should not contain multiple top-level class declarations'),
    low('MultipleUnaryOperatorsInMethodCall',
        'Avoid having multiple unary operators acting on the same variable in a method call'),
    low('OnNameExpected',
        'OnNameExpected naming style'),
    low('PackageLocation',
        'Package names should match the directory they are declared in'),
    low('ParameterComment',
        'Non-standard parameter comment; prefer `/* paramName= */ arg`'),
    low('ParameterNotNullable',
        'Method parameters that aren\'t checked for null shouldn\'t be annotated @Nullable'),
    low('PrivateConstructorForNoninstantiableModule',
        'Add a private constructor to modules that will not be instantiated by Dagger.'),
    low('PrivateConstructorForUtilityClass',
        'Utility classes (only static members) are not designed to be instantiated and should be made noninstantiable with a default constructor.'),
    low('RemoveUnusedImports',
        'Unused imports'),
    low('ReturnMissingNullable',
        'Methods that can return null should be annotated @Nullable'),
    low('ScopeOnModule',
        'Scopes on modules have no function and will soon be an error.'),
    low('SwitchDefault',
        'The default case of a switch should appear at the end of the last statement group'),
    low('TestExceptionRefactoring',
        'Prefer assertThrows to @Test(expected=...)'),
    low('ThrowsUncheckedException',
        'Unchecked exceptions do not need to be declared in the method signature.'),
    low('TryFailRefactoring',
        'Prefer assertThrows to try/fail'),
    low('TypeParameterNaming',
        'Type parameters must be a single letter with an optional numeric suffix, or an UpperCamelCase name followed by the letter \'T\'.'),
    low('UngroupedOverloads',
        'Constructors and methods with the same name should appear sequentially with no other code in between. Please re-order or re-name methods.'),
    low('UnnecessarySetDefault',
        'Unnecessary call to NullPointerTester#setDefault'),
    low('UnnecessaryStaticImport',
        'Using static imports for types is unnecessary'),
    low('UseBinds',
        '@Binds is a more efficient and declarative mechanism for delegating a binding.'),
    low('WildcardImport',
        'Wildcard imports, static or otherwise, should not be used'),
    medium('AcronymName',
           'AcronymName'),
    medium('AmbiguousMethodReference',
           'Method reference is ambiguous'),
    medium('AnnotateFormatMethod',
           'This method passes a pair of parameters through to String.format, but the enclosing method wasn\'t annotated @FormatMethod. Doing so gives compile-time rather than run-time protection against malformed format strings.'),
    medium('AnnotationPosition',
           'Annotations should be positioned after Javadocs, but before modifiers..'),
    medium('ArgumentSelectionDefectChecker',
           'Arguments are in the wrong order or could be commented for clarity.'),
    medium('ArrayAsKeyOfSetOrMap',
           'Arrays do not override equals() or hashCode, so comparisons will be done on reference equality only. If neither deduplication nor lookup are needed, consider using a List instead. Otherwise, use IdentityHashMap/Set, a Map from a library that handles object arrays, or an Iterable/List of pairs.'),
    medium('AssertEqualsArgumentOrderChecker',
           'Arguments are swapped in assertEquals-like call'),
    medium('AssertFalse',
           'Assertions may be disabled at runtime and do not guarantee that execution will halt here; consider throwing an exception instead'),
    medium('AssertThrowsMultipleStatements',
           'The lambda passed to assertThrows should contain exactly one statement'),
    medium('AssertionFailureIgnored',
           'This assertion throws an AssertionError if it fails, which will be caught by an enclosing try block.'),
    medium('AssistedInjectAndInjectOnConstructors',
           '@AssistedInject and @Inject should not be used on different constructors in the same class.'),
    medium('AutoValueFinalMethods',
           'Make toString(), hashCode() and equals() final in AutoValue classes, so it is clear to readers that AutoValue is not overriding them'),
    medium('BadAnnotationImplementation',
           'Classes that implement Annotation must override equals and hashCode. Consider using AutoAnnotation instead of implementing Annotation by hand.'),
    medium('BadComparable',
           'Possible sign flip from narrowing conversion'),
    medium('BadImport',
           'Importing nested classes/static methods/static fields with commonly-used names can make code harder to read, because it may not be clear from the context exactly which type is being referred to. Qualifying the name with that of the containing class can make the code clearer.'),
    medium('BadInstanceof',
           'instanceof used in a way that is equivalent to a null check.'),
    medium('BigDecimalEquals',
           'BigDecimal#equals has surprising behavior: it also compares scale.'),
    medium('BigDecimalLiteralDouble',
           'new BigDecimal(double) loses precision in this case.'),
    medium('BinderIdentityRestoredDangerously',
           'A call to Binder.clearCallingIdentity() should be followed by Binder.restoreCallingIdentity() in a finally block. Otherwise the wrong Binder identity may be used by subsequent code.'),
    medium('BindingToUnqualifiedCommonType',
           'This code declares a binding for a common value type without a Qualifier annotation.'),
    medium('BoxedPrimitiveConstructor',
           'valueOf or autoboxing provides better time and space performance'),
    medium('ByteBufferBackingArray',
           'ByteBuffer.array() shouldn\'t be called unless ByteBuffer.arrayOffset() is used or if the ByteBuffer was initialized using ByteBuffer.wrap() or ByteBuffer.allocate().'),
    medium('CannotMockFinalClass',
           'Mockito cannot mock final classes'),
    medium('CanonicalDuration',
           'Duration can be expressed more clearly with different units'),
    medium('CatchAndPrintStackTrace',
           'Logging or rethrowing exceptions should usually be preferred to catching and calling printStackTrace'),
    medium('CatchFail',
           'Ignoring exceptions and calling fail() is unnecessary, and makes test output less useful'),
    medium('ClassCanBeStatic',
           'Inner class is non-static but does not reference enclosing class'),
    medium('ClassNewInstance',
           'Class.newInstance() bypasses exception checking; prefer getDeclaredConstructor().newInstance()'),
    medium('CloseableProvides',
           'Providing Closeable resources makes their lifecycle unclear'),
    medium('CollectionToArraySafeParameter',
           'The type of the array parameter of Collection.toArray needs to be compatible with the array type'),
    medium('CollectorShouldNotUseState',
           'Collector.of() should not use state'),
    medium('ComparableAndComparator',
           'Class should not implement both `Comparable` and `Comparator`'),
    medium('ConstructorInvokesOverridable',
           'Constructors should not invoke overridable methods.'),
    medium('ConstructorLeaksThis',
           'Constructors should not pass the \'this\' reference out in method invocations, since the object may not be fully constructed.'),
    medium('DateFormatConstant',
           'DateFormat is not thread-safe, and should not be used as a constant field.'),
    medium('DefaultCharset',
           'Implicit use of the platform default charset, which can result in differing behaviour between JVM executions or incorrect behavior if the encoding of the data source doesn\'t match expectations.'),
    medium('DeprecatedThreadMethods',
           'Avoid deprecated Thread methods; read the method\'s javadoc for details.'),
    medium('DoubleBraceInitialization',
           'Prefer collection factory methods or builders to the double-brace initialization pattern.'),
    medium('DoubleCheckedLocking',
           'Double-checked locking on non-volatile fields is unsafe'),
    medium('EmptyTopLevelDeclaration',
           'Empty top-level type declaration'),
    medium('EqualsBrokenForNull',
           'equals() implementation may throw NullPointerException when given null'),
    medium('EqualsGetClass',
           'Overriding Object#equals in a non-final class by using getClass rather than instanceof breaks substitutability of subclasses.'),
    medium('EqualsHashCode',
           'Classes that override equals should also override hashCode.'),
    medium('EqualsIncompatibleType',
           'An equality test between objects with incompatible types always returns false'),
    medium('EqualsUnsafeCast',
           'The contract of #equals states that it should return false for incompatible types, while this implementation may throw ClassCastException.'),
    medium('EqualsUsingHashCode',
           'Implementing #equals by just comparing hashCodes is fragile. Hashes collide frequently, and this will lead to false positives in #equals.'),
    medium('ExpectedExceptionChecker',
           'Calls to ExpectedException#expect should always be followed by exactly one statement.'),
    medium('ExtendingJUnitAssert',
           'When only using JUnit Assert\'s static methods, you should import statically instead of extending.'),
    medium('FallThrough',
           'Switch case may fall through'),
    medium('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.'),
    medium('FloatCast',
           'Use parentheses to make the precedence explicit'),
    medium('FloatingPointAssertionWithinEpsilon',
           'This fuzzy equality check is using a tolerance less than the gap to the next number. You may want a less restrictive tolerance, or to assert equality.'),
    medium('FloatingPointLiteralPrecision',
           'Floating point literal loses precision'),
    medium('FragmentInjection',
           'Classes extending PreferenceActivity must implement isValidFragment such that it does not unconditionally return true to prevent vulnerability to fragment injection attacks.'),
    medium('FragmentNotInstantiable',
           'Subclasses of Fragment must be instantiable via Class#newInstance(): the class must be public, static and have a public nullary constructor'),
    medium('FunctionalInterfaceClash',
           'Overloads will be ambiguous when passing lambda arguments'),
    medium('FutureReturnValueIgnored',
           'Return value of methods returning Future must be checked. Ignoring returned Futures suppresses exceptions thrown from the code that completes the Future.'),
    medium('GetClassOnEnum',
           'Calling getClass() on an enum may return a subclass of the enum type'),
    medium('HardCodedSdCardPath',
           'Hardcoded reference to /sdcard'),
    medium('HidingField',
           'Hiding fields of superclasses may cause confusion and errors'),
    medium('ImmutableAnnotationChecker',
           'Annotations should always be immutable'),
    medium('ImmutableEnumChecker',
           'Enums should always be immutable'),
    medium('IncompatibleModifiers',
           'This annotation has incompatible modifiers as specified by its @IncompatibleModifiers annotation'),
    medium('InconsistentCapitalization',
           'It is confusing to have a field and a parameter under the same scope that differ only in capitalization.'),
    medium('InconsistentHashCode',
           'Including fields in hashCode which are not compared in equals violates the contract of hashCode.'),
    medium('InconsistentOverloads',
           'The ordering of parameters in overloaded methods should be as consistent as possible (when viewed from left to right)'),
    medium('IncrementInForLoopAndHeader',
           'This for loop increments the same variable in the header and in the body'),
    medium('InjectOnConstructorOfAbstractClass',
           'Constructors on abstract classes are never directly @Injected, only the constructors of their subclasses can be @Inject\'ed.'),
    medium('InputStreamSlowMultibyteRead',
           'Please also override int read(byte[], int, int), otherwise multi-byte reads from this input stream are likely to be slow.'),
    medium('InstanceOfAndCastMatchWrongType',
           'Casting inside an if block should be plausibly consistent with the instanceof type'),
    medium('IntLongMath',
           'Expression of type int may overflow before being assigned to a long'),
    medium('IntentBuilderName',
           'IntentBuilderName'),
    medium('InvalidParam',
           'This @param tag doesn\'t refer to a parameter of the method.'),
    medium('InvalidTag',
           'This tag is invalid.'),
    medium('InvalidThrows',
           'The documented method doesn\'t actually throw this checked exception.'),
    medium('IterableAndIterator',
           'Class should not implement both `Iterable` and `Iterator`'),
    medium('JUnit3FloatingPointComparisonWithoutDelta',
           'Floating-point comparison without error tolerance'),
    medium('JUnit4ClassUsedInJUnit3',
           'Some JUnit4 construct cannot be used in a JUnit3 context. Convert your class to JUnit4 style to use them.'),
    medium('JUnitAmbiguousTestClass',
           'Test class inherits from JUnit 3\'s TestCase but has JUnit 4 @Test annotations.'),
    medium('JavaLangClash',
           'Never reuse class names from java.lang'),
    medium('JdkObsolete',
           'Suggests alternatives to obsolete JDK classes.'),
    medium('LockNotBeforeTry',
           'Calls to Lock#lock should be immediately followed by a try block which releases the lock.'),
    medium('LogicalAssignment',
           'Assignment where a boolean expression was expected; use == if this assignment wasn\'t expected or add parentheses for clarity.'),
    medium('MathAbsoluteRandom',
           'Math.abs does not always give a positive result. Please consider other methods for positive random numbers.'),
    medium('MissingCasesInEnumSwitch',
           'Switches on enum types should either handle all values, or have a default case.'),
    medium('MissingDefault',
           'The Google Java Style Guide requires that each switch statement includes a default statement group, even if it contains no code. (This requirement is lifted for any switch statement that covers all values of an enum.)'),
    medium('MissingFail',
           'Not calling fail() when expecting an exception masks bugs'),
    medium('MissingOverride',
           'method overrides method in supertype; expected @Override'),
    medium('ModifiedButNotUsed',
           'A collection or proto builder was created, but its values were never accessed.'),
    medium('ModifyCollectionInEnhancedForLoop',
           'Modifying a collection while iterating over it in a loop may cause a ConcurrentModificationException to be thrown.'),
    medium('MultipleParallelOrSequentialCalls',
           'Multiple calls to either parallel or sequential are unnecessary and cause confusion.'),
    medium('MutableConstantField',
           'Constant field declarations should use the immutable type (such as ImmutableList) instead of the general collection interface type (such as List)'),
    medium('MutableMethodReturnType',
           'Method return type should use the immutable type (such as ImmutableList) instead of the general collection interface type (such as List)'),
    medium('NarrowingCompoundAssignment',
           'Compound assignments may hide dangerous casts'),
    medium('NestedInstanceOfConditions',
           'Nested instanceOf conditions of disjoint types create blocks of code that never execute'),
    medium('NoFunctionalReturnType',
           'Instead of returning a functional type, return the actual type that the returned function would return and use lambdas at use site.'),
    medium('NonAtomicVolatileUpdate',
           'This update of a volatile variable is non-atomic'),
    medium('NonCanonicalStaticMemberImport',
           'Static import of member uses non-canonical name'),
    medium('NonOverridingEquals',
           'equals method doesn\'t override Object.equals'),
    medium('NotCloseable',
           'Not closeable'),
    medium('NullableConstructor',
           'Constructors should not be annotated with @Nullable since they cannot return null'),
    medium('NullableDereference',
           'Dereference of possibly-null value'),
    medium('NullablePrimitive',
           '@Nullable should not be used for primitive types since they cannot be null'),
    medium('NullableVoid',
           'void-returning methods should not be annotated with @Nullable, since they cannot return null'),
    medium('ObjectToString',
           'Calling toString on Objects that don\'t override toString() doesn\'t provide useful information'),
    medium('ObjectsHashCodePrimitive',
           'Objects.hashCode(Object o) should not be passed a primitive value'),
    medium('OperatorPrecedence',
           'Use grouping parenthesis to make the operator precedence explicit'),
    medium('OptionalNotPresent',
           'One should not call optional.get() inside an if statement that checks !optional.isPresent'),
    medium('OrphanedFormatString',
           'String literal contains format specifiers, but is not passed to a format method'),
    medium('OverrideThrowableToString',
           'To return a custom message with a Throwable class, one should override getMessage() instead of toString() for Throwable.'),
    medium('Overrides',
           'Varargs doesn\'t agree for overridden method'),
    medium('OverridesGuiceInjectableMethod',
           '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.'),
    medium('ParameterName',
           'Detects `/* name= */`-style comments on actual parameters where the name doesn\'t match the formal parameter'),
    medium('PreconditionsInvalidPlaceholder',
           'Preconditions only accepts the %s placeholder in error message strings'),
    medium('PrimitiveArrayPassedToVarargsMethod',
           'Passing a primitive array to a varargs method is usually wrong'),
    medium('ProtoRedundantSet',
           'A field on a protocol buffer was set twice in the same chained expression.'),
    medium('ProtosAsKeyOfSetOrMap',
           'Protos should not be used as a key to a map, in a set, or in a contains method on a descendant of a collection. Protos have non deterministic ordering and proto equality is deep, which is a performance issue.'),
    medium('ProvidesFix',
           'BugChecker has incorrect ProvidesFix tag, please update'),
    medium('QualifierOrScopeOnInjectMethod',
           'Qualifiers/Scope annotations on @Inject methods don\'t have any effect. Move the qualifier annotation to the binding location.'),
    medium('QualifierWithTypeUse',
           'Injection frameworks currently don\'t understand Qualifiers in TYPE_PARAMETER or TYPE_USE contexts.'),
    medium('ReachabilityFenceUsage',
           'reachabilityFence should always be called inside a finally block'),
    medium('RedundantThrows',
           'Thrown exception is a subtype of another'),
    medium('ReferenceEquality',
           'Comparison using reference equality instead of value equality'),
    medium('RequiredModifiers',
           'This annotation is missing required modifiers as specified by its @RequiredModifiers annotation'),
    medium('ReturnFromVoid',
           'Void methods should not have a @return tag.'),
    medium('SamShouldBeLast',
           'SAM-compatible parameters should be last'),
    medium('ShortCircuitBoolean',
           u'Prefer the short-circuiting boolean operators \u0026\u0026 and || to \u0026 and |.'),
    medium('StaticGuardedByInstance',
           'Writes to static fields should not be guarded by instance locks'),
    medium('StaticQualifiedUsingExpression',
           'A static variable or method should be qualified with a class name, not expression'),
    medium('StreamResourceLeak',
           'Streams that encapsulate a closeable resource should be closed using try-with-resources'),
    medium('StringEquality',
           'String comparison using reference equality instead of value equality'),
    medium('StringSplitter',
           'String.split(String) has surprising behavior'),
    medium('SwigMemoryLeak',
           'SWIG generated code that can\'t call a C++ destructor will leak memory'),
    medium('SynchronizeOnNonFinalField',
           'Synchronizing on non-final fields is not safe: if the field is ever updated, different threads may end up locking on different objects.'),
    medium('SystemExitOutsideMain',
           'Code that contains System.exit() is untestable.'),
    medium('TestExceptionChecker',
           'Using @Test(expected=...) is discouraged, since the test will pass if *any* statement in the test method throws the expected exception'),
    medium('ThreadJoinLoop',
           'Thread.join needs to be surrounded by a loop until it succeeds, as in Uninterruptibles.joinUninterruptibly.'),
    medium('ThreadLocalUsage',
           'ThreadLocals should be stored in static fields'),
    medium('ThreadPriorityCheck',
           'Relying on the thread scheduler is discouraged; see Effective Java Item 72 (2nd edition) / 84 (3rd edition).'),
    medium('ThreeLetterTimeZoneID',
           'Three-letter time zone identifiers are deprecated, may be ambiguous, and might not do what you intend; the full IANA time zone ID should be used instead.'),
    medium('ToStringReturnsNull',
           'An implementation of Object.toString() should never return null.'),
    medium('TruthAssertExpected',
           'The actual and expected values appear to be swapped, which results in poor assertion failure messages. The actual value should come first.'),
    medium('TruthConstantAsserts',
           'Truth Library assert is called on a constant.'),
    medium('TruthIncompatibleType',
           'Argument is not compatible with the subject\'s type.'),
    medium('TypeNameShadowing',
           'Type parameter declaration shadows another named type'),
    medium('TypeParameterShadowing',
           'Type parameter declaration overrides another type parameter already declared'),
    medium('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.'),
    medium('URLEqualsHashCode',
           'Avoid hash-based containers of java.net.URL--the containers rely on equals() and hashCode(), which cause java.net.URL to make blocking internet connections.'),
    medium('UndefinedEquals',
           'Collection, Iterable, Multimap, and Queue do not have well-defined equals behavior'),
    medium('UnnecessaryDefaultInEnumSwitch',
           'Switch handles all enum values: an explicit default case is unnecessary and defeats error checking for non-exhaustive switches.'),
    medium('UnnecessaryParentheses',
           'Unnecessary use of grouping parentheses'),
    medium('UnsafeFinalization',
           'Finalizer may run before native code finishes execution'),
    medium('UnsafeReflectiveConstructionCast',
           'Prefer `asSubclass` instead of casting the result of `newInstance`, to detect classes of incorrect type before invoking their constructors.This way, if the class is of the incorrect type,it will throw an exception before invoking its constructor.'),
    medium('UnsynchronizedOverridesSynchronized',
           'Unsynchronized method overrides a synchronized method.'),
    medium('Unused',
           'Unused.'),
    medium('UnusedException',
           'This catch block catches an exception and re-throws another, but swallows the caught exception rather than setting it as a cause. This can make debugging harder.'),
    medium('UseCorrectAssertInTests',
           'Java assert is used in test. For testing purposes Assert.* matchers should be used.'),
    medium('UserHandle',
           'UserHandle'),
    medium('UserHandleName',
           'UserHandleName'),
    medium('Var',
           'Non-constant variable missing @Var annotation'),
    medium('VariableNameSameAsType',
           'variableName and type with the same name would refer to the static field instead of the class'),
    medium('WaitNotInLoop',
           'Because of spurious wakeups, Object.wait() and Condition.await() must always be called in a loop'),
    medium('WakelockReleasedDangerously',
           'A wakelock acquired with a timeout may be released by the system before calling `release`, even after checking `isHeld()`. If so, it will throw a RuntimeException. Please wrap in a try/catch block.'),
    java_medium('Found raw type',
                [r'.*\.java:.*: warning: \[rawtypes\] found raw type']),
    java_medium('Redundant cast',
                [r'.*\.java:.*: warning: \[cast\] redundant cast to']),
    java_medium('Static method should be qualified',
                [r'.*\.java:.*: warning: \[static\] static method should be qualified']),
    medium('AbstractInner'),
    medium('CallbackName'),
    medium('ExecutorRegistration'),
    medium('JavaApiUsedByMainlineModule'),
    medium('ListenerLast'),
    medium('MissingBuildMethod'),
    medium('NoByteOrShort'),
    medium('OverlappingConstants'),
    medium('SetterReturnsThis'),
    medium('Typo'),
    medium('UseIcu'),
    high('AndroidInjectionBeforeSuper',
         'AndroidInjection.inject() should always be invoked before calling super.lifecycleMethod()'),
    high('AndroidJdkLibsChecker',
         'Use of class, field, or method that is not compatible with legacy Android devices'),
    high('ArrayEquals',
         'Reference equality used to compare arrays'),
    high('ArrayFillIncompatibleType',
         'Arrays.fill(Object[], Object) called with incompatible types.'),
    high('ArrayHashCode',
         'hashcode method on array does not hash array contents'),
    high('ArrayReturn',
         'ArrayReturn'),
    high('ArrayToString',
         'Calling toString on an array does not provide useful information'),
    high('ArraysAsListPrimitiveArray',
         'Arrays.asList does not autobox primitive arrays, as one might expect.'),
    high('AssistedInjectAndInjectOnSameConstructor',
         '@AssistedInject and @Inject cannot be used on the same constructor.'),
    high('AsyncCallableReturnsNull',
         'AsyncCallable should not return a null Future, only a Future whose result is null.'),
    high('AsyncFunctionReturnsNull',
         'AsyncFunction should not return a null Future, only a Future whose result is null.'),
    high('AutoFactoryAtInject',
         '@AutoFactory and @Inject should not be used in the same type.'),
    high('AutoValueConstructorOrderChecker',
         'Arguments to AutoValue constructor are in the wrong order'),
    high('BadShiftAmount',
         'Shift by an amount that is out of range'),
    high('BundleDeserializationCast',
         'Object serialized in Bundle may have been flattened to base type.'),
    high('ChainingConstructorIgnoresParameter',
         '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.'),
    high('CheckReturnValue',
         'Ignored return value of method that is annotated with @CheckReturnValue'),
    high('ClassName',
         'The source file name should match the name of the top-level class it contains'),
    high('CollectionIncompatibleType',
         'Incompatible type as argument to Object-accepting Java collections method'),
    high('ComparableType',
         u'Implementing \'Comparable\u003cT>\' where T is not compatible with the implementing class.'),
    high('ComparingThisWithNull',
         'this == null is always false, this != null is always true'),
    high('ComparisonContractViolated',
         'This comparison method violates the contract'),
    high('ComparisonOutOfRange',
         'Comparison to value that is out of range for the compared type'),
    high('CompatibleWithAnnotationMisuse',
         '@CompatibleWith\'s value is not a type argument.'),
    high('CompileTimeConstant',
         'Non-compile-time constant expression passed to parameter with @CompileTimeConstant type annotation.'),
    high('ComplexBooleanConstant',
         'Non-trivial compile time constant boolean expressions shouldn\'t be used.'),
    high('ConditionalExpressionNumericPromotion',
         'A conditional expression with numeric operands of differing types will perform binary numeric promotion of the operands; when these operands are of reference types, the expression\'s result may not be of the expected type.'),
    high('ConstantOverflow',
         'Compile-time constant expression overflows'),
    high('DaggerProvidesNull',
         'Dagger @Provides methods may not return null unless annotated with @Nullable'),
    high('DeadException',
         'Exception created but not thrown'),
    high('DeadThread',
         'Thread created but not started'),
    java_high('Deprecated item is not annotated with @Deprecated',
              [r".*\.java:.*: warning: \[.*\] .+ is not annotated with @Deprecated$"]),
    high('DivZero',
         'Division by integer literal zero'),
    high('DoNotCall',
         'This method should not be called.'),
    high('EmptyIf',
         'Empty statement after if'),
    high('EqualsNaN',
         '== NaN always returns false; use the isNaN methods instead'),
    high('EqualsReference',
         '== must be used in equals method to check equality to itself or an infinite loop will occur.'),
    high('EqualsWrongThing',
         'Comparing different pairs of fields/getters in an equals implementation is probably a mistake.'),
    high('ForOverride',
         'Method annotated @ForOverride must be protected or package-private and only invoked from declaring class, or from an override of the method'),
    high('FormatString',
         'Invalid printf-style format string'),
    high('FormatStringAnnotation',
         'Invalid format string passed to formatting method.'),
    high('FunctionalInterfaceMethodChanged',
         'Casting a lambda to this @FunctionalInterface can cause a behavior change from casting to a functional superinterface, which is surprising to users.  Prefer decorator methods to this surprising behavior.'),
    high('FuturesGetCheckedIllegalExceptionType',
         'Futures.getChecked requires a checked exception type with a standard constructor.'),
    high('FuzzyEqualsShouldNotBeUsedInEqualsMethod',
         'DoubleMath.fuzzyEquals should never be used in an Object.equals() method'),
    high('GetClassOnAnnotation',
         'Calling getClass() on an annotation may return a proxy class'),
    high('GetClassOnClass',
         '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'),
    high('GuardedBy',
         'Checks for unguarded accesses to fields and methods with @GuardedBy annotations'),
    high('GuiceAssistedInjectScoping',
         'Scope annotation on implementation class of AssistedInject factory is not allowed'),
    high('GuiceAssistedParameters',
         'A constructor cannot have two @Assisted parameters of the same type unless they are disambiguated with named @Assisted annotations.'),
    high('GuiceInjectOnFinalField',
         'Although Guice allows injecting final fields, doing so is disallowed because the injected value may not be visible to other threads.'),
    high('HashtableContains',
         'contains() is a legacy method that is equivalent to containsValue()'),
    high('IdentityBinaryExpression',
         'A binary expression where both operands are the same is usually incorrect.'),
    high('Immutable',
         'Type declaration annotated with @Immutable is not immutable'),
    high('ImmutableModification',
         'Modifying an immutable collection is guaranteed to throw an exception and leave the collection unmodified'),
    high('IncompatibleArgumentType',
         'Passing argument to a generic method with an incompatible type.'),
    high('IndexOfChar',
         'The first argument to indexOf is a Unicode code point, and the second is the index to start the search from'),
    high('InexactVarargsConditional',
         'Conditional expression in varargs call contains array and non-array arguments'),
    high('InfiniteRecursion',
         'This method always recurses, and will cause a StackOverflowError'),
    high('InjectInvalidTargetingOnScopingAnnotation',
         'A scoping annotation\'s Target should include TYPE and METHOD.'),
    high('InjectMoreThanOneQualifier',
         'Using more than one qualifier annotation on the same element is not allowed.'),
    high('InjectMoreThanOneScopeAnnotationOnClass',
         'A class can be annotated with at most one scope annotation.'),
    high('InjectOnMemberAndConstructor',
         'Members shouldn\'t be annotated with @Inject if constructor is already annotated @Inject'),
    high('InjectScopeAnnotationOnInterfaceOrAbstractClass',
         'Scope annotation on an interface or abstact class is not allowed'),
    high('InjectScopeOrQualifierAnnotationRetention',
         'Scoping and qualifier annotations must have runtime retention.'),
    high('InjectedConstructorAnnotations',
         'Injected constructors cannot be optional nor have binding annotations'),
    high('InsecureCryptoUsage',
         'A standard cryptographic operation is used in a mode that is prone to vulnerabilities'),
    high('InvalidPatternSyntax',
         'Invalid syntax used for a regular expression'),
    high('InvalidTimeZoneID',
         'Invalid time zone identifier. TimeZone.getTimeZone(String) will silently return GMT instead of the time zone you intended.'),
    high('IsInstanceOfClass',
         'The argument to Class#isInstance(Object) should not be a Class'),
    high('IsLoggableTagLength',
         'Log tag too long, cannot exceed 23 characters.'),
    high('IterablePathParameter',
         u'Path implements Iterable\u003cPath>; prefer Collection\u003cPath> for clarity'),
    high('JMockTestWithoutRunWithOrRuleAnnotation',
         'jMock tests must have a @RunWith(JMock.class) annotation, or the Mockery field must have a @Rule JUnit annotation'),
    high('JUnit3TestNotRun',
         'Test method will not be run; please correct method signature (Should be public, non-static, and method name should begin with "test").'),
    high('JUnit4ClassAnnotationNonStatic',
         'This method should be static'),
    high('JUnit4SetUpNotRun',
         'setUp() method will not be run; please add JUnit\'s @Before annotation'),
    high('JUnit4TearDownNotRun',
         'tearDown() method will not be run; please add JUnit\'s @After annotation'),
    high('JUnit4TestNotRun',
         'This looks like a test method but is not run; please add @Test and @Ignore, or, if this is a helper method, reduce its visibility.'),
    high('JUnitAssertSameCheck',
         'An object is tested for reference equality to itself using JUnit library.'),
    high('Java7ApiChecker',
         'Use of class, field, or method that is not compatible with JDK 7'),
    high('JavaxInjectOnAbstractMethod',
         'Abstract and default methods are not injectable with javax.inject.Inject'),
    high('JavaxInjectOnFinalField',
         '@javax.inject.Inject cannot be put on a final field.'),
    high('LiteByteStringUtf8',
         'This pattern will silently corrupt certain byte sequences from the serialized protocol message. Use ByteString or byte[] directly'),
    high('LockMethodChecker',
         'This method does not acquire the locks specified by its @LockMethod annotation'),
    high('LongLiteralLowerCaseSuffix',
         'Prefer \'L\' to \'l\' for the suffix to long literals'),
    high('LoopConditionChecker',
         'Loop condition is never modified in loop body.'),
    high('MathRoundIntLong',
         'Math.round(Integer) results in truncation'),
    high('MislabeledAndroidString',
         'Certain resources in `android.R.string` have names that do not match their content'),
    high('MissingSuperCall',
         'Overriding method is missing a call to overridden super method'),
    high('MissingTestCall',
         'A terminating method call is required for a test helper to have any effect.'),
    high('MisusedWeekYear',
         'Use of "YYYY" (week year) in a date pattern without "ww" (week in year). You probably meant to use "yyyy" (year) instead.'),
    high('MockitoCast',
         'A bug in Mockito will cause this test to fail at runtime with a ClassCastException'),
    high('MockitoUsage',
         'Missing method call for verify(mock) here'),
    high('ModifyingCollectionWithItself',
         'Using a collection function with itself as the argument.'),
    high('MoreThanOneInjectableConstructor',
         'This class has more than one @Inject-annotated constructor. Please remove the @Inject annotation from all but one of them.'),
    high('MustBeClosedChecker',
         'The result of this method must be closed.'),
    high('NCopiesOfChar',
         'The first argument to nCopies is the number of copies, and the second is the item to copy'),
    high('NoAllocation',
         '@NoAllocation was specified on this method, but something was found that would trigger an allocation'),
    high('NonCanonicalStaticImport',
         'Static import of type uses non-canonical name'),
    high('NonFinalCompileTimeConstant',
         '@CompileTimeConstant parameters should be final or effectively final'),
    high('NonRuntimeAnnotation',
         'Calling getAnnotation on an annotation that is not retained at runtime.'),
    high('NullTernary',
         'This conditional expression may evaluate to null, which will result in an NPE when the result is unboxed.'),
    high('NumericEquality',
         'Numeric comparison using reference equality instead of value equality'),
    high('OptionalEquality',
         'Comparison using reference equality instead of value equality'),
    high('OverlappingQualifierAndScopeAnnotation',
         'Annotations cannot be both Scope annotations and Qualifier annotations: this causes confusion when trying to use them.'),
    high('OverridesJavaxInjectableMethod',
         'This method is not annotated with @Inject, but it overrides a method that is  annotated with @javax.inject.Inject. The method will not be Injected.'),
    high('PackageInfo',
         'Declaring types inside package-info.java files is very bad form'),
    high('ParameterPackage',
         'Method parameter has wrong package'),
    high('ParcelableCreator',
         'Detects classes which implement Parcelable but don\'t have CREATOR'),
    high('PreconditionsCheckNotNull',
         'Literal passed as first argument to Preconditions.checkNotNull() can never be null'),
    high('PreconditionsCheckNotNullPrimitive',
         'First argument to `Preconditions.checkNotNull()` is a primitive rather than an object reference'),
    high('PredicateIncompatibleType',
         'Using ::equals or ::isInstance as an incompatible Predicate; the predicate will always return false'),
    high('PrivateSecurityContractProtoAccess',
         'Access to a private protocol buffer field is forbidden. This protocol buffer carries a security contract, and can only be created using an approved library. Direct access to the fields is forbidden.'),
    high('ProtoFieldNullComparison',
         'Protobuf fields cannot be null.'),
    high('ProtoStringFieldReferenceEquality',
         'Comparing protobuf fields of type String using reference equality'),
    high('ProtocolBufferOrdinal',
         'To get the tag number of a protocol buffer enum, use getNumber() instead.'),
    high('ProvidesMethodOutsideOfModule',
         '@Provides methods need to be declared in a Module to have any effect.'),
    high('RandomCast',
         'Casting a random number in the range [0.0, 1.0) to an integer or long always results in 0.'),
    high('RandomModInteger',
         'Use Random.nextInt(int).  Random.nextInt() % n can have negative results'),
    high('RectIntersectReturnValueIgnored',
         'Return value of android.graphics.Rect.intersect() must be checked'),
    high('RestrictTo',
         'Use of method or class annotated with @RestrictTo'),
    high('RestrictedApiChecker',
         ' Check for non-whitelisted callers to RestrictedApiChecker.'),
    high('ReturnValueIgnored',
         'Return value of this method must be used'),
    high('SelfAssignment',
         'Variable assigned to itself'),
    high('SelfComparison',
         'An object is compared to itself'),
    high('SelfEquals',
         'Testing an object for equality with itself will always be true.'),
    high('ShouldHaveEvenArgs',
         'This method must be called with an even number of arguments.'),
    high('SizeGreaterThanOrEqualsZero',
         'Comparison of a size >= 0 is always true, did you intend to check for non-emptiness?'),
    high('StaticOrDefaultInterfaceMethod',
         'Static and default interface methods are not natively supported on older Android devices. '),
    high('StreamToString',
         'Calling toString on a Stream does not provide useful information'),
    high('StringBuilderInitWithChar',
         'StringBuilder does not have a char constructor; this invokes the int constructor.'),
    high('SubstringOfZero',
         'String.substring(0) returns the original String'),
    high('SuppressWarningsDeprecated',
         'Suppressing "deprecated" is probably a typo for "deprecation"'),
    high('ThrowIfUncheckedKnownChecked',
         'throwIfUnchecked(knownCheckedException) is a no-op.'),
    high('ThrowNull',
         'Throwing \'null\' always results in a NullPointerException being thrown.'),
    high('TruthSelfEquals',
         'isEqualTo should not be used to test an object for equality with itself; the assertion will never fail.'),
    high('TryFailThrowable',
         'Catching Throwable/Error masks failures from fail() or assert*() in the try block'),
    high('TypeParameterQualifier',
         'Type parameter used as type qualifier'),
    high('UnlockMethod',
         'This method does not acquire the locks specified by its @UnlockMethod annotation'),
    high('UnnecessaryTypeArgument',
         'Non-generic methods should not be invoked with type arguments'),
    high('UnusedAnonymousClass',
         'Instance created but never used'),
    high('UnusedCollectionModifiedInPlace',
         'Collection is modified in place, but the result is not used'),
    high('VarTypeName',
         '`var` should not be used as a type name.'),

    # Other javac tool warnings
    java_medium('addNdkApiCoverage failed to getPackage',
                [r".*: warning: addNdkApiCoverage failed to getPackage"]),
    java_medium('Supported version from annotation processor',
                [r".*: warning: Supported source version .+ from annotation processor"]),
]

compile_patterns(warn_patterns)
