Skip to content

Commit ce949bc

Browse files
committed
Upgraded to graphql-java 12.0 which performs better in schemas that have deeply nested input object type definitions (#238)
- Refactored introspection builder to use the new graphql-java immutable AST builder APIs
1 parent e369573 commit ce949bc

File tree

3 files changed

+21
-15
lines changed

3 files changed

+21
-15
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ repositories {
2525
}
2626

2727
dependencies {
28-
compile ("com.graphql-java:graphql-java:11.0") {
28+
compile ("com.graphql-java:graphql-java:12.0") {
2929
exclude group: "org.reactivestreams", module: "reactive-streams"
3030
exclude group: "com.graphql-java", module: "java-dataloader"
3131
exclude group: "org.slf4j", module: "slf4j-api"

src/main/com/intellij/lang/jsgraphql/ide/editor/GraphQLIntrospectionResultToSchema.java

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -57,40 +57,41 @@ public Document createSchemaDefinition(Map<String, Object> introspectionResult)
5757

5858
Map<String, Object> queryType = (Map<String, Object>) schema.get("queryType");
5959
assertNotNull(queryType, "queryType expected");
60-
TypeName query = new TypeName((String) queryType.get("name"));
60+
TypeName query = TypeName.newTypeName().name((String) queryType.get("name")).build();
6161
boolean nonDefaultQueryName = !"Query".equals(query.getName());
6262

63-
SchemaDefinition schemaDefinition = SchemaDefinition.newSchemaDefinition().operationTypeDefinition(new OperationTypeDefinition("query", query)).build();
63+
SchemaDefinition.Builder schemaDefinition = SchemaDefinition.newSchemaDefinition();
64+
schemaDefinition.operationTypeDefinition(OperationTypeDefinition.newOperationTypeDefinition().name("query").typeName(query).build());
6465

6566
Map<String, Object> mutationType = (Map<String, Object>) schema.get("mutationType");
6667
boolean nonDefaultMutationName = false;
6768
if (mutationType != null) {
68-
TypeName mutation = new TypeName((String) mutationType.get("name"));
69+
TypeName mutation = TypeName.newTypeName().name((String) mutationType.get("name")).build();
6970
nonDefaultMutationName = !"Mutation".equals(mutation.getName());
70-
schemaDefinition.getOperationTypeDefinitions().add(new OperationTypeDefinition("mutation", mutation));
71+
schemaDefinition.operationTypeDefinition(OperationTypeDefinition.newOperationTypeDefinition().name("mutation").typeName(mutation).build());
7172
}
7273

7374
Map<String, Object> subscriptionType = (Map<String, Object>) schema.get("subscriptionType");
7475
boolean nonDefaultSubscriptionName = false;
7576
if (subscriptionType != null) {
76-
TypeName subscription = new TypeName((String) subscriptionType.get("name"));
77+
TypeName subscription = TypeName.newTypeName().name(((String) subscriptionType.get("name"))).build();
7778
nonDefaultSubscriptionName = !"Subscription".equals(subscription.getName());
78-
schemaDefinition.getOperationTypeDefinitions().add(new OperationTypeDefinition("subscription", subscription));
79+
schemaDefinition.operationTypeDefinition(OperationTypeDefinition.newOperationTypeDefinition().name("subscription").typeName(subscription).build());
7980
}
8081

81-
Document document = new Document(Lists.newArrayList());
82+
Document.Builder document = Document.newDocument();
8283
if (nonDefaultQueryName || nonDefaultMutationName || nonDefaultSubscriptionName) {
83-
document.getDefinitions().add(schemaDefinition);
84+
document.definition(schemaDefinition.build());
8485
}
8586

8687
List<Map<String, Object>> types = (List<Map<String, Object>>) schema.get("types");
8788
for (Map<String, Object> type : types) {
8889
TypeDefinition typeDefinition = createTypeDefinition(type);
8990
if (typeDefinition == null) continue;
90-
document.getDefinitions().add(typeDefinition);
91+
document.definition(typeDefinition);
9192
}
9293

93-
return document;
94+
return document.build();
9495
}
9596

9697
private TypeDefinition createTypeDefinition(Map<String, Object> type) {
@@ -272,11 +273,11 @@ private Type createTypeIndirection(Map<String, Object> type) {
272273
case "ENUM":
273274
case "INPUT_OBJECT":
274275
case "SCALAR":
275-
return new TypeName((String) type.get("name"));
276+
return TypeName.newTypeName().name((String) type.get("name")).build();
276277
case "NON_NULL":
277-
return new NonNullType(createTypeIndirection((Map<String, Object>) type.get("ofType")));
278+
return NonNullType.newNonNullType().type(createTypeIndirection((Map<String, Object>) type.get("ofType"))).build();
278279
case "LIST":
279-
return new ListType(createTypeIndirection((Map<String, Object>) type.get("ofType")));
280+
return ListType.newListType().type(createTypeIndirection((Map<String, Object>) type.get("ofType"))).build();
280281
default:
281282
return assertShouldNeverHappen("Unknown kind %s", kind);
282283
}

src/main/com/intellij/lang/jsgraphql/utils/GraphQLUtil.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import graphql.language.Document;
1111
import graphql.language.SourceLocation;
1212
import graphql.parser.GraphqlAntlrToLanguage;
13+
import graphql.parser.MultiSourceReader;
1314
import graphql.parser.antlr.GraphqlLexer;
1415
import graphql.parser.antlr.GraphqlParser;
1516
import graphql.schema.GraphQLModifiedType;
@@ -68,8 +69,12 @@ public static Document parseDocument(String input, String sourceName, int lineDe
6869
parser.setErrorHandler(new BailErrorStrategy());
6970
GraphqlParser.DocumentContext documentContext = parser.document();
7071

72+
MultiSourceReader multiSourceReader = MultiSourceReader.newMultiSourceReader()
73+
.string(input, sourceName)
74+
.trackData(true)
75+
.build();
7176

72-
GraphqlAntlrToLanguage antlrToLanguage = new GraphqlAntlrToLanguage(tokens) {
77+
GraphqlAntlrToLanguage antlrToLanguage = new GraphqlAntlrToLanguage(tokens, multiSourceReader) {
7378
@Override
7479
protected SourceLocation getSourceLocation(ParserRuleContext parserRuleContext) {
7580
Token startToken = parserRuleContext.getStart();

0 commit comments

Comments
 (0)