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

hossman pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/branch_9x by this push:
     new fb4d7d2ec9f SOLR-16258: Gradle no longer uses errorprone by default
fb4d7d2ec9f is described below

commit fb4d7d2ec9fed455e7ce2044324c42cfe88436f8
Author: Chris Hostetter <[email protected]>
AuthorDate: Mon Jun 27 08:44:08 2022 -0700

    SOLR-16258: Gradle no longer uses errorprone by default
    
    (cherry picked from commit f97954556d144bd0bc8789dbb79ffb513ce80e61)
---
 gradle/generation/local-settings.gradle | 26 +++++++++++++++++++++++++-
 gradle/globals.gradle                   |  5 +++++
 gradle/validation/error-prone.gradle    | 19 +++++++++++++++----
 gradle/validation/spotless.gradle       |  2 ++
 help/localSettings.txt                  |  7 ++++++-
 solr/CHANGES.txt                        |  2 ++
 6 files changed, 55 insertions(+), 6 deletions(-)

diff --git a/gradle/generation/local-settings.gradle 
b/gradle/generation/local-settings.gradle
index 1fd1f72291e..408f25e15a2 100644
--- a/gradle/generation/local-settings.gradle
+++ b/gradle/generation/local-settings.gradle
@@ -22,6 +22,30 @@
 def hasDefaults = rootProject.file("gradle.properties").exists()
 
 configure(rootProject) {
+  // Add a task verifying that gradle process has access to JVM internals.
+  // this is occasionally needed for certain tasks.
+  task checkJdkInternalsExportedToGradle() {
+    doFirst {
+      def jdkCompilerModule = 
ModuleLayer.boot().findModule("jdk.compiler").orElseThrow()
+      def gradleModule = getClass().module
+      def internalsExported = [
+          "com.sun.tools.javac.api",
+          "com.sun.tools.javac.file",
+          "com.sun.tools.javac.parser",
+          "com.sun.tools.javac.tree",
+          "com.sun.tools.javac.util"
+      ].stream()
+        .allMatch(pkg -> jdkCompilerModule.isExported(pkg, gradleModule))
+
+      if (!internalsExported) {
+        throw new GradleException(
+            "Certain gradle tasks and plugins require access to jdk.compiler" +
+                " internals, your gradle.properties might have just been 
generated or could be" +
+                " out of sync (see help/localSettings.txt)")
+      }
+    }
+  }
+
   task localSettings() {
     doFirst {
       // If we don't have the defaults yet, create them.
@@ -43,7 +67,7 @@ systemProp.file.encoding=UTF-8
 # Set up gradle JVM defaults.
 # The heap seems huge but gradle runs out of memory on lower values (don't 
know why).
 #
-# We also open up internal compiler modules for spotless/ google jaa format.
+# We also open up internal compiler modules for spotless/ google java format.
 org.gradle.jvmargs=-Xmx3g \\
  --add-exports jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED \\
  --add-exports jdk.compiler/com.sun.tools.javac.file=ALL-UNNAMED \\
diff --git a/gradle/globals.gradle b/gradle/globals.gradle
index a854304d475..912e6074b44 100644
--- a/gradle/globals.gradle
+++ b/gradle/globals.gradle
@@ -151,5 +151,10 @@ allprojects {
       }
       return taskList
     }
+
+    // detect if we run in CI environment by looking at existence of env vars:
+    // "CI": Github 
(https://docs.github.com/en/actions/learn-github-actions/environment-variables)
+    // anything starting with "JENKINS_" or "HUDSON_": Jenkins/Hudson 
(https://jenkins.thetaphi.de/env-vars.html/)
+    isCIBuild = System.getenv().keySet().find { it ==~ 
/(?i)((JENKINS|HUDSON)(_\w+)?|CI)/ } != null
   }
 }
diff --git a/gradle/validation/error-prone.gradle 
b/gradle/validation/error-prone.gradle
index b66da215ace..12f655f219e 100644
--- a/gradle/validation/error-prone.gradle
+++ b/gradle/validation/error-prone.gradle
@@ -15,12 +15,21 @@
  * limitations under the License.
  */
 
-def skipErrorProne = rootProject.usesAltJvm && rootProject.runtimeJavaVersion 
> JavaVersion.VERSION_15;
-if (skipErrorProne) {
+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 (won't work with JDK 
${rootProject.runtimeJavaVersion} if used as alternative java toolchain)")
+        logger.warn("WARNING: errorprone disabled (${skipReason})")
       }
     }
   }
@@ -33,7 +42,7 @@ allprojects { prj ->
     // 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 (skipErrorProne) {
+    if (skipReason) {
       tasks.withType(JavaCompile) { task -> task.dependsOn 
":errorProneSkipped" }
       configurations {
         errorprone
@@ -49,6 +58,8 @@ allprojects { prj ->
       }
 
       tasks.withType(JavaCompile) { task ->
+        task.dependsOn ":checkJdkInternalsExportedToGradle"
+
         options.errorprone.disableWarningsInGeneratedCode = true
         options.errorprone.errorproneArgs = [
             '-Xep:InlineMeSuggester:OFF', // We don't use this annotation
diff --git a/gradle/validation/spotless.gradle 
b/gradle/validation/spotless.gradle
index 4047fc5c454..b028fe00168 100644
--- a/gradle/validation/spotless.gradle
+++ b/gradle/validation/spotless.gradle
@@ -79,9 +79,11 @@ configure(project(":solr").subprojects) { prj ->
 
   tasks.matching { task -> task.name == "spotlessApply" }.configureEach { v ->
     tidy.dependsOn v
+    v.dependsOn ":checkJdkInternalsExportedToGradle"
   }
 
   tasks.matching { task -> task.name == "spotlessCheck" }.configureEach { v ->
     check.dependsOn v
+    v.dependsOn ":checkJdkInternalsExportedToGradle"
   }
 }
diff --git a/help/localSettings.txt b/help/localSettings.txt
index 13364974b06..4af8411d1c3 100644
--- a/help/localSettings.txt
+++ b/help/localSettings.txt
@@ -4,7 +4,12 @@ Local developer settings
 The first invocation of any task in Solr gradle build will generate
 and save a project-local 'gradle.properties' file. This file contains
 the defaults you may (but don't have to) tweak for your particular hardware
-(or taste).
+(or taste). Note there are certain settings in that file that may
+be _required_ at runtime for certain plugins (an example is the spotless/
+google java format plugin, which requires adding custom exports to JVM 
modules). Gradle
+build only generates this file if it's not already present (it never overwrites
+the defaults) -- occasionally you may have to manually delete (or move) this
+file and regenerate from scratch.
 
 This is an overview of some of these settings.
 
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 628930c6f90..0fc3362b380 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -99,6 +99,8 @@ Build
 
 * Upgrade forbiddenapis to 3.3 (Uwe Schindler)
 
+* SOLR-16258: Gradle no longer uses "errorprone" by default (Dawid Weiss, Uwe 
Schindler, hossman)
+
 ==================  9.0.0 ==================
 
 New Features

Reply via email to