From a324963dd48aee68b90cab4cff08cae0de6218fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E5=A2=83=E8=BF=B7=E7=A6=BB?= Date: Sun, 7 Mar 2021 19:35:18 +0800 Subject: [PATCH 1/3] https://github.com/kobylynskyi/graphql-java-codegen/issues/572 --- .../gradle/GraphQLCodegenGradleTask.java | 42 ++++++------------- .../graphql/codegen/GraphQLCodegenMojo.java | 18 ++++---- .../codegen/GraphQLCodegenPlugin.scala | 13 +++--- 3 files changed, 30 insertions(+), 43 deletions(-) diff --git a/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java b/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java index a70708c52..46c8d9eb4 100644 --- a/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java +++ b/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java @@ -3,13 +3,7 @@ import com.kobylynskyi.graphql.codegen.GraphQLCodegen; import com.kobylynskyi.graphql.codegen.java.JavaGraphQLCodegen; import com.kobylynskyi.graphql.codegen.kotlin.KotlinGraphQLCodegen; -import com.kobylynskyi.graphql.codegen.model.ApiInterfaceStrategy; -import com.kobylynskyi.graphql.codegen.model.ApiNamePrefixStrategy; -import com.kobylynskyi.graphql.codegen.model.ApiRootInterfaceStrategy; -import com.kobylynskyi.graphql.codegen.model.GeneratedLanguage; -import com.kobylynskyi.graphql.codegen.model.GraphQLCodegenConfiguration; -import com.kobylynskyi.graphql.codegen.model.MappingConfig; -import com.kobylynskyi.graphql.codegen.model.MappingConfigConstants; +import com.kobylynskyi.graphql.codegen.model.*; import com.kobylynskyi.graphql.codegen.model.exception.LanguageNotSupportedException; import com.kobylynskyi.graphql.codegen.scala.ScalaGraphQLCodegen; import com.kobylynskyi.graphql.codegen.supplier.JsonMappingConfigSupplier; @@ -18,26 +12,14 @@ import org.gradle.api.Action; import org.gradle.api.DefaultTask; import org.gradle.api.plugins.JavaPluginConvention; -import org.gradle.api.tasks.Input; -import org.gradle.api.tasks.InputFile; -import org.gradle.api.tasks.InputFiles; -import org.gradle.api.tasks.Internal; -import org.gradle.api.tasks.Nested; import org.gradle.api.tasks.Optional; -import org.gradle.api.tasks.OutputDirectory; -import org.gradle.api.tasks.SourceSet; -import org.gradle.api.tasks.TaskAction; +import org.gradle.api.tasks.*; import java.io.File; import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; /** * Gradle task for GraphQL code generation @@ -163,15 +145,17 @@ public void generate() throws Exception { } private GraphQLCodegen instantiateCodegen(MappingConfig mappingConfig) throws IOException { - switch (generatedLanguage) { + java.util.Optional mappingConfigSupplier = buildJsonSupplier(); + GeneratedLanguage language = mappingConfigSupplier.map(c -> c.get().getGeneratedLanguage()).orElse(generatedLanguage); + switch (language) { case JAVA: - return new JavaGraphQLCodegen(getActualSchemaPaths(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, buildJsonSupplier()); + return new JavaGraphQLCodegen(getActualSchemaPaths(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, mappingConfigSupplier.orElse(null)); case SCALA: - return new ScalaGraphQLCodegen(getActualSchemaPaths(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, buildJsonSupplier()); + return new ScalaGraphQLCodegen(getActualSchemaPaths(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, mappingConfigSupplier.orElse(null)); case KOTLIN: - return new KotlinGraphQLCodegen(getActualSchemaPaths(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, buildJsonSupplier()); + return new KotlinGraphQLCodegen(getActualSchemaPaths(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, mappingConfigSupplier.orElse(null)); default: - throw new LanguageNotSupportedException(generatedLanguage); + throw new LanguageNotSupportedException(language); } } @@ -216,11 +200,11 @@ private java.util.Optional findDefaultResourcesDir() { .map(File::toPath); } - private MappingConfigSupplier buildJsonSupplier() { + private java.util.Optional buildJsonSupplier() { if (jsonConfigurationFile != null && !jsonConfigurationFile.isEmpty()) { - return new JsonMappingConfigSupplier(jsonConfigurationFile); + return java.util.Optional.of(new JsonMappingConfigSupplier(jsonConfigurationFile)); } - return null; + return java.util.Optional.empty(); } @InputFiles diff --git a/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java b/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java index e201de058..615aa1142 100644 --- a/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java +++ b/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java @@ -261,15 +261,17 @@ public void execute() throws MojoExecutionException { } private GraphQLCodegen instantiateCodegen(MappingConfig mappingConfig) throws IOException { - switch (generatedLanguage) { + java.util.Optional mappingConfigSupplier = buildJsonSupplier(jsonConfigurationFile); + GeneratedLanguage language = mappingConfigSupplier.map(c -> c.get().getGeneratedLanguage()).orElse(generatedLanguage); + switch (language) { case JAVA: - return new JavaGraphQLCodegen(getSchemas(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, buildJsonSupplier(jsonConfigurationFile)); + return new JavaGraphQLCodegen(getSchemas(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, mappingConfigSupplier.orElse(null)); case SCALA: - return new ScalaGraphQLCodegen(getSchemas(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, buildJsonSupplier(jsonConfigurationFile)); + return new ScalaGraphQLCodegen(getSchemas(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, mappingConfigSupplier.orElse(null)); case KOTLIN: - return new KotlinGraphQLCodegen(getSchemas(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, buildJsonSupplier(jsonConfigurationFile)); + return new KotlinGraphQLCodegen(getSchemas(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, mappingConfigSupplier.orElse(null)); default: - throw new LanguageNotSupportedException(generatedLanguage); + throw new LanguageNotSupportedException(language); } } @@ -301,11 +303,11 @@ private Optional getDefaultResourcesDirectory() { return project.getResources().stream().findFirst().map(Resource::getDirectory).map(Paths::get); } - private MappingConfigSupplier buildJsonSupplier(String jsonConfigurationFile) { + private java.util.Optional buildJsonSupplier(String jsonConfigurationFile) { if (jsonConfigurationFile != null && !jsonConfigurationFile.isEmpty()) { - return new JsonMappingConfigSupplier(jsonConfigurationFile); + return java.util.Optional.of(new JsonMappingConfigSupplier(jsonConfigurationFile)); } - return null; + return java.util.Optional.empty(); } private void addCompileSourceRootIfConfigured() { diff --git a/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala b/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala index 610ed71cc..0732c0d26 100644 --- a/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala +++ b/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala @@ -202,18 +202,19 @@ class GraphQLCodegenPlugin(configuration: Configuration, private[codegen] val co }, graphqlCodegen := { sLog.value.info(s"Generating files: ${BuildInfo.toString}") val mappingConfigSupplier = buildJsonSupplier(jsonConfigurationFile.value.orNull) + val language = mappingConfigSupplier.map(_.get.getGeneratedLanguage).getOrElse(generatedLanguage.value) var result = Seq.empty[File] try { val _outputDir = outputDir.value val _introspectionResult = graphqlQueryIntrospectionResultPath.value.orNull lazy val instantiateCodegen = (mappingConfig: MappingConfig) => { - generatedLanguage.value match { + language match { case JAVA => - new JavaGraphQLCodegen(getSchemas(), _introspectionResult, _outputDir, mappingConfig, mappingConfigSupplier) + new JavaGraphQLCodegen(getSchemas(), _introspectionResult, _outputDir, mappingConfig, mappingConfigSupplier.orNull) case SCALA => - new ScalaGraphQLCodegen(getSchemas(), _introspectionResult, _outputDir, mappingConfig, mappingConfigSupplier) + new ScalaGraphQLCodegen(getSchemas(), _introspectionResult, _outputDir, mappingConfig, mappingConfigSupplier.orNull) case _ => - throw new LanguageNotSupportedException(generatedLanguage.value) + throw new LanguageNotSupportedException(language) } } result = instantiateCodegen(getMappingConfig().value).generate.asScala @@ -274,9 +275,9 @@ class GraphQLCodegenPlugin(configuration: Configuration, private[codegen] val co ) ++ watchSourcesSetting ++ Seq(cleanFiles += generateCodegenTargetPath.value) } - protected def buildJsonSupplier(jsonConfigurationFile: String): JsonMappingConfigSupplier = { + protected def buildJsonSupplier(jsonConfigurationFile: String): Option[JsonMappingConfigSupplier] = { if (jsonConfigurationFile != null && jsonConfigurationFile.nonEmpty) - new JsonMappingConfigSupplier(jsonConfigurationFile) else null + Some(new JsonMappingConfigSupplier(jsonConfigurationFile)) else None } } From 06d65dfa4fcf2c0bd7660cc1dd2efefe25492d9c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E5=A2=83=E8=BF=B7=E7=A6=BB?= Date: Sun, 7 Mar 2021 19:42:23 +0800 Subject: [PATCH 2/3] add default --- .../gradle/GraphQLCodegenGradleTask.java | 3 ++- .../graphql/codegen/GraphQLCodegenMojo.java | 24 ++++--------------- .../codegen/GraphQLCodegenPlugin.scala | 3 ++- 3 files changed, 8 insertions(+), 22 deletions(-) diff --git a/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java b/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java index 46c8d9eb4..9cdbd26b0 100644 --- a/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java +++ b/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java @@ -146,7 +146,8 @@ public void generate() throws Exception { private GraphQLCodegen instantiateCodegen(MappingConfig mappingConfig) throws IOException { java.util.Optional mappingConfigSupplier = buildJsonSupplier(); - GeneratedLanguage language = mappingConfigSupplier.map(c -> c.get().getGeneratedLanguage()).orElse(generatedLanguage); + GeneratedLanguage language = mappingConfigSupplier.map(c -> c.get().getGeneratedLanguage() == null ? GeneratedLanguage.JAVA + : c.get().getGeneratedLanguage()).orElse(generatedLanguage); switch (language) { case JAVA: return new JavaGraphQLCodegen(getActualSchemaPaths(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, mappingConfigSupplier.orElse(null)); diff --git a/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java b/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java index 615aa1142..a7bb26a76 100644 --- a/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java +++ b/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java @@ -3,14 +3,7 @@ import com.kobylynskyi.graphql.codegen.GraphQLCodegen; import com.kobylynskyi.graphql.codegen.java.JavaGraphQLCodegen; import com.kobylynskyi.graphql.codegen.kotlin.KotlinGraphQLCodegen; -import com.kobylynskyi.graphql.codegen.model.ApiInterfaceStrategy; -import com.kobylynskyi.graphql.codegen.model.ApiNamePrefixStrategy; -import com.kobylynskyi.graphql.codegen.model.ApiRootInterfaceStrategy; -import com.kobylynskyi.graphql.codegen.model.GeneratedLanguage; -import com.kobylynskyi.graphql.codegen.model.GraphQLCodegenConfiguration; -import com.kobylynskyi.graphql.codegen.model.MappingConfig; -import com.kobylynskyi.graphql.codegen.model.MappingConfigConstants; -import com.kobylynskyi.graphql.codegen.model.RelayConfig; +import com.kobylynskyi.graphql.codegen.model.*; import com.kobylynskyi.graphql.codegen.model.exception.LanguageNotSupportedException; import com.kobylynskyi.graphql.codegen.scala.ScalaGraphQLCodegen; import com.kobylynskyi.graphql.codegen.supplier.JsonMappingConfigSupplier; @@ -28,17 +21,7 @@ import java.io.IOException; import java.nio.file.Path; import java.nio.file.Paths; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Collection; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.List; -import java.util.Map; -import java.util.Optional; -import java.util.Properties; -import java.util.Set; +import java.util.*; @Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true) public class GraphQLCodegenMojo extends AbstractMojo implements GraphQLCodegenConfiguration { @@ -262,7 +245,8 @@ public void execute() throws MojoExecutionException { private GraphQLCodegen instantiateCodegen(MappingConfig mappingConfig) throws IOException { java.util.Optional mappingConfigSupplier = buildJsonSupplier(jsonConfigurationFile); - GeneratedLanguage language = mappingConfigSupplier.map(c -> c.get().getGeneratedLanguage()).orElse(generatedLanguage); + GeneratedLanguage language = mappingConfigSupplier.map(c -> c.get().getGeneratedLanguage() == null ? + GeneratedLanguage.JAVA : c.get().getGeneratedLanguage()).orElse(generatedLanguage); switch (language) { case JAVA: return new JavaGraphQLCodegen(getSchemas(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, mappingConfigSupplier.orElse(null)); diff --git a/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala b/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala index 0732c0d26..1302757dd 100644 --- a/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala +++ b/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala @@ -202,7 +202,8 @@ class GraphQLCodegenPlugin(configuration: Configuration, private[codegen] val co }, graphqlCodegen := { sLog.value.info(s"Generating files: ${BuildInfo.toString}") val mappingConfigSupplier = buildJsonSupplier(jsonConfigurationFile.value.orNull) - val language = mappingConfigSupplier.map(_.get.getGeneratedLanguage).getOrElse(generatedLanguage.value) + val language = mappingConfigSupplier.map(m => if (m.get.getGeneratedLanguage == null) GeneratedLanguage.JAVA + else m.get().getGeneratedLanguage).getOrElse(generatedLanguage.value) var result = Seq.empty[File] try { val _outputDir = outputDir.value From b1ebd42ef22c69f926f8290ee98d57e798038e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E5=A2=83=E8=BF=B7=E7=A6=BB?= Date: Sun, 7 Mar 2021 21:44:45 +0800 Subject: [PATCH 3/3] optimize code --- .../graphql/codegen/gradle/GraphQLCodegenGradleTask.java | 4 ++-- .../kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java | 4 ++-- .../dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala | 3 +-- 3 files changed, 5 insertions(+), 6 deletions(-) diff --git a/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java b/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java index 9cdbd26b0..6eecde4d5 100644 --- a/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java +++ b/plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java @@ -20,6 +20,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; +import java.util.function.Supplier; /** * Gradle task for GraphQL code generation @@ -146,8 +147,7 @@ public void generate() throws Exception { private GraphQLCodegen instantiateCodegen(MappingConfig mappingConfig) throws IOException { java.util.Optional mappingConfigSupplier = buildJsonSupplier(); - GeneratedLanguage language = mappingConfigSupplier.map(c -> c.get().getGeneratedLanguage() == null ? GeneratedLanguage.JAVA - : c.get().getGeneratedLanguage()).orElse(generatedLanguage); + GeneratedLanguage language = mappingConfigSupplier.map(Supplier::get).map(MappingConfig::getGeneratedLanguage).orElse(generatedLanguage); switch (language) { case JAVA: return new JavaGraphQLCodegen(getActualSchemaPaths(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, mappingConfigSupplier.orElse(null)); diff --git a/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java b/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java index a7bb26a76..04e83f18c 100644 --- a/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java +++ b/plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java @@ -22,6 +22,7 @@ import java.nio.file.Path; import java.nio.file.Paths; import java.util.*; +import java.util.function.Supplier; @Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true) public class GraphQLCodegenMojo extends AbstractMojo implements GraphQLCodegenConfiguration { @@ -245,8 +246,7 @@ public void execute() throws MojoExecutionException { private GraphQLCodegen instantiateCodegen(MappingConfig mappingConfig) throws IOException { java.util.Optional mappingConfigSupplier = buildJsonSupplier(jsonConfigurationFile); - GeneratedLanguage language = mappingConfigSupplier.map(c -> c.get().getGeneratedLanguage() == null ? - GeneratedLanguage.JAVA : c.get().getGeneratedLanguage()).orElse(generatedLanguage); + GeneratedLanguage language = mappingConfigSupplier.map(Supplier::get).map(MappingConfig::getGeneratedLanguage).orElse(generatedLanguage); switch (language) { case JAVA: return new JavaGraphQLCodegen(getSchemas(), graphqlQueryIntrospectionResultPath, outputDir, mappingConfig, mappingConfigSupplier.orElse(null)); diff --git a/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala b/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala index 1302757dd..50841acfa 100644 --- a/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala +++ b/plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala @@ -202,8 +202,7 @@ class GraphQLCodegenPlugin(configuration: Configuration, private[codegen] val co }, graphqlCodegen := { sLog.value.info(s"Generating files: ${BuildInfo.toString}") val mappingConfigSupplier = buildJsonSupplier(jsonConfigurationFile.value.orNull) - val language = mappingConfigSupplier.map(m => if (m.get.getGeneratedLanguage == null) GeneratedLanguage.JAVA - else m.get().getGeneratedLanguage).getOrElse(generatedLanguage.value) + val language = mappingConfigSupplier.map(_.get()).map(_.getGeneratedLanguage).getOrElse(generatedLanguage.value) var result = Seq.empty[File] try { val _outputDir = outputDir.value