From 17eb5232e72aeb5c6c0faf25d580f46eefdb08d6 Mon Sep 17 00:00:00 2001 From: Brian Laub Date: Fri, 17 Mar 2023 08:56:20 -0400 Subject: [PATCH 1/2] use provider when setting jaxrs and annotation dependencies --- .../conjure/ConjureJavaLocalCodegenPlugin.java | 6 +++--- .../palantir/gradle/conjure/ConjurePlugin.java | 16 +++++++++------- .../palantir/gradle/conjure/Dependencies.java | 11 ++++++++++- 3 files changed, 22 insertions(+), 11 deletions(-) diff --git a/gradle-conjure/src/main/java/com/palantir/gradle/conjure/ConjureJavaLocalCodegenPlugin.java b/gradle-conjure/src/main/java/com/palantir/gradle/conjure/ConjureJavaLocalCodegenPlugin.java index 6bd5fc2f6..3cb8abe75 100644 --- a/gradle-conjure/src/main/java/com/palantir/gradle/conjure/ConjureJavaLocalCodegenPlugin.java +++ b/gradle-conjure/src/main/java/com/palantir/gradle/conjure/ConjureJavaLocalCodegenPlugin.java @@ -112,11 +112,11 @@ private static void createGenerateTask( project.getDependencies().add("api", Dependencies.CONJURE_JAVA_LIB); project.getDependencies().add("implementation", Dependencies.JETBRAINS_ANNOTATIONS); - boolean useJakarta = Dependencies.isJakartaPackages(extension.getJava()); project.getDependencies() - .add( + .addProvider( "compileOnly", - useJakarta ? Dependencies.ANNOTATION_API_JAKARTA : Dependencies.ANNOTATION_API_JAVAX); + project.getProviders() + .provider(() -> Dependencies.getAnnotationApiDependency(extension::getJava))); TaskProvider generateGitIgnore = ConjurePlugin.createWriteGitignoreTask( project, "gitignoreConjure", project.getProjectDir(), ConjurePlugin.JAVA_GITIGNORE_CONTENTS); diff --git a/gradle-conjure/src/main/java/com/palantir/gradle/conjure/ConjurePlugin.java b/gradle-conjure/src/main/java/com/palantir/gradle/conjure/ConjurePlugin.java index 7cb6812d3..93a85dac2 100644 --- a/gradle-conjure/src/main/java/com/palantir/gradle/conjure/ConjurePlugin.java +++ b/gradle-conjure/src/main/java/com/palantir/gradle/conjure/ConjurePlugin.java @@ -281,23 +281,25 @@ private static void setupDialogueProject(Project project, Supplier optionsSupplier) { - boolean useJakarta = Dependencies.isJakartaPackages(optionsSupplier.get()); project.getDependencies().add("api", "com.google.guava:guava"); project.getDependencies().add("api", "com.squareup.retrofit2:retrofit"); project.getDependencies() - .add( + .addProvider( "compileOnly", - useJakarta ? Dependencies.ANNOTATION_API_JAKARTA : Dependencies.ANNOTATION_API_JAVAX); + project.getProviders() + .provider(() -> Dependencies.getAnnotationApiDependency(optionsSupplier))); } private static void setupJerseyProject(Project project, Supplier optionsSupplier) { - boolean useJakarta = Dependencies.isJakartaPackages(optionsSupplier.get()); project.getDependencies() - .add("api", useJakarta ? Dependencies.JAXRS_API_JAKARTA : Dependencies.JAXRS_API_JAVAX); + .addProvider( + "api", + project.getProviders().provider(() -> Dependencies.getJaxrsApiDependency(optionsSupplier))); project.getDependencies() - .add( + .addProvider( "compileOnly", - useJakarta ? Dependencies.ANNOTATION_API_JAKARTA : Dependencies.ANNOTATION_API_JAVAX); + project.getProviders() + .provider(() -> Dependencies.getAnnotationApiDependency(optionsSupplier))); } private static void setupUndertowProject(Project project, Supplier _optionsSupplier) { diff --git a/gradle-conjure/src/main/java/com/palantir/gradle/conjure/Dependencies.java b/gradle-conjure/src/main/java/com/palantir/gradle/conjure/Dependencies.java index f8d4ec05a..324a31bfc 100644 --- a/gradle-conjure/src/main/java/com/palantir/gradle/conjure/Dependencies.java +++ b/gradle-conjure/src/main/java/com/palantir/gradle/conjure/Dependencies.java @@ -17,6 +17,7 @@ package com.palantir.gradle.conjure; import com.palantir.gradle.conjure.api.GeneratorOptions; +import java.util.function.Supplier; final class Dependencies { @@ -37,9 +38,17 @@ final class Dependencies { private static final String JAKARTA_PACKAGES = "jakartaPackages"; - static boolean isJakartaPackages(GeneratorOptions options) { + private static boolean isJakartaPackages(GeneratorOptions options) { return options.has(JAKARTA_PACKAGES) && Boolean.TRUE.equals(options.get(JAKARTA_PACKAGES)); } + static String getJaxrsApiDependency(Supplier optionsSupplier) { + return isJakartaPackages(optionsSupplier.get()) ? JAXRS_API_JAKARTA : JAXRS_API_JAVAX; + } + + static String getAnnotationApiDependency(Supplier optionsSupplier) { + return isJakartaPackages(optionsSupplier.get()) ? ANNOTATION_API_JAKARTA : ANNOTATION_API_JAVAX; + } + private Dependencies() {} } From 0af3daa4125cafe2b227126c6c0b5d3bd59bfa02 Mon Sep 17 00:00:00 2001 From: Brian Laub Date: Fri, 17 Mar 2023 12:40:35 -0400 Subject: [PATCH 2/2] add integration test for jakartaPackages flag --- .../gradle/conjure/ConjurePluginTest.groovy | 32 +++++++++++++++++++ .../palantir/gradle/conjure/TestVersions.java | 2 +- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/gradle-conjure/src/test/groovy/com/palantir/gradle/conjure/ConjurePluginTest.groovy b/gradle-conjure/src/test/groovy/com/palantir/gradle/conjure/ConjurePluginTest.groovy index 029d83671..196ce5f31 100644 --- a/gradle-conjure/src/test/groovy/com/palantir/gradle/conjure/ConjurePluginTest.groovy +++ b/gradle-conjure/src/test/groovy/com/palantir/gradle/conjure/ConjurePluginTest.groovy @@ -509,6 +509,38 @@ class ConjurePluginTest extends IntegrationSpec { 'peer' | '' } + def 'featureFlag JakartaPackages can be enabled: #location'() { + file('api/build.gradle') << ''' + conjure { + java { + jakartaPackages = true + } + } + '''.stripIndent() + updateSettings(prefix) + + when: + runTasksSuccessfully(':api:compileConjureJersey') + ExecutionResult jerseyDependenciesResult = runTasksSuccessfully(prefixProject(prefix, 'api-jersey:dependencies')) + + then: + String generatedServicePath = prefixPath(prefix, 'api-jersey/src/generated/java/test/test/api/TestServiceFoo.java') + fileExists(generatedServicePath) + File generatedService = new File(projectDir, generatedServicePath) + generatedService.text.contains("import jakarta.ws.rs") + !generatedService.text.contains("import javax.ws.rs") + + jerseyDependenciesResult.standardOutput.contains("jakarta.ws.rs:jakarta.ws.rs-api") + jerseyDependenciesResult.standardOutput.contains("jakarta.annotation:jakarta.annotation-api") + !jerseyDependenciesResult.standardOutput.contains("javax.ws.rs:javax.ws.rs-api") + !jerseyDependenciesResult.standardOutput.contains("javax.annotation:javax.annotation-api") + + where: + location | prefix + 'sub' | 'api' + 'peer' | '' + } + def 'typescript extension is respected: #location'() { file('api/build.gradle') << ''' conjure { diff --git a/gradle-conjure/src/test/groovy/com/palantir/gradle/conjure/TestVersions.java b/gradle-conjure/src/test/groovy/com/palantir/gradle/conjure/TestVersions.java index 7cca9865f..d0e3b228e 100644 --- a/gradle-conjure/src/test/groovy/com/palantir/gradle/conjure/TestVersions.java +++ b/gradle-conjure/src/test/groovy/com/palantir/gradle/conjure/TestVersions.java @@ -20,7 +20,7 @@ public final class TestVersions { private TestVersions() {} public static final String CONJURE = "4.30.0"; - public static final String CONJURE_JAVA = "5.17.0"; + public static final String CONJURE_JAVA = "6.57.0"; public static final String CONJURE_JAVA_DIALOG = "1.50.0"; public static final String CONJURE_PYTHON = "3.11.6"; public static final String CONJURE_TYPESCRIPT = "3.8.1";