You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by th...@apache.org on 2020/09/14 16:38:32 UTC

[lucene-solr] 14/39: LUCENE-9497: Integerate Error Prone ( Static Analysis Tool ) during compilation (#1816)

This is an automated email from the ASF dual-hosted git repository.

thelabdude pushed a commit to branch reference_impl_gradle_updates
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git

commit 17a3ba723ae0041e608103523201a381d4ebc2e8
Author: Varun Thacker <vt...@users.noreply.github.com>
AuthorDate: Mon Sep 7 14:42:48 2020 -0700

    LUCENE-9497: Integerate Error Prone ( Static Analysis Tool ) during compilation (#1816)
    
    LUCENE-9497:  Integrate Error Prone, a static analysis tool during compilation
---
 build.gradle                                       |   2 +
 gradle/defaults-java.gradle                        |   5 +-
 gradle/hacks/findbugs.gradle                       |   6 +-
 gradle/validation/error-prone.gradle               | 149 +++++++++++++++++++++
 lucene/CHANGES.txt                                 |   5 +
 .../org/apache/lucene/analysis/CharArrayMap.java   |   1 +
 versions.props                                     |   1 +
 7 files changed, 166 insertions(+), 3 deletions(-)

diff --git a/build.gradle b/build.gradle
index d20deeb..f01045b 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 e739a19..9495268 100644
--- a/gradle/defaults-java.gradle
+++ b/gradle/defaults-java.gradle
@@ -39,8 +39,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 bdbdb7e..f228738 100644
--- a/gradle/hacks/findbugs.gradle
+++ b/gradle/hacks/findbugs.gradle
@@ -16,12 +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:contrib:prometheus-exporter"),
+           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 0000000..d91fbb4
--- /dev/null
+++ b/gradle/validation/error-prone.gradle
@@ -0,0 +1,149 @@
+/*
+ * 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.disableWarningsInGeneratedCode = true
+      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/CHANGES.txt b/lucene/CHANGES.txt
index d8bdf7f..6418f4d 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -255,6 +255,11 @@ Documentation
 
 * LUCENE-9424: Add a performance warning to AttributeSource.captureState javadocs (Haoyu Zhai)
 
+Other
+---------------------
+
+* LUCENE-9497: Integrate Error Prone, a static analysis tool during compilation (Dawid Weiss, Varun Thacker)
+
 
 Other
 ---------------------
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 cad339b..ac88886 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 class CharArrayMap<V> extends AbstractMap<Object,V> {
    * @throws NullPointerException
    *           if the given map is <code>null</code>.
    */
+  @SuppressWarnings("ReferenceEquality")
   public static <V> CharArrayMap<V> unmodifiableMap(CharArrayMap<V> map) {
     if (map == null)
       throw new NullPointerException("Given map is null");
diff --git a/versions.props b/versions.props
index 5477dfd..dea7c34 100644
--- a/versions.props
+++ b/versions.props
@@ -11,6 +11,7 @@ com.fasterxml.woodstox:woodstox-core:6.0.3
 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