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