Skip to content

Commit 85737bd

Browse files
committed
Adding skipSchemaSizeLimit setting to disable the schema size limitation to SBT, Maven and Gradle plugins.
This removes the previous tokenLimit as there will be a number of separate settings to configure.
1 parent 07acba5 commit 85737bd

File tree

5 files changed

+37
-12
lines changed

5 files changed

+37
-12
lines changed

docs/codegen-options.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@
6868
| `supportUnknownFields` | Boolean | False | Specifies whether api classes should support unknown fields during serialization or deserialization. If `true`, classes will include a property of type [`java.util.Map<String,Object>`](https://docs.oracle.com/javase/8/docs/api/index.html?java/util/Map.html) that will store unknown fields. |
6969
| `unknownFieldsPropertyName` | String | userDefinedFields | Specifies the name of the property to be included in api classes to support unknown fields during serialization or deserialization |
7070
| `skip` | Boolean | False | If true, then code generation will not happen |
71-
| `tokenLimit` | Integer | 15000 | Specifies the maximum number of GraphQL grammar tokens to process.
71+
| `skipSchemaSizeLimit` | Boolean | True | When set to true, the GraphQL schema will be processed with token, character, line and rule depth limits. Set to false to process the schema regardless of its size.
72+
|
7273

7374

7475
### Option `graphqlSchemas`

plugins/gradle/graphql-java-codegen-gradle-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/gradle/GraphQLCodegenGradleTask.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
import com.kobylynskyi.graphql.codegen.supplier.MappingConfigSupplier;
1616
import com.kobylynskyi.graphql.codegen.supplier.MergeableMappingConfigSupplier;
1717
import com.kobylynskyi.graphql.codegen.supplier.SchemaFinder;
18+
import graphql.parser.ParserOptions;
1819
import org.gradle.api.Action;
1920
import org.gradle.api.DefaultTask;
2021
import org.gradle.api.plugins.JavaPluginExtension;
@@ -121,6 +122,7 @@ public class GraphQLCodegenGradleTask extends DefaultTask implements GraphQLCode
121122
private String unknownFieldsPropertyName = MappingConfigConstants.DEFAULT_UNKNOWN_FIELDS_PROPERTY_NAME;
122123

123124
private Boolean skip = false;
125+
private Boolean skipSchemaSizeLimit = true;
124126

125127
public GraphQLCodegenGradleTask() {
126128
setGroup("codegen");
@@ -228,6 +230,15 @@ private GraphQLCodegen instantiateCodegen(MappingConfig mappingConfig) throws IO
228230
GeneratedLanguage language = mappingConfigSupplier.map(Supplier::get)
229231
.map(MappingConfig::getGeneratedLanguage)
230232
.orElse(generatedLanguage);
233+
234+
if(skipSchemaSizeLimit) {
235+
ParserOptions.Builder parserOptionBuilder = ParserOptions.newParserOptions()
236+
.maxTokens(Integer.MAX_VALUE)
237+
.maxCharacters(Integer.MAX_VALUE)
238+
.maxWhitespaceTokens(Integer.MAX_VALUE)
239+
.maxRuleDepth(Integer.MAX_VALUE);
240+
ParserOptions.setDefaultParserOptions(parserOptionBuilder.build());
241+
}
231242
switch (language) {
232243
case JAVA:
233244
return new JavaGraphQLCodegen(getActualSchemaPaths(), graphqlQueryIntrospectionResultPath,

plugins/maven/graphql-java-codegen-maven-plugin/src/main/java/io/github/kobylynskyi/graphql/codegen/GraphQLCodegenMojo.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -249,11 +249,8 @@ public class GraphQLCodegenMojo extends AbstractMojo implements GraphQLCodegenCo
249249
@Parameter(defaultValue = "false")
250250
private boolean skip;
251251

252-
/**
253-
* Maximum number of GraphQL grammar tokens to process.
254-
*/
255-
@Parameter(defaultValue = "15000")
256-
private int tokenLimit;
252+
@Parameter(defaultValue = "true")
253+
private boolean skipSchemaSizeLimit;
257254

258255
@Override
259256
public void execute() throws MojoExecutionException {
@@ -346,11 +343,14 @@ private GraphQLCodegen instantiateCodegen(MappingConfig mappingConfig) throws IO
346343
.map(MappingConfig::getGeneratedLanguage)
347344
.orElse(generatedLanguage);
348345

349-
ParserOptions.Builder parserOptionBuilder = ParserOptions.newParserOptions()
350-
.maxTokens(tokenLimit)
351-
.maxCharacters(tokenLimit)
352-
.maxWhitespaceTokens(tokenLimit);
353-
ParserOptions.setDefaultParserOptions(parserOptionBuilder.build());
346+
if (skipSchemaSizeLimit) {
347+
ParserOptions.Builder parserOptionBuilder = ParserOptions.newParserOptions()
348+
.maxTokens(Integer.MAX_VALUE)
349+
.maxCharacters(Integer.MAX_VALUE)
350+
.maxWhitespaceTokens(Integer.MAX_VALUE)
351+
.maxRuleDepth(Integer.MAX_VALUE);
352+
ParserOptions.setDefaultParserOptions(parserOptionBuilder.build());
353+
}
354354

355355
switch (language) {
356356
case JAVA:

plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenKeys.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -178,5 +178,6 @@ trait GraphQLCodegenKeys {
178178

179179
val supportUnknownFields = settingKey[Boolean]("supportUnknownFields")
180180
val unknownFieldsPropertyName = settingKey[String]("unknownFieldsPropertyName")
181+
val skipSchemaSizeLimit = settingKey[Boolean]("Skip schema size limit checks.")
181182

182183
}

plugins/sbt/graphql-java-codegen-sbt-plugin/src/main/scala/io/github/dreamylost/graphql/codegen/GraphQLCodegenPlugin.scala

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package io.github.dreamylost.graphql.codegen
22

3+
import graphql.parser.ParserOptions
34
import com.kobylynskyi.graphql.codegen.GraphQLCodegenValidate
45
import com.kobylynskyi.graphql.codegen.java.JavaGraphQLCodegen
56
import com.kobylynskyi.graphql.codegen.model._
@@ -131,7 +132,8 @@ class GraphQLCodegenPlugin(configuration: Configuration, private[codegen] val co
131132
unknownFieldsPropertyName := MappingConfigConstants.DEFAULT_UNKNOWN_FIELDS_PROPERTY_NAME,
132133
generateNoArgsConstructorOnly := MappingConfigConstants.DEFAULT_GENERATE_NOARGS_CONSTRUCTOR_ONLY,
133134
generateModelsWithPublicFields := MappingConfigConstants.DEFAULT_GENERATE_MODELS_WITH_PUBLIC_FIELDS,
134-
skip := false
135+
skip := false,
136+
skipSchemaSizeLimit := true
135137
)
136138

137139
private def getMappingConfig(): Def.Initialize[MappingConfig] = Def.setting {
@@ -247,6 +249,16 @@ class GraphQLCodegenPlugin(configuration: Configuration, private[codegen] val co
247249
graphqlCodegen := {
248250
sLog.value.info(s"Generating files: ${BuildInfo.toString}")
249251
val mappingConfigSupplier = buildJsonSupplier(configurationFiles.value)
252+
253+
if (skipSchemaSizeLimit.value) {
254+
val parserOptionBuilder = ParserOptions
255+
.newParserOptions()
256+
.maxTokens(Integer.MAX_VALUE)
257+
// .maxCharacters(Integer.MAX_VALUE)
258+
.maxWhitespaceTokens(Integer.MAX_VALUE)
259+
.maxRuleDepth(Integer.MAX_VALUE);
260+
ParserOptions.setDefaultParserOptions(parserOptionBuilder.build());
261+
}
250262
val language = mappingConfigSupplier.map(_.get()).map(_.getGeneratedLanguage).getOrElse(generatedLanguage.value)
251263
var result = Seq.empty[File]
252264
try {

0 commit comments

Comments
 (0)