lucene/gradle/validation/error-prone.gradle

Ignoring revisions in .git-blame-ignore-revs. Click here to bypass and see the normal blame view.

492 lines
29 KiB
Groovy
Raw Normal View History

/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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.
*/
def skipReason
if (rootProject.usesAltJvm && rootProject.runtimeJavaVersion > JavaVersion.VERSION_15) {
skipReason = "won't work with JDK ${rootProject.runtimeJavaVersion} if used as alternative java toolchain"
}
if (!propertyOrDefault("validation.errorprone", isCIBuild).asBoolean()) {
skipReason = "skipped on builds not running inside CI environments, pass -Pvalidation.errorprone=true to enable"
}
if (skipReason) {
configure(rootProject) {
task errorProneSkipped() {
doFirst {
logger.warn("WARNING: errorprone disabled (${skipReason})")
}
}
}
}
allprojects { prj ->
plugins.withType(JavaPlugin) {
// LUCENE-9650: Errorprone on master/gradle does not work with JDK-16+ when running as plugin
// inside a forked Javac process. Javac running inside Gradle works, because we have
// additional module system opens in place.
// This is a hack to keep the dependency (so that palantir's version check doesn't complain)
// but don't include the plugin (which fails on JDK16+).
if (skipReason) {
tasks.withType(JavaCompile) { task -> task.dependsOn ":errorProneSkipped" }
configurations {
errorprone
}
dependencies {
errorprone("com.google.errorprone:error_prone_core")
}
} else {
prj.apply plugin: 'net.ltgt.errorprone'
dependencies {
errorprone("com.google.errorprone:error_prone_core")
}
tasks.withType(JavaCompile) { task ->
// Disable errorprone on the MR-JAR tasks
if (task.name ==~ /compileMain\d+Java/) {
options.errorprone.enabled = false
return
}
task.dependsOn ":checkJdkInternalsExportedToGradle"
options.errorprone.disableWarningsInGeneratedCode = true
options.errorprone.errorproneArgs = [
'-XepDisableAllChecks', // only enable specific checks
'-XepAllErrorsAsWarnings', // warnings still fail build by default, but allows usage of -Pjavac.failOnWarnings=false
// List of enabled/disabled checks
// Please keep this synced with https://errorprone.info/bugpatterns when upgrading!
// Do *NOT* enable checks based on their name or description. Read the source code and make sure they are useful!
// Most error-prone checks are not useful for non-google software.
// On by Default : ERROR
// '-Xep:AlwaysThrows:OFF', // we don't use google collections
// '-Xep:AndroidInjectionBeforeSuper:OFF', // we don't use android
'-Xep:ArrayEquals:ERROR',
'-Xep:ArrayFillIncompatibleType:ERROR',
'-Xep:ArrayHashCode:ERROR',
'-Xep:ArrayToString:ERROR',
// '-Xep:ArraysAsListPrimitiveArray:OFF', // we don't use guava
// '-Xep:AsyncCallableReturnsNull:OFF', // we don't use guava
// '-Xep:AsyncFunctionReturnsNull:OFF', // we don't use guava
// '-Xep:AutoValueBuilderDefaultsInConstructor:OFF', // we don't use autovalue
// '-Xep:AutoValueConstructorOrderChecker:OFF', // we don't use autovalue
'-Xep:BadAnnotationImplementation:ERROR',
'-Xep:BadShiftAmount:ERROR',
// '-Xep:BanJNDI:OFF', // implemented with forbidden APIs instead
'-Xep:BoxedPrimitiveEquality:ERROR',
// '-Xep:BundleDeserializationCast:OFF', // we don't use android
'-Xep:ChainingConstructorIgnoresParameter:ERROR',
// '-Xep:CheckNotNullMultipleTimes:OFF', // we don't use guava
// '-Xep:CheckReturnValue:OFF', // we don't use these annotations
'-Xep:CollectionToArraySafeParameter:ERROR',
// '-Xep:ComparableType:OFF',
'-Xep:ComparingThisWithNull:ERROR',
'-Xep:ComparisonOutOfRange:ERROR',
// '-Xep:CompatibleWithAnnotationMisuse:OFF', // we don't use this annotation
// '-Xep:CompileTimeConstant:OFF', // we don't use this annotation
'-Xep:ComputeIfAbsentAmbiguousReference:ERROR',
'-Xep:ConditionalExpressionNumericPromotion:ERROR',
'-Xep:ConstantOverflow:ERROR',
// '-Xep:DaggerProvidesNull:OFF', // we don't use dagger
'-Xep:DangerousLiteralNull:ERROR',
'-Xep:DeadException:ERROR',
'-Xep:DeadThread:ERROR',
'-Xep:DiscardedPostfixExpression:ERROR',
// '-Xep:DoNotCall:OFF', // we don't use this annotation
// '-Xep:DoNotMock:OFF', // we don't use mocking libraries
// '-Xep:DoubleBraceInitialization:OFF', // we don't use guava
'-Xep:DuplicateMapKeys:ERROR',
// '-Xep:DurationFrom:OFF', // we don't use Duration.from()
// '-Xep:DurationGetTemporalUnit:OFF', // we don't use Duration.get()
// '-Xep:DurationTemporalUnit:OFF', // we don't use Duration.of() etc
// '-Xep:DurationToLongTimeUnit:OFF', // we don't use TimeUnit.convert Duration, etc
// '-Xep:EmptyTopLevelDeclaration:OFF', // noisy
'-Xep:EqualsHashCode:ERROR',
'-Xep:EqualsNaN:ERROR',
'-Xep:EqualsNull:ERROR',
'-Xep:EqualsReference:ERROR',
'-Xep:EqualsWrongThing:ERROR',
// '-Xep:FloggerFormatString:OFF', // we don't use flogger
// '-Xep:FloggerLogVarargs:OFF', // we don't use flogger
// '-Xep:FloggerSplitLogStatement:OFF', // we don't use flogger
// '-Xep:ForOverride:OFF', // we don't use this annotation
// '-Xep:FormatString:OFF',
// '-Xep:FormatStringAnnotation:OFF', // we don't use this annotation
// '-Xep:FromTemporalAccessor:OFF', // we don't use .from(LocalDate) etc
'-Xep:FunctionalInterfaceMethodChanged:ERROR',
// '-Xep:FuturesGetCheckedIllegalExceptionType:OFF', // we don't use guava
// '-Xep:FuzzyEqualsShouldNotBeUsedInEqualsMethod:OFF', // we don't use guava
'-Xep:GetClassOnAnnotation:ERROR',
'-Xep:GetClassOnClass:ERROR',
// '-Xep:GuardedBy:OFF', // we don't use this annotation
// '-Xep:GuiceAssistedInjectScoping:OFF', // we don't use guice
// '-Xep:GuiceAssistedParameters:OFF', // we don't use guice
// '-Xep:GuiceInjectOnFinalField:OFF', // we don't use guice
'-Xep:HashtableContains:ERROR',
// '-Xep:IdentityBinaryExpression:OFF',
'-Xep:IdentityHashMapBoxing:ERROR',
// '-Xep:IgnoredPureGetter:OFF', // we don't use these annotations
// '-Xep:Immutable:OFF', // we don't use this annotation
'-Xep:Incomparable:ERROR',
// '-Xep:IncompatibleArgumentType:OFF', // we don't use this annotation
// '-Xep:IncompatibleModifiers:OFF', // we don't use this annotation
'-Xep:IndexOfChar:ERROR',
'-Xep:InexactVarargsConditional:ERROR',
// '-Xep:InfiniteRecursion:OFF',
// '-Xep:InjectMoreThanOneScopeAnnotationOnClass:OFF', // we don't use this annotation
// '-Xep:InjectOnMemberAndConstructor:OFF', // we don't use this annotation
// '-Xep:InlineMeValidator:OFF', // we don't use this annotation
// '-Xep:InstantTemporalUnit:OFF', // we don't use Instant apis with strange temporal units
// '-Xep:InvalidJavaTimeConstant:OFF', // we don't use impacted java.time classes (Month, etc)
// '-Xep:InvalidPatternSyntax:OFF',
// '-Xep:InvalidTimeZoneID:OFF', // we don't use getTimeZone with constant IDs except UTC/GMT
// '-Xep:InvalidZoneId:OFF', // we don't use ZoneId.of
'-Xep:IsInstanceIncompatibleType:ERROR',
'-Xep:IsInstanceOfClass:ERROR',
// '-Xep:IsLoggableTagLength:OFF', // we don't use android
// '-Xep:JUnit3TestNotRun:OFF', // we don't use junit3
'-Xep:JUnit4ClassAnnotationNonStatic:ERROR',
// '-Xep:JUnit4SetUpNotRun:OFF', // LuceneTestCase takes care
// '-Xep:JUnit4TearDownNotRun:OFF', // LuceneTestCase takes care
// '-Xep:JUnit4TestNotRun:OFF', // noisy
'-Xep:JUnit4TestsNotRunWithinEnclosed:ERROR',
'-Xep:JUnitAssertSameCheck:ERROR',
'-Xep:JUnitParameterMethodNotFound:ERROR',
// '-Xep:JavaxInjectOnAbstractMethod:OFF', // we don't this annotation
// '-Xep:JodaToSelf:OFF', // we don't use joda-time
// '-Xep:LiteByteStringUtf8:OFF', // we don't use protobuf
// '-Xep:LocalDateTemporalAmount:OFF', // we don't use LocalDate math
'-Xep:LockOnBoxedPrimitive:ERROR',
'-Xep:LoopConditionChecker:ERROR',
'-Xep:LossyPrimitiveCompare:ERROR',
'-Xep:MathRoundIntLong:ERROR',
// '-Xep:MislabeledAndroidString:OFF', // we don't use android
// '-Xep:MisplacedScopeAnnotations:OFF', // we don't use this annotation
// '-Xep:MissingSuperCall:OFF', // we don't use this annotation
// '-Xep:MissingTestCall:OFF', // we don't use guava
// '-Xep:MisusedDayOfYear:OFF', // we don't use date patterns
// '-Xep:MisusedWeekYear:OFF', // we don't use date patterns
// '-Xep:MixedDescriptors:OFF', // we don't use protobuf
// '-Xep:MockitoUsage:OFF', // we don't use mockito
'-Xep:ModifyingCollectionWithItself:ERROR',
// '-Xep:MoreThanOneInjectableConstructor:OFF', // we don't use this annotation
// '-Xep:MustBeClosedChecker:OFF', // we don't use this annotation
'-Xep:NCopiesOfChar:ERROR',
// '-Xep:NoCanIgnoreReturnValueOnClasses:OFF', // we don't use this annotation
'-Xep:NonCanonicalStaticImport:ERROR',
// '-Xep:NonFinalCompileTimeConstant:OFF', // we don't use this annotation
'-Xep:NonRuntimeAnnotation:ERROR',
// '-Xep:NullArgumentForNonNullParameter:OFF', // we don't use this annotation
'-Xep:NullTernary:ERROR',
// '-Xep:NullableOnContainingClass:OFF', // we don't use this annotation
'-Xep:OptionalEquality:ERROR',
'-Xep:OptionalMapUnusedValue:ERROR',
'-Xep:OptionalOfRedundantMethod:ERROR',
// '-Xep:OverlappingQualifierAndScopeAnnotation:OFF', // we don't use this annotation
// '-Xep:OverridesJavaxInjectableMethod:OFF', // we don't use this annotation
'-Xep:PackageInfo:ERROR',
'-Xep:ParametersButNotParameterized:ERROR',
// '-Xep:ParcelableCreator:OFF', // we don't use android
// '-Xep:PeriodFrom:OFF', // we don't use Period
// '-Xep:PeriodGetTemporalUnit:OFF', // we don't use Period
// '-Xep:PeriodTimeMath:OFF', // we don't use Period
// '-Xep:PreconditionsInvalidPlaceholder:OFF', // we don't use guava
// '-Xep:PrivateSecurityContractProtoAccess:OFF', // we don't use protobuf
// '-Xep:ProtoBuilderReturnValueIgnored:OFF', // we don't use protobuf
// '-Xep:ProtoFieldNullComparison:OFF', // we don't use protobuf
// '-Xep:ProtoStringFieldReferenceEquality:OFF', // we don't use protobuf
// '-Xep:ProtoTruthMixedDescriptors:OFF', // we don't use protobuf
// '-Xep:ProtocolBufferOrdinal:OFF', // we don't use protobuf
// '-Xep:ProvidesMethodOutsideOfModule:OFF', // we don't use guice
'-Xep:RandomCast:ERROR',
'-Xep:RandomModInteger:ERROR',
// '-Xep:RectIntersectReturnValueIgnored:OFF', // we don't use android
// '-Xep:RequiredModifiers:OFF', // we don't use this annotation
// '-Xep:RestrictedApiChecker:OFF', // we don't use this annotation
// '-Xep:ReturnValueIgnored:OFF', // noisy
'-Xep:SelfAssignment:ERROR',
'-Xep:SelfComparison:ERROR',
'-Xep:SelfEquals:ERROR',
// '-Xep:ShouldHaveEvenArgs:OFF', // we don't use truth
'-Xep:SizeGreaterThanOrEqualsZero:ERROR',
'-Xep:StreamToString:ERROR',
'-Xep:StringBuilderInitWithChar:ERROR',
'-Xep:SubstringOfZero:ERROR',
'-Xep:SuppressWarningsDeprecated:ERROR',
// '-Xep:TemporalAccessorGetChronoField:OFF', // we don't use TemporalAccessor.get
// '-Xep:TestParametersNotInitialized:OFF', // we don't use this annotation
// '-Xep:TheoryButNoTheories:OFF', // we don't use junit theory apis/runner
// '-Xep:ThrowIfUncheckedKnownChecked:OFF', // we don't use this annotation
// '-Xep:ThrowNull:OFF', // noisy (LuceneTestCase)
// '-Xep:TreeToString:OFF', // we don't use javac API
// '-Xep:TruthSelfEquals:OFF', // we don't use truth
// '-Xep:TryFailThrowable:OFF',
'-Xep:TypeParameterQualifier:ERROR',
'-Xep:UnicodeDirectionalityCharacters:ERROR',
// '-Xep:UnicodeInCode:OFF', // noisy (spatial3d)
'-Xep:UnnecessaryCheckNotNull:ERROR',
'-Xep:UnnecessaryTypeArgument:ERROR',
'-Xep:UnsafeWildcard:ERROR',
'-Xep:UnusedAnonymousClass:ERROR',
'-Xep:UnusedCollectionModifiedInPlace:ERROR',
'-Xep:VarTypeName:ERROR',
// '-Xep:WrongOneof:OFF', // we don't use protobuf
'-Xep:XorPower:ERROR',
// '-Xep:ZoneIdOfZ:OFF', // we don't use ZoneId.of
// On by Default : WARNING
// '-Xep:AlmostJavadoc:OFF', // noisy (e.g. commented-out code misinterpreted as javadocs)
// '-Xep:AlreadyChecked:OFF', // TODO: there are problems
// '-Xep:AmbiguousMethodReference:OFF',
// '-Xep:AnnotateFormatMethod:OFF', // we don't use this annotation
// '-Xep:ArgumentSelectionDefectChecker:OFF', // noisy
// '-Xep:ArrayAsKeyOfSetOrMap:OFF', // TODO: there are problems
'-Xep:AssertEqualsArgumentOrderChecker:WARN',
'-Xep:AssertThrowsMultipleStatements:WARN',
// '-Xep:AssertionFailureIgnored:OFF', // TODO: there are problems
// '-Xep:AssistedInjectAndInjectOnSameConstructor:OFF', // we don't use this annotation
// '-Xep:AutoValueFinalMethods:OFF', // we don't use autovalue
// '-Xep:AutoValueImmutableFields:OFF', // we don't use autovalue
// '-Xep:AutoValueSubclassLeaked:OFF', // we don't use autovalue
'-Xep:BadComparable:WARN',
// '-Xep:BadImport:OFF', // TODO: there are problems
// '-Xep:BadInstanceof:OFF', // TODO: there are problems
'-Xep:BareDotMetacharacter:WARN',
// '-Xep:BigDecimalEquals:OFF', // BigDecimal barely used, can use forbidden-apis for this
// '-Xep:BigDecimalLiteralDouble:OFF', // BigDecimal barely used, can use forbidden-apis for this
// '-Xep:BoxedPrimitiveConstructor:OFF', // we have forbiddenapis for that
// '-Xep:BugPatternNaming:OFF', // we don't use this annotation
// '-Xep:ByteBufferBackingArray:OFF',
// '-Xep:CacheLoaderNull:OFF', // we don't use guava
// '-Xep:CanonicalDuration:OFF', // barely use Duration.of (one test), just a style thing
// '-Xep:CatchAndPrintStackTrace:OFF', // noisy
// '-Xep:CatchFail:OFF', // TODO: there are problems
// '-Xep:ChainedAssertionLosesContext:OFF', // we don't use truth
// '-Xep:CharacterGetNumericValue:OFF', // noisy
// '-Xep:ClassCanBeStatic:OFF', // noisy
'-Xep:ClassNewInstance:WARN',
// '-Xep:CloseableProvides:OFF', // we don't use this annotation
// '-Xep:CollectionUndefinedEquality:OFF', // TODO: there are problems
'-Xep:CollectorShouldNotUseState:WARN',
'-Xep:ComparableAndComparator:WARN',
'-Xep:CompareToZero:WARN',
// '-Xep:ComplexBooleanConstant:OFF', // TODO: there are problems
// '-Xep:DateChecker:OFF', // we don't use these Date setters/ctors
// '-Xep:DateFormatConstant:OFF', // we don't use Date setters
// '-Xep:DefaultCharset:OFF', // we have forbiddenapis for that
// '-Xep:DefaultPackage:OFF',
'-Xep:DeprecatedVariable:WARN',
// '-Xep:DirectInvocationOnMock:OFF', // we don't use mocking libraries
// '-Xep:DistinctVarargsChecker:OFF', // we don't use google collections
// '-Xep:DoNotCallSuggester:OFF', // we don't use this annotation
// '-Xep:DoNotClaimAnnotations:OFF', // we don't use annotation processors
// '-Xep:DoNotMockAutoValue:OFF', // we don't use autovalue
// '-Xep:DoubleCheckedLocking:OFF', // TODO: there are problems
'-Xep:EmptyBlockTag:WARN',
// '-Xep:EmptyCatch:OFF', // ECJ takes care
// '-Xep:EmptySetMultibindingContributions:OFF', // we don't use this annotation
// '-Xep:EqualsGetClass:OFF', // noisy
// '-Xep:EqualsIncompatibleType:OFF',
// '-Xep:EqualsUnsafeCast:OFF', // noisy
'-Xep:EqualsUsingHashCode:WARN',
'-Xep:ErroneousBitwiseExpression:WARN',
'-Xep:ErroneousThreadPoolConstructorChecker:WARN',
// '-Xep:EscapedEntity:OFF',
// '-Xep:ExtendingJUnitAssert:OFF', // noisy
// '-Xep:ExtendsObject:OFF', // TODO: there are problems
// '-Xep:FallThrough:OFF', // TODO: there are problems
// '-Xep:Finally:OFF', // TODO: there are problems
'-Xep:FloatCast:WARN',
'-Xep:FloatingPointAssertionWithinEpsilon:WARN',
// '-Xep:FloatingPointLiteralPrecision:OFF', // TODO: there are problems
// '-Xep:FloggerArgumentToString:OFF', // we don't use flogger
// '-Xep:FloggerStringConcatenation:OFF', // we don't use flogger
// '-Xep:FragmentInjection:OFF', // we don't use android
// '-Xep:FragmentNotInstantiable:OFF', // we don't use android
// '-Xep:FutureReturnValueIgnored:OFF', // TODO: there are problems
'-Xep:GetClassOnEnum:WARN',
// '-Xep:HidingField:OFF', // noisy
// '-Xep:IdentityHashMapUsage:OFF', // noisy
// '-Xep:ImmutableAnnotationChecker:OFF', // we don't use this annotation
// '-Xep:ImmutableEnumChecker:OFF', // noisy
// '-Xep:InconsistentCapitalization:OFF', // TODO: there are problems
// '-Xep:InconsistentHashCode:OFF', // noisy
'-Xep:IncorrectMainMethod:WARN',
'-Xep:IncrementInForLoopAndHeader:WARN',
'-Xep:InheritDoc:WARN',
// '-Xep:InjectInvalidTargetingOnScopingAnnotation:OFF', // we don't use this annotation
// '-Xep:InjectOnConstructorOfAbstractClass:OFF', // we don't use this annotation
// '-Xep:InjectScopeAnnotationOnInterfaceOrAbstractClass:OFF', // we don't use this annotation
// '-Xep:InjectedConstructorAnnotations:OFF', // we don't use this annotation
// '-Xep:InlineFormatString:OFF', // noisy
// '-Xep:InlineMeInliner:OFF', // we don't use this annotation
// '-Xep:InlineMeSuggester:OFF', // we don't use this annotation
// '-Xep:InputStreamSlowMultibyteRead:OFF',
'-Xep:InstanceOfAndCastMatchWrongType:WARN',
// '-Xep:IntLongMath:OFF', // noisy
// '-Xep:InvalidBlockTag:OFF', // noisy (e.g. lucene.experimental)
// '-Xep:InvalidInlineTag:OFF', // TODO: there are problems
'-Xep:InvalidLink:WARN',
// '-Xep:InvalidParam:OFF', // TODO: there are problems
'-Xep:InvalidThrows:WARN',
'-Xep:InvalidThrowsLink:WARN',
'-Xep:IterableAndIterator:WARN',
// '-Xep:JUnit3FloatingPointComparisonWithoutDelta:OFF', // we don't use junit3
// '-Xep:JUnit4ClassUsedInJUnit3:OFF', // we don't use junit3
// '-Xep:JUnitAmbiguousTestClass:OFF', // we don't use junit3
// '-Xep:JavaDurationGetSecondsGetNano:OFF', // we don't use these Duration methods
// '-Xep:JavaDurationWithNanos:OFF', // we don't use these Duration methods
// '-Xep:JavaDurationWithSeconds:OFF', // we don't use these Duration methods
// '-Xep:JavaInstantGetSecondsGetNano:OFF', // we don't use these Instant methods
// '-Xep:JavaLangClash:OFF', // TODO: there are problems
// '-Xep:JavaLocalDateTimeGetNano:OFF', // we don't use LocalDateTime
// '-Xep:JavaLocalTimeGetNano:OFF', // we don't use LocalTime
// '-Xep:JavaPeriodGetDays:OFF', // we don't use Period
// '-Xep:JavaTimeDefaultTimeZone:OFF', // forbidden-apis checks this
// '-Xep:JavaUtilDate:OFF', // noisy
// '-Xep:JavaxInjectOnFinalField:OFF', // we don't use this annotation
// '-Xep:JdkObsolete:OFF', // noisy
// '-Xep:JodaConstructors:OFF', // we don't use joda-time
// '-Xep:JodaDateTimeConstants:OFF', // we don't use joda-time
// '-Xep:JodaDurationWithMillis:OFF', // we don't use joda-time
// '-Xep:JodaInstantWithMillis:OFF', // we don't use joda-time
// '-Xep:JodaNewPeriod:OFF', // we don't use joda-time
// '-Xep:JodaPlusMinusLong:OFF', // we don't use joda-time
// '-Xep:JodaTimeConverterManager:OFF', // we don't use joda-time
// '-Xep:JodaWithDurationAddedLong:OFF', // we don't use joda-time
// '-Xep:LiteEnumValueOf:OFF', // we don't use protobuf
// '-Xep:LiteProtoToString:OFF', // we don't use protobuf
// '-Xep:LockNotBeforeTry:OFF', // TODO: there are problems
'-Xep:LogicalAssignment:WARN',
// '-Xep:LongDoubleConversion:OFF', // TODO: there are problems
'-Xep:LongFloatConversion:WARN',
'-Xep:LoopOverCharArray:WARN',
'-Xep:MalformedInlineTag:WARN',
// '-Xep:MathAbsoluteRandom:OFF', // TODO: there are problems
// '-Xep:MemoizeConstantVisitorStateLookups:OFF', // we don't use this class
// '-Xep:MissingCasesInEnumSwitch:OFF', // redundant with ECJ incompleteEnumSwitch/missingEnumCaseDespiteDefault
// '-Xep:MissingFail:OFF', // TODO: there are problems
'-Xep:MissingImplementsComparable:WARN',
// '-Xep:MissingOverride:OFF', // ECJ takes care of this
// '-Xep:MissingSummary:OFF', // TODO: there are problems
// '-Xep:MixedMutabilityReturnType:OFF', // noisy
// '-Xep:MockNotUsedInProduction:OFF', // we don't use mocking libraries
// '-Xep:ModifiedButNotUsed:OFF', // TODO: there are problems
'-Xep:ModifyCollectionInEnhancedForLoop:WARN',
'-Xep:ModifySourceCollectionInStream:WARN',
'-Xep:MultipleParallelOrSequentialCalls:WARN',
'-Xep:MultipleUnaryOperatorsInMethodCall:WARN',
// '-Xep:MutablePublicArray:OFF', // TODO: there are problems
'-Xep:NarrowCalculation:WARN',
// '-Xep:NarrowingCompoundAssignment:OFF', // noisy
'-Xep:NegativeCharLiteral:WARN',
'-Xep:NestedInstanceOfConditions:WARN',
// '-Xep:NonAtomicVolatileUpdate:OFF', // TODO: there are problems
// '-Xep:NonCanonicalType:OFF', // noisy
'-Xep:NonOverridingEquals:WARN',
'-Xep:NullOptional:WARN',
// '-Xep:NullableConstructor:OFF', // we don't use this annotation
// '-Xep:NullablePrimitive:OFF', // we don't use this annotation
// '-Xep:NullablePrimitiveArray:OFF', // we don't use this annotation
// '-Xep:NullableVoid:OFF', // we don't use this annotation
'-Xep:ObjectEqualsForPrimitives:WARN',
// '-Xep:ObjectToString:OFF', // TODO: there are problems
// '-Xep:ObjectsHashCodePrimitive:OFF', // TODO: there are problems
// '-Xep:OperatorPrecedence:OFF', // noisy
'-Xep:OptionalMapToOptional:WARN',
'-Xep:OptionalNotPresent:WARN',
'-Xep:OrphanedFormatString:WARN',
// '-Xep:OutlineNone:OFF', // we don't use gwt
'-Xep:OverrideThrowableToString:WARN',
'-Xep:Overrides:WARN',
// '-Xep:OverridesGuiceInjectableMethod:OFF', // we don't use guice
// '-Xep:ParameterName:OFF', // we don't pass parameters with comments in this way
// '-Xep:PreconditionsCheckNotNullRepeated:OFF', // we don't use guava
'-Xep:PrimitiveAtomicReference:WARN',
// '-Xep:ProtectedMembersInFinalClass:OFF', // we don't use protobuf
// '-Xep:ProtoDurationGetSecondsGetNano:OFF', // we don't use protobuf
// '-Xep:ProtoRedundantSet:OFF', // we don't use protobuf
// '-Xep:ProtoTimestampGetSecondsGetNano:OFF', // we don't use protobuf
// '-Xep:QualifierOrScopeOnInjectMethod:OFF', // we don't use this annotation
'-Xep:ReachabilityFenceUsage:WARN',
// '-Xep:ReferenceEquality:OFF', // noisy
'-Xep:RethrowReflectiveOperationExceptionAsLinkageError:WARN',
'-Xep:ReturnFromVoid:WARN',
// '-Xep:RobolectricShadowDirectlyOn:OFF', // we don't use robolectric
// '-Xep:RxReturnValueIgnored:OFF', // we don't use rxjava
// '-Xep:SameNameButDifferent:OFF', // TODO: there are problems
// '-Xep:SelfAlwaysReturnsThis:OFF', // we don't use self() methods, this isn't python.
// '-Xep:ShortCircuitBoolean:OFF', // TODO: there are problems
// '-Xep:StaticAssignmentInConstructor:OFF',
// '-Xep:StaticAssignmentOfThrowable:OFF', // noisy
// '-Xep:StaticGuardedByInstance:OFF',
// '-Xep:StaticMockMember:OFF', // we don't use mock libraries
// '-Xep:StreamResourceLeak:OFF', // TODO: there are problems
'-Xep:StreamToIterable:WARN',
// '-Xep:StringSplitter:OFF', // noisy, can use forbidden-apis for this
// '-Xep:SwigMemoryLeak:OFF', // we don't use swig
// '-Xep:SynchronizeOnNonFinalField:OFF', // noisy
// '-Xep:ThreadJoinLoop:OFF',
// '-Xep:ThreadLocalUsage:OFF', // noisy
// '-Xep:ThreadPriorityCheck:OFF', // noisy, forbidden APIs can do this
'-Xep:ThreeLetterTimeZoneID:WARN',
'-Xep:TimeUnitConversionChecker:WARN',
// '-Xep:ToStringReturnsNull:OFF', // TODO: there are problems
// '-Xep:TruthAssertExpected:OFF', // we don't use truth
// '-Xep:TruthConstantAsserts:OFF', // we don't use truth
// '-Xep:TruthGetOrDefault:OFF', // we don't use truth
// '-Xep:TruthIncompatibleType:OFF', // we don't use truth
// '-Xep:TypeEquals:OFF', // we don't use this internal javac api
'-Xep:TypeNameShadowing:WARN',
// '-Xep:TypeParameterShadowing:OFF',
// '-Xep:TypeParameterUnusedInFormals:OFF',
'-Xep:URLEqualsHashCode:WARN',
// '-Xep:UndefinedEquals:OFF', // TODO: there are problems
// '-Xep:UnescapedEntity:OFF', // TODO: there are problems
// '-Xep:UnicodeEscape:OFF', // noisy
// '-Xep:UnnecessaryAssignment:OFF', // we don't use these annotations
// '-Xep:UnnecessaryLambda:OFF', // TODO: there are problems
// '-Xep:UnnecessaryLongToIntConversion:OFF', // TODO: there are problems
// '-Xep:UnnecessaryMethodInvocationMatcher:OFF', // we don't use spring
'-Xep:UnnecessaryMethodReference:WARN',
// '-Xep:UnnecessaryParentheses:OFF', // noisy
'-Xep:UnrecognisedJavadocTag:WARN',
// '-Xep:UnsafeFinalization:OFF', // we don't use finalizers, deprecated for removal, fails build
'-Xep:UnsafeReflectiveConstructionCast:WARN',
// '-Xep:UnsynchronizedOverridesSynchronized:OFF', // TODO: there are problems
// '-Xep:UnusedMethod:OFF', // TODO: there are problems
'-Xep:UnusedNestedClass:WARN',
// '-Xep:UnusedTypeParameter:OFF', // TODO: there are problems
// '-Xep:UnusedVariable:OFF', // noisy, can use ECJ
// '-Xep:UseBinds:OFF', // we don't use this annotation
// '-Xep:UseCorrectAssertInTests:OFF', // noisy
'-Xep:VariableNameSameAsType:WARN',
// '-Xep:WaitNotInLoop:OFF', // TODO: there are problems
// '-Xep:WakelockReleasedDangerously:OFF', // we don't use android
// '-Xep:WithSignatureDiscouraged:OFF', // we aren't using this error-prone internal api
]
}
}
}
}