From de7335adc28529055cadacdc38af99c19f3e4c55 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=A6=E5=A2=83=E8=BF=B7=E7=A6=BB?= Date: Mon, 8 Mar 2021 05:03:07 +0800 Subject: [PATCH] Fix generatedLanguage switch in all plugins #572 (#577) * https://github.com/kobylynskyi/graphql-java-codegen/issues/572 * add default * optimize code --- .../gradle/GraphQLCodegenGradleTask.java | 43 ++++++------------- .../graphql/codegen/GraphQLCodegenMojo.java | 40 ++++++----------- .../codegen/GraphQLCodegenPlugin.scala | 13 +++--- 3 files changed, 34 insertions(+), 62 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 a70708c5..6eecde4d 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 @@ package io.github.kobylynskyi.graphql.codegen.gradle; 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,15 @@ import com.kobylynskyi.graphql.codegen.supplier.SchemaFinder; 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.*; +import java.util.function.Supplier; /** * Gradle task for GraphQL code generation @@ -163,15 +146,17 @@ public class GraphQLCodegenGradleTask extends DefaultTask implements GraphQLCode } private GraphQLCodegen instantiateCodegen(MappingConfig mappingConfig) throws IOException { - switch (generatedLanguage) { + java.util.Optional mappingConfigSupplier = buildJsonSupplier(); + GeneratedLanguage language = mappingConfigSupplier.map(Supplier::get).map(MappingConfig::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 +201,11 @@ public class GraphQLCodegenGradleTask extends DefaultTask implements GraphQLCode .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 e201de05..04e83f18 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 @@ package io.github.kobylynskyi.graphql.codegen; 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,8 @@ import java.io.File; 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.*; +import java.util.function.Supplier; @Mojo(name = "generate", defaultPhase = LifecyclePhase.GENERATE_SOURCES, threadSafe = true) public class GraphQLCodegenMojo extends AbstractMojo implements GraphQLCodegenConfiguration { @@ -261,15 +245,17 @@ public class GraphQLCodegenMojo extends AbstractMojo implements GraphQLCodegenCo } private GraphQLCodegen instantiateCodegen(MappingConfig mappingConfig) throws IOException { - switch (generatedLanguage) { + java.util.Optional mappingConfigSupplier = buildJsonSupplier(jsonConfigurationFile); + GeneratedLanguage language = mappingConfigSupplier.map(Supplier::get).map(MappingConfig::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 +287,11 @@ public class GraphQLCodegenMojo extends AbstractMojo implements GraphQLCodegenCo 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 610ed71c..50841acf 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()).map(_.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 } } -- GitLab