diff --git a/.mise.toml b/.mise.toml
index 4197e28c367..112526735c9 100644
--- a/.mise.toml
+++ b/.mise.toml
@@ -2,3 +2,4 @@
golangci-lint = "2.5.0"
gradle = "8.14.1"
java = "temurin-11.0.28+6"
+maven = "3.9.11"
diff --git a/pkg/cmd/pulumi-language-java/language_test.go b/pkg/cmd/pulumi-language-java/language_test.go
index 58ea8481518..3b43e3e1a78 100644
--- a/pkg/cmd/pulumi-language-java/language_test.go
+++ b/pkg/cmd/pulumi-language-java/language_test.go
@@ -128,7 +128,6 @@ func TestLanguage(t *testing.T) {
require.NoError(t, err)
for _, tt := range tests.Tests {
- tt := tt
t.Run(tt, func(t *testing.T) {
t.Parallel()
@@ -187,7 +186,6 @@ var expectedFailures = map[string]string{
"l2-component-property-deps": "compilation error",
"l2-parameterized-resource": "compilation error",
"l2-explicit-providers": "should have 6 item(s), but has 7",
- "l2-invoke-scalar": "exception at runtime",
"l3-component-simple": "compilation error",
"l1-builtin-cwd": "test failing",
"l1-stack-reference": "test failing",
@@ -234,7 +232,6 @@ var expectedFailures = map[string]string{
"l2-ref-ref": "test failing",
"l2-invoke-dependencies": "test failing",
"l2-destroy": "test failing",
- "l2-invoke-scalars": "not implemented",
}
// runTestingHost boots up a new instance of the language conformance test runner, `pulumi-test-language`, as well as a
diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalar/Pulumi.yaml b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalar/Pulumi.yaml
new file mode 100644
index 00000000000..621e69624a8
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalar/Pulumi.yaml
@@ -0,0 +1,2 @@
+name: l2-invoke-scalar
+runtime: java
diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalar/pom.xml b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalar/pom.xml
new file mode 100644
index 00000000000..83a3f14f575
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalar/pom.xml
@@ -0,0 +1,99 @@
+
+
+ 4.0.0
+
+ com.pulumi
+ l2-invoke-scalar
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+ 11
+ 11
+ 11
+ generated_program.App
+
+
+
+
+
+ repository-0
+ REPOSITORY
+
+
+
+
+
+ com.pulumi
+ pulumi
+ CORE.VERSION
+
+
+ com.pulumi
+ simple-invoke-with-scalar-return
+ 17.0.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.2.2
+
+
+
+ true
+ ${mainClass}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.4.2
+
+
+
+ true
+ ${mainClass}
+
+
+
+ jar-with-dependencies
+
+
+
+
+ make-my-jar-with-dependencies
+ package
+
+ single
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.1.0
+
+ ${mainClass}
+ ${mainArgs}
+
+
+
+ org.apache.maven.plugins
+ maven-wrapper-plugin
+ 3.1.1
+
+ 3.8.5
+
+
+
+
+
\ No newline at end of file
diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalar/src/main/java/generated_program/App.java b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalar/src/main/java/generated_program/App.java
new file mode 100644
index 00000000000..a7c20dff8ef
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalar/src/main/java/generated_program/App.java
@@ -0,0 +1,25 @@
+package generated_program;
+
+import com.pulumi.Context;
+import com.pulumi.Pulumi;
+import com.pulumi.core.Output;
+import com.pulumi.simpleinvokewithscalarreturn.SimpleinvokewithscalarreturnFunctions;
+import com.pulumi.simpleinvokewithscalarreturn.inputs.MyInvokeScalarArgs;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+public class App {
+ public static void main(String[] args) {
+ Pulumi.run(App::stack);
+ }
+
+ public static void stack(Context ctx) {
+ ctx.export("scalar", SimpleinvokewithscalarreturnFunctions.myInvokeScalar(MyInvokeScalarArgs.builder()
+ .value("goodbye")
+ .build()));
+ }
+}
diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalars/Pulumi.yaml b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalars/Pulumi.yaml
new file mode 100644
index 00000000000..4d5632d3e5f
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalars/Pulumi.yaml
@@ -0,0 +1,2 @@
+name: l2-invoke-scalars
+runtime: java
diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalars/pom.xml b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalars/pom.xml
new file mode 100644
index 00000000000..1caf6081702
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalars/pom.xml
@@ -0,0 +1,99 @@
+
+
+ 4.0.0
+
+ com.pulumi
+ l2-invoke-scalars
+ 1.0-SNAPSHOT
+
+
+ UTF-8
+ 11
+ 11
+ 11
+ generated_program.App
+
+
+
+
+
+ repository-0
+ REPOSITORY
+
+
+
+
+
+ com.pulumi
+ pulumi
+ CORE.VERSION
+
+
+ com.pulumi
+ scalar-returns
+ 21.0.0
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ 3.2.2
+
+
+
+ true
+ ${mainClass}
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-assembly-plugin
+ 3.4.2
+
+
+
+ true
+ ${mainClass}
+
+
+
+ jar-with-dependencies
+
+
+
+
+ make-my-jar-with-dependencies
+ package
+
+ single
+
+
+
+
+
+ org.codehaus.mojo
+ exec-maven-plugin
+ 3.1.0
+
+ ${mainClass}
+ ${mainArgs}
+
+
+
+ org.apache.maven.plugins
+ maven-wrapper-plugin
+ 3.1.1
+
+ 3.8.5
+
+
+
+
+
\ No newline at end of file
diff --git a/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalars/src/main/java/generated_program/App.java b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalars/src/main/java/generated_program/App.java
new file mode 100644
index 00000000000..f482129fbfd
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/projects/l2-invoke-scalars/src/main/java/generated_program/App.java
@@ -0,0 +1,36 @@
+package generated_program;
+
+import com.pulumi.Context;
+import com.pulumi.Pulumi;
+import com.pulumi.core.Output;
+import com.pulumi.scalarreturns.ScalarreturnsFunctions;
+import com.pulumi.scalarreturns.inputs.InvokeSecretArgs;
+import com.pulumi.scalarreturns.inputs.InvokeArrayArgs;
+import com.pulumi.scalarreturns.inputs.InvokeMapArgs;
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Map;
+import java.io.File;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+
+public class App {
+ public static void main(String[] args) {
+ Pulumi.run(App::stack);
+ }
+
+ public static void stack(Context ctx) {
+ ctx.export("secret", ScalarreturnsFunctions.invokeSecret(InvokeSecretArgs.builder()
+ .value("goodbye")
+ .build()));
+ ctx.export("array", ScalarreturnsFunctions.invokeArray(InvokeArrayArgs.builder()
+ .value("the word")
+ .build()));
+ ctx.export("map", ScalarreturnsFunctions.invokeMap(InvokeMapArgs.builder()
+ .value("hello")
+ .build()));
+ ctx.export("secretMap", ScalarreturnsFunctions.invokeMap(InvokeMapArgs.builder()
+ .value("secret")
+ .build()));
+ }
+}
diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/any-type-function-15.0.0/src/main/java/com/pulumi/anytypefunction/AnytypefunctionFunctions.java b/pkg/cmd/pulumi-language-java/testdata/sdks/any-type-function-15.0.0/src/main/java/com/pulumi/anytypefunction/AnytypefunctionFunctions.java
index 21206f83a24..b2df89cfb89 100644
--- a/pkg/cmd/pulumi-language-java/testdata/sdks/any-type-function-15.0.0/src/main/java/com/pulumi/anytypefunction/AnytypefunctionFunctions.java
+++ b/pkg/cmd/pulumi-language-java/testdata/sdks/any-type-function-15.0.0/src/main/java/com/pulumi/anytypefunction/AnytypefunctionFunctions.java
@@ -28,12 +28,15 @@ public static CompletableFuture dynListToDynPlain(DynListToD
return dynListToDynPlain(args, InvokeOptions.Empty);
}
public static Output dynListToDyn(DynListToDynArgs args, InvokeOptions options) {
- return Deployment.getInstance().invoke("any-type-function:index:dynListToDyn", TypeShape.of(DynListToDynResult.class), args, Utilities.withVersion(options));
+ var result = Deployment.getInstance().invoke("any-type-function:index:dynListToDyn", TypeShape.of(DynListToDynResult.class), args, Utilities.withVersion(options));
+ return result;
}
public static Output dynListToDyn(DynListToDynArgs args, InvokeOutputOptions options) {
- return Deployment.getInstance().invoke("any-type-function:index:dynListToDyn", TypeShape.of(DynListToDynResult.class), args, Utilities.withVersion(options));
+ var result = Deployment.getInstance().invoke("any-type-function:index:dynListToDyn", TypeShape.of(DynListToDynResult.class), args, Utilities.withVersion(options));
+ return result;
}
public static CompletableFuture dynListToDynPlain(DynListToDynPlainArgs args, InvokeOptions options) {
- return Deployment.getInstance().invokeAsync("any-type-function:index:dynListToDyn", TypeShape.of(DynListToDynResult.class), args, Utilities.withVersion(options));
+ var result = Deployment.getInstance().invokeAsync("any-type-function:index:dynListToDyn", TypeShape.of(DynListToDynResult.class), args, Utilities.withVersion(options));
+ return result;
}
}
diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/README.md b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/README.md
new file mode 100644
index 00000000000..8d1c8b69c3f
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/README.md
@@ -0,0 +1 @@
+
diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/build.gradle b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/build.gradle
new file mode 100644
index 00000000000..7f983132c63
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/build.gradle
@@ -0,0 +1,159 @@
+// *** WARNING: this file was generated by pulumi-java-gen ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+plugins {
+ id("signing")
+ id("java-library")
+ id("maven-publish")
+ id("io.github.gradle-nexus.publish-plugin") version "2.0.0"
+}
+
+group = "com.pulumi"
+
+def resolvedVersion = System.getenv("PACKAGE_VERSION") ?:
+ (project.version == "unspecified"
+ ? "21.0.0"
+ : project.version)
+
+def signingKey = System.getenv("SIGNING_KEY")
+def signingPassword = System.getenv("SIGNING_PASSWORD")
+def publishRepoURL = System.getenv("PUBLISH_REPO_URL") ?: "https://central.sonatype.com/repository/maven-snapshots/"
+def publishStagingURL = System.getenv("PUBLISH_STAGING_URL") ?: "https://ossrh-staging-api.central.sonatype.com/service/local/"
+def publishRepoUsername = System.getenv("PUBLISH_REPO_USERNAME")
+def publishRepoPassword = System.getenv("PUBLISH_REPO_PASSWORD")
+
+java {
+ toolchain {
+ languageVersion = JavaLanguageVersion.of(11)
+ }
+}
+
+compileJava {
+ options.fork = true
+ options.forkOptions.jvmArgs.addAll(["-Xmx16g"])
+ options.encoding = "UTF-8"
+}
+
+repositories {
+ maven {
+ url("REPOSITORY")
+ }
+ mavenLocal()
+ maven { // The google mirror is less flaky than mavenCentral()
+ url("https://maven-central.storage-download.googleapis.com/maven2/")
+ }
+ mavenCentral()
+}
+
+dependencies {
+ implementation("com.google.code.findbugs:jsr305:3.0.2")
+ implementation("com.google.code.gson:gson:2.8.9")
+ implementation("com.pulumi:pulumi:CORE.VERSION")
+}
+
+task sourcesJar(type: Jar) {
+ from sourceSets.main.allJava
+ archiveClassifier.set('sources')
+}
+
+task javadocJar(type: Jar) {
+ from javadoc
+ archiveClassifier.set('javadoc')
+ zip64 = true
+}
+
+def genPulumiResources = tasks.register('genPulumiResources') {
+ doLast {
+ def resourcesDir = sourceSets.main.output.resourcesDir
+ def subDir = project.name.replace(".", "/")
+ def outDir = file("$resourcesDir/$subDir")
+ outDir.mkdirs()
+ new File(outDir, "version.txt").text = resolvedVersion
+ def builder = new groovy.json.JsonBuilder()
+ builder {
+ resource true
+ name "scalar-returns"
+ version resolvedVersion
+ }
+ def infoJson = builder.toPrettyString()
+ new File(outDir, "plugin.json").text = infoJson
+ }
+}
+
+jar.configure {
+ dependsOn genPulumiResources
+}
+
+publishing {
+ publications {
+ mainPublication(MavenPublication) {
+ groupId = "com.pulumi"
+ artifactId = "scalar-returns"
+ version = resolvedVersion
+ from components.java
+ artifact sourcesJar
+ artifact javadocJar
+
+ pom {
+ inceptionYear = ""
+ name = ""
+ packaging = "jar"
+ description = " "
+
+ url = "https://example.com"
+
+ scm {
+ connection = "https://example.com"
+ developerConnection = "https://example.com"
+ url = "https://example.com"
+ }
+
+ licenses {
+ license {
+ name = ""
+ url = ""
+ }
+ }
+
+ developers {
+ developer {
+ id = ""
+ name = ""
+ email = ""
+ }
+ }
+ }
+ }
+ }
+}
+
+javadoc {
+ if (JavaVersion.current().isJava9Compatible()) {
+ options.addBooleanOption('html5', true)
+ }
+ options.jFlags("-Xmx8g", "-Xms512m")
+}
+
+jar {
+ zip64 = true
+}
+
+if (publishRepoUsername) {
+ nexusPublishing {
+ repositories {
+ sonatype {
+ nexusUrl.set(uri(publishStagingURL))
+ snapshotRepositoryUrl.set(uri(publishRepoURL))
+ username = publishRepoUsername
+ password = publishRepoPassword
+ }
+ }
+ }
+}
+
+if (signingKey) {
+ signing {
+ useInMemoryPgpKeys(signingKey, signingPassword)
+ sign publishing.publications.mainPublication
+ }
+}
diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/settings.gradle b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/settings.gradle
new file mode 100644
index 00000000000..c70507fedac
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/settings.gradle
@@ -0,0 +1,14 @@
+// *** WARNING: this file was generated by pulumi-java-gen. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+pluginManagement {
+ repositories {
+ maven { // The google mirror is less flaky than mavenCentral()
+ url("https://maven-central.storage-download.googleapis.com/maven2/")
+ }
+ gradlePluginPortal()
+ }
+}
+
+rootProject.name = "com.pulumi.scalar-returns"
+include("lib")
diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/src/main/java/com/pulumi/scalarreturns/Provider.java b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/src/main/java/com/pulumi/scalarreturns/Provider.java
new file mode 100644
index 00000000000..a302a4d1c6e
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/src/main/java/com/pulumi/scalarreturns/Provider.java
@@ -0,0 +1,54 @@
+// *** WARNING: this file was generated by pulumi-language-java. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+package com.pulumi.scalarreturns;
+
+import com.pulumi.core.Output;
+import com.pulumi.core.annotations.ResourceType;
+import com.pulumi.core.internal.Codegen;
+import com.pulumi.scalarreturns.ProviderArgs;
+import com.pulumi.scalarreturns.Utilities;
+import javax.annotation.Nullable;
+
+@ResourceType(type="pulumi:providers:scalar-returns")
+public class Provider extends com.pulumi.resources.ProviderResource {
+ /**
+ *
+ * @param name The _unique_ name of the resulting resource.
+ */
+ public Provider(java.lang.String name) {
+ this(name, ProviderArgs.Empty);
+ }
+ /**
+ *
+ * @param name The _unique_ name of the resulting resource.
+ * @param args The arguments to use to populate this resource's properties.
+ */
+ public Provider(java.lang.String name, @Nullable ProviderArgs args) {
+ this(name, args, null);
+ }
+ /**
+ *
+ * @param name The _unique_ name of the resulting resource.
+ * @param args The arguments to use to populate this resource's properties.
+ * @param options A bag of options that control this resource's behavior.
+ */
+ public Provider(java.lang.String name, @Nullable ProviderArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) {
+ super("scalar-returns", name, makeArgs(args, options), makeResourceOptions(options, Codegen.empty()), false);
+ }
+
+ private static ProviderArgs makeArgs(@Nullable ProviderArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) {
+ if (options != null && options.getUrn().isPresent()) {
+ return null;
+ }
+ return args == null ? ProviderArgs.Empty : args;
+ }
+
+ private static com.pulumi.resources.CustomResourceOptions makeResourceOptions(@Nullable com.pulumi.resources.CustomResourceOptions options, @Nullable Output id) {
+ var defaultOptions = com.pulumi.resources.CustomResourceOptions.builder()
+ .version(Utilities.getVersion())
+ .build();
+ return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id);
+ }
+
+}
diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/src/main/java/com/pulumi/scalarreturns/ProviderArgs.java b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/src/main/java/com/pulumi/scalarreturns/ProviderArgs.java
new file mode 100644
index 00000000000..84840438f92
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/src/main/java/com/pulumi/scalarreturns/ProviderArgs.java
@@ -0,0 +1,28 @@
+// *** WARNING: this file was generated by pulumi-language-java. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+package com.pulumi.scalarreturns;
+
+
+
+
+public final class ProviderArgs extends com.pulumi.resources.ResourceArgs {
+
+ public static final ProviderArgs Empty = new ProviderArgs();
+
+ public static Builder builder() {
+ return new Builder();
+ }
+
+ public static final class Builder {
+ private ProviderArgs $;
+
+ public Builder() {
+ $ = new ProviderArgs();
+ }
+ public ProviderArgs build() {
+ return $;
+ }
+ }
+
+}
diff --git a/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/src/main/java/com/pulumi/scalarreturns/ScalarreturnsFunctions.java b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/src/main/java/com/pulumi/scalarreturns/ScalarreturnsFunctions.java
new file mode 100644
index 00000000000..8cd6ae1cb92
--- /dev/null
+++ b/pkg/cmd/pulumi-language-java/testdata/sdks/scalar-returns-21.0.0/src/main/java/com/pulumi/scalarreturns/ScalarreturnsFunctions.java
@@ -0,0 +1,80 @@
+// *** WARNING: this file was generated by pulumi-language-java. ***
+// *** Do not edit by hand unless you're certain you know what you are doing! ***
+
+package com.pulumi.scalarreturns;
+
+import com.pulumi.core.Output;
+import com.pulumi.core.TypeShape;
+import com.pulumi.deployment.Deployment;
+import com.pulumi.deployment.InvokeOptions;
+import com.pulumi.deployment.InvokeOutputOptions;
+import com.pulumi.scalarreturns.Utilities;
+import com.pulumi.scalarreturns.inputs.InvokeArrayArgs;
+import com.pulumi.scalarreturns.inputs.InvokeArrayPlainArgs;
+import com.pulumi.scalarreturns.inputs.InvokeMapArgs;
+import com.pulumi.scalarreturns.inputs.InvokeMapPlainArgs;
+import com.pulumi.scalarreturns.inputs.InvokeSecretArgs;
+import com.pulumi.scalarreturns.inputs.InvokeSecretPlainArgs;
+import java.lang.Boolean;
+import java.lang.Double;
+import java.lang.String;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+
+public final class ScalarreturnsFunctions {
+ public static Output> invokeArray(InvokeArrayArgs args) {
+ return invokeArray(args, InvokeOptions.Empty);
+ }
+ public static CompletableFuture> invokeArrayPlain(InvokeArrayPlainArgs args) {
+ return invokeArrayPlain(args, InvokeOptions.Empty);
+ }
+ public static Output> invokeArray(InvokeArrayArgs args, InvokeOptions options) {
+ var result = Deployment.getInstance().invoke("scalar-returns:index:invokeArray", TypeShape.map(String.class, List.class), args, Utilities.withVersion(options));
+ return result.applyValue(m -> (List)m.values().toArray()[0]);
+ }
+ public static Output> invokeArray(InvokeArrayArgs args, InvokeOutputOptions options) {
+ var result = Deployment.getInstance().invoke("scalar-returns:index:invokeArray", TypeShape.map(String.class, List.class), args, Utilities.withVersion(options));
+ return result.applyValue(m -> (List)(m.values().toArray()[0]));
+ }
+ public static CompletableFuture> invokeArrayPlain(InvokeArrayPlainArgs args, InvokeOptions options) {
+ var result = Deployment.getInstance().invokeAsync("scalar-returns:index:invokeArray", TypeShape.map(String.class, List.class), args, Utilities.withVersion(options));
+ return result.thenApply(m -> (List)(m.values().toArray()[0]));
+ }
+ public static Output