File 0002-Introduce-JvmImplementation.ANY-to-truly-select-any-.patch of Package gradle

From 3afb491734302a3b6097c6d68454ee73b4ad567d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pedro=20Lamar=C3=A3o?= <pedro.lamarao@gmail.com>
Date: Thu, 5 May 2022 16:36:35 -0300
Subject: [PATCH 2/3] Introduce JvmImplementation.ANY to truly select any JVM
 implementation.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: Pedro LamarĂ£o <pedro.lamarao@gmail.com>
---
 .../gradle/jvm/toolchain/JvmImplementation.java |  8 ++++++++
 .../toolchain/internal/ToolchainMatcher.java    |  4 +++-
 .../JavaToolchainQueryServiceTest.groovy        | 17 +++++++++++++++++
 3 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/subprojects/platform-jvm/src/main/java/org/gradle/jvm/toolchain/JvmImplementation.java b/subprojects/platform-jvm/src/main/java/org/gradle/jvm/toolchain/JvmImplementation.java
index aacbb6445eb..a5a284a1036 100644
--- a/subprojects/platform-jvm/src/main/java/org/gradle/jvm/toolchain/JvmImplementation.java
+++ b/subprojects/platform-jvm/src/main/java/org/gradle/jvm/toolchain/JvmImplementation.java
@@ -24,6 +24,14 @@
  */
 public final class JvmImplementation {
 
+    /**
+     * Any virtual machine implementation.
+     *
+     * Matches any implementation from any vendor.
+     * Does not prefer a "vendor-specific" implementation over known implementations.
+     */
+    public static final JvmImplementation ANY = new JvmImplementation("any");
+
     /**
      * Vendor-specific virtual machine implementation.
      *
diff --git a/subprojects/platform-jvm/src/main/java/org/gradle/jvm/toolchain/internal/ToolchainMatcher.java b/subprojects/platform-jvm/src/main/java/org/gradle/jvm/toolchain/internal/ToolchainMatcher.java
index 99140f070fd..af18aca6732 100644
--- a/subprojects/platform-jvm/src/main/java/org/gradle/jvm/toolchain/internal/ToolchainMatcher.java
+++ b/subprojects/platform-jvm/src/main/java/org/gradle/jvm/toolchain/internal/ToolchainMatcher.java
@@ -41,8 +41,10 @@ private Predicate<JavaToolchain> languagePredicate() {
 
     private Predicate<? super JavaToolchain> implementationPredicate() {
         return toolchain -> {
+            final JvmImplementation requested = filter.getImplementation().get();
+            if (requested == JvmImplementation.ANY) return true;
             final boolean isJ9Vm = toolchain.getMetadata().hasCapability(JvmInstallationMetadata.JavaInstallationCapability.J9_VIRTUAL_MACHINE);
-            final boolean j9Requested = filter.getImplementation().get() == JvmImplementation.J9;
+            final boolean j9Requested = requested == JvmImplementation.J9;
             return j9Requested == isJ9Vm;
         };
     }
diff --git a/subprojects/platform-jvm/src/test/groovy/org/gradle/jvm/toolchain/internal/JavaToolchainQueryServiceTest.groovy b/subprojects/platform-jvm/src/test/groovy/org/gradle/jvm/toolchain/internal/JavaToolchainQueryServiceTest.groovy
index e6dd2b7ef84..c2a9782cfb0 100644
--- a/subprojects/platform-jvm/src/test/groovy/org/gradle/jvm/toolchain/internal/JavaToolchainQueryServiceTest.groovy
+++ b/subprojects/platform-jvm/src/test/groovy/org/gradle/jvm/toolchain/internal/JavaToolchainQueryServiceTest.groovy
@@ -136,6 +136,23 @@ class JavaToolchainQueryServiceTest extends Specification {
         toolchain.getInstallationPath().toString() == systemSpecificAbsolutePath("/path/8.0.1.hs")
     }
 
+    def "select any implementation, with no preference" () {
+        given:
+        def registry = createInstallationRegistry(["8.0.2.j9", "8.0.1.hs"])
+        def toolchainFactory = newToolchainFactory()
+        def queryService = new JavaToolchainQueryService(registry, toolchainFactory, Mock(JavaToolchainProvisioningService), createProviderFactory())
+
+        when:
+        def filter = new DefaultToolchainSpec(TestUtil.objectFactory())
+        filter.languageVersion.set(JavaLanguageVersion.of(8))
+        filter.implementation.set(JvmImplementation.ANY)
+        def toolchain = queryService.findMatchingToolchain(filter).get()
+
+        then:
+        toolchain.languageVersion == JavaLanguageVersion.of(8)
+        toolchain.getInstallationPath().toString() == systemSpecificAbsolutePath("/path/8.0.2.j9")
+    }
+
     def "ignores invalid toolchains when finding a matching one"() {
         given:
         def registry = createInstallationRegistry(["8.0", "8.0.242.hs-adpt", "8.0.broken"])
-- 
2.36.1

openSUSE Build Service is sponsored by