diff --git a/build.gradle b/build.gradle index 6d6ee2dadf9e..6cc30e666be5 100644 --- a/build.gradle +++ b/build.gradle @@ -24,6 +24,7 @@ plugins { id "org.owasp.dependencycheck" version "5.3.0" id 'de.thetaphi.forbiddenapis' version '3.0.1' apply false id "de.undercouch.download" version "4.0.2" apply false + id "net.ltgt.errorprone" version "1.2.1" apply false } apply from: file('gradle/defaults.gradle') @@ -127,6 +128,7 @@ apply from: file('gradle/ide/intellij-idea.gradle') apply from: file('gradle/ide/eclipse.gradle') // Validation tasks +apply from: file('gradle/validation/error-prone.gradle') apply from: file('gradle/validation/precommit.gradle') apply from: file('gradle/validation/forbidden-apis.gradle') apply from: file('gradle/validation/jar-checks.gradle') diff --git a/gradle/defaults-java.gradle b/gradle/defaults-java.gradle index 3614ee811e95..9e1b67ca9809 100644 --- a/gradle/defaults-java.gradle +++ b/gradle/defaults-java.gradle @@ -52,8 +52,11 @@ allprojects { "-Xdoclint:-missing", "-Xdoclint:-accessibility", "-proc:none", // proc:none was added because of LOG4J2-1925 / JDK-8186647 - "-Werror", ] + + if (propertyOrDefault("javac.failOnWarnings", true).toBoolean()) { + options.compilerArgs += "-Werror" + } } } } diff --git a/gradle/hacks/findbugs.gradle b/gradle/hacks/findbugs.gradle index 06a6c76f694f..f228738936ef 100644 --- a/gradle/hacks/findbugs.gradle +++ b/gradle/hacks/findbugs.gradle @@ -16,13 +16,14 @@ */ // See LUCENE-9411. This hack adds compile-time only dependencies -// on findbugs annotations. Otherwise javac generates odd warnings about missing +// on findbugs and error_prone annotations. Otherwise javac generates odd warnings about missing // type information. configure([project(":solr:core"), project(":solr:solrj"), project(":solr:contrib:prometheus-exporter"), - project(":solr:test-framework")]) { + project(":solr:test-framework"), + project(":solr:contrib:analytics")]) { plugins.withType(JavaPlugin) { dependencies { // Use versionless variants because these libraries are in versions.lock. diff --git a/gradle/validation/error-prone.gradle b/gradle/validation/error-prone.gradle new file mode 100644 index 000000000000..12b1c5b997b7 --- /dev/null +++ b/gradle/validation/error-prone.gradle @@ -0,0 +1,148 @@ +/* + * 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. + */ + +allprojects { prj -> + plugins.withType(JavaPlugin) { + prj.apply plugin: 'net.ltgt.errorprone' + + dependencies { + errorprone("com.google.errorprone:error_prone_core") + } + + tasks.withType(JavaCompile) { task -> + options.errorprone.errorproneArgs = [ + // test + '-Xep:ExtendingJUnitAssert:OFF', + '-Xep:UseCorrectAssertInTests:OFF', + '-Xep:DefaultPackage:OFF', + '-Xep:FloatingPointLiteralPrecision:OFF', + '-Xep:CatchFail:OFF', + '-Xep:TryFailThrowable:OFF', + '-Xep:MathAbsoluteRandom:OFF', + '-Xep:AssertionFailureIgnored:OFF', + '-Xep:JUnit4TestNotRun:OFF', + '-Xep:FallThrough:OFF', + '-Xep:CatchAndPrintStackTrace:OFF', + '-Xep:ToStringReturnsNull:OFF', + '-Xep:ArrayAsKeyOfSetOrMap:OFF', + '-Xep:StaticAssignmentInConstructor:OFF', + '-Xep:SelfAssignment:OFF', + '-Xep:InvalidPatternSyntax:OFF', + '-Xep:MissingFail:OFF', + '-Xep:LossyPrimitiveCompare:OFF', + '-Xep:ComparableType:OFF', + '-Xep:InfiniteRecursion:OFF', + '-Xep:MisusedDayOfYear:OFF', + '-Xep:FloatingPointAssertionWithinEpsilon:OFF', + + '-Xep:ThrowNull:OFF', + '-Xep:StaticGuardedByInstance:OFF', + '-Xep:ArrayHashCode:OFF', + '-Xep:ArrayEquals:OFF', + '-Xep:IdentityBinaryExpression:OFF', + '-Xep:ComplexBooleanConstant:OFF', + '-Xep:ComplexBooleanConstant:OFF', + '-Xep:StreamResourceLeak:OFF', + '-Xep:UnnecessaryLambda:OFF', + '-Xep:ObjectToString:OFF', + '-Xep:URLEqualsHashCode:OFF', + '-Xep:DoubleBraceInitialization:OFF', + '-Xep:ShortCircuitBoolean:OFF', + '-Xep:InputStreamSlowMultibyteRead:OFF', + '-Xep:NonCanonicalType:OFF', + '-Xep:CollectionIncompatibleType:OFF', + '-Xep:TypeParameterShadowing:OFF', + '-Xep:ThreadJoinLoop:OFF', + '-Xep:MutableConstantField:OFF', + '-Xep:ReturnValueIgnored:OFF', + '-Xep:CollectionIncompatibleType:OFF', + '-Xep:SameNameButDifferent:OFF', + '-Xep:InvalidParam:OFF', + '-Xep:CompareToZero:OFF', + '-Xep:DoubleCheckedLocking:OFF', + '-Xep:BadShiftAmount:OFF', + '-Xep:CollectionUndefinedEquality:OFF', + '-Xep:UnescapedEntity:OFF', + '-Xep:BoxedPrimitiveEquality:OFF', + '-Xep:LogicalAssignment:OFF', + '-Xep:DoubleCheckedLocking:OFF', + '-Xep:AmbiguousMethodReference:OFF', + '-Xep:FormatString:OFF', + '-Xep:InstanceOfAndCastMatchWrongType:OFF', + '-Xep:ModifyCollectionInEnhancedForLoop:OFF', + '-Xep:JavaLangClash:OFF', + '-Xep:TypeParameterUnusedInFormals:OFF', + '-Xep:UnusedNestedClass:OFF', + '-Xep:OverrideThrowableToString:OFF', + '-Xep:FutureReturnValueIgnored:OFF', + '-Xep:BadInstanceof:OFF', + '-Xep:UnusedNestedClass:OFF', + '-Xep:OverrideThrowableToString:OFF', + '-Xep:EqualsIncompatibleType:OFF', + '-Xep:ByteBufferBackingArray:OFF', + '-Xep:ByteBufferBackingArray:OFF', + '-Xep:UnusedMethod:OFF', + '-Xep:ObjectsHashCodePrimitive:OFF', + '-Xep:ObjectsHashCodePrimitive:OFF', + '-Xep:UnnecessaryAnonymousClass:OFF', + '-Xep:BoxedPrimitiveConstructor:OFF', + '-Xep:ArgumentSelectionDefectChecker:OFF', + '-Xep:StringSplitter:OFF', + '-Xep:MixedMutabilityReturnType:OFF', + '-Xep:EqualsUnsafeCast:OFF', + '-Xep:OperatorPrecedence:OFF', + '-Xep:HidingField:OFF', + '-Xep:ThreadPriorityCheck:OFF', + '-Xep:InlineFormatString:OFF', + '-Xep:EqualsUnsafeCast:OFF', + '-Xep:UnsynchronizedOverridesSynchronized:OFF', + '-Xep:OperatorPrecedence:OFF', + '-Xep:ArrayToString:OFF', + '-Xep:ClassCanBeStatic:OFF', + '-Xep:InvalidInlineTag:OFF', + '-Xep:EmptyCatch:OFF', + '-Xep:UnnecessaryParentheses:OFF', + '-Xep:AlmostJavadoc:OFF', + '-Xep:Finally:OFF', + '-Xep:ImmutableEnumChecker:OFF', + '-Xep:NonAtomicVolatileUpdate:OFF', + '-Xep:MutablePublicArray:OFF', + '-Xep:LockNotBeforeTry:OFF', + '-Xep:WaitNotInLoop:OFF', + '-Xep:UndefinedEquals:OFF', + '-Xep:JdkObsolete:OFF', + '-Xep:NarrowingCompoundAssignment:OFF', + '-Xep:InconsistentCapitalization:OFF', + '-Xep:IntLongMath:OFF', + '-Xep:SynchronizeOnNonFinalField:OFF', + '-Xep:ThreadLocalUsage:OFF', + '-Xep:ProtectedMembersInFinalClass:OFF', + '-Xep:BadImport:OFF', + '-Xep:InconsistentHashCode:OFF', + '-Xep:MissingOverride:OFF', + '-Xep:EqualsGetClass:OFF', + '-Xep:PublicConstructorForAbstractClass:OFF', + '-Xep:EscapedEntity:OFF', + '-Xep:ModifiedButNotUsed:OFF', + '-Xep:ReferenceEquality:OFF', + '-Xep:InvalidBlockTag:OFF', + '-Xep:MissingSummary:OFF', + '-Xep:UnusedVariable:OFF' + ] + } + } +} diff --git a/lucene/core/src/java/org/apache/lucene/analysis/CharArrayMap.java b/lucene/core/src/java/org/apache/lucene/analysis/CharArrayMap.java index cad339b380fa..ac88886aac7d 100644 --- a/lucene/core/src/java/org/apache/lucene/analysis/CharArrayMap.java +++ b/lucene/core/src/java/org/apache/lucene/analysis/CharArrayMap.java @@ -523,6 +523,7 @@ public void clear() { * @throws NullPointerException * if the given map is null. */ + @SuppressWarnings("ReferenceEquality") public static CharArrayMap unmodifiableMap(CharArrayMap map) { if (map == null) throw new NullPointerException("Given map is null"); diff --git a/versions.lock b/versions.lock index 31b2ae55168c..8ac95dea82f1 100644 --- a/versions.lock +++ b/versions.lock @@ -22,7 +22,7 @@ com.github.virtuald:curvesapi:1.06 (1 constraints: db04f530) com.github.zafarkhaja:java-semver:0.9.0 (1 constraints: 0b050636) com.google.code.findbugs:annotations:3.0.1 (1 constraints: 0605fb35) com.google.code.findbugs:jsr305:3.0.2 (2 constraints: cd195721) -com.google.errorprone:error_prone_annotations:2.1.3 (1 constraints: 180aebb4) +com.google.errorprone:error_prone_annotations:2.4.0 (2 constraints: 1f0fd486) com.google.guava:guava:25.1-jre (1 constraints: 4a06b047) com.google.j2objc:j2objc-annotations:1.1 (1 constraints: b609eba0) com.google.protobuf:protobuf-java:3.11.0 (1 constraints: 3705383b) diff --git a/versions.props b/versions.props index 8c25e307d82d..39a4f175666b 100644 --- a/versions.props +++ b/versions.props @@ -8,6 +8,7 @@ com.fasterxml.jackson*:*=2.10.1 com.github.ben-manes.caffeine:caffeine=2.8.4 com.github.virtuald:curvesapi=1.06 com.github.zafarkhaja:java-semver=0.9.0 +com.google.errorprone:*=2.4.0 com.google.guava:guava=25.1-jre com.google.protobuf:protobuf-java=3.11.0 com.google.re2j:re2j=1.2