# 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
# pylint:disable=g-importing-member
from .cpp_warn_patterns import compile_patterns
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('BothPackageInfoAndHtml'),
    medium('BuilderSetStyle'),
    medium('CallbackName'),
    medium('ExecutorRegistration'),
    medium('HiddenTypeParameter'),
    medium('JavaApiUsedByMainlineModule'),
    medium('ListenerLast'),
    medium('MinMaxConstant'),
    medium('MissingBuildMethod'),
    medium('MissingGetterMatchingBuilder'),
    medium('NoByteOrShort'),
    medium('OverlappingConstants'),
    medium('SetterReturnsThis'),
    medium('StaticFinalBuilder'),
    medium('StreamFiles'),
    medium('Typo'),
    medium('UseIcu'),
    medium('fallthrough'),
    medium('overrides'),
    medium('serial'),
    medium('try'),
    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('bad path element',
                [r".*: warning: \[path\] bad path element .*\.jar"]),
    java_medium('Supported version from annotation processor',
                [r".*: warning: Supported source version .+ from annotation processor"]),
]

compile_patterns(warn_patterns)
