From fa9b40bb776de9d7ac0312c02e093617cb177e2d Mon Sep 17 00:00:00 2001
From: Andreas Marek
Date: Thu, 8 Feb 2018 16:03:43 +1100
Subject: [PATCH 01/19] getting started ...
---
src/main/antlr/Graphql.g4 | 11 ++++-
.../java/graphql/StitchingDSLExample.java | 41 ++++++++++++++++
.../graphql/language/ServiceDefinition.java | 48 +++++++++++++++++++
.../parser/GraphqlAntlrToLanguage.java | 5 ++
stitching-dsl.txt | 4 ++
5 files changed, 108 insertions(+), 1 deletion(-)
create mode 100644 src/main/java/graphql/StitchingDSLExample.java
create mode 100644 src/main/java/graphql/language/ServiceDefinition.java
create mode 100644 stitching-dsl.txt
diff --git a/src/main/antlr/Graphql.g4 b/src/main/antlr/Graphql.g4
index 99812471a8..c917fddf48 100644
--- a/src/main/antlr/Graphql.g4
+++ b/src/main/antlr/Graphql.g4
@@ -11,9 +11,15 @@ document : definition+;
definition:
operationDefinition |
fragmentDefinition |
-typeSystemDefinition
+typeSystemDefinition |
+serviceDefinition
;
+serviceDefinition:
+'service' name '{' serviceUrl '}' ;
+serviceUrl: 'url' ':' url;
+url: 'someUrl';
+
operationDefinition:
selectionSet |
operationType name? variableDefinitions? directives? selectionSet;
@@ -211,6 +217,9 @@ INPUT: 'input';
EXTEND: 'extend';
DIRECTIVE: 'directive';
NAME: [_A-Za-z][_0-9A-Za-z]*;
+//URL: [_A-Za-z0-9.]+;
+
+
IntValue : Sign? IntegerPart;
diff --git a/src/main/java/graphql/StitchingDSLExample.java b/src/main/java/graphql/StitchingDSLExample.java
new file mode 100644
index 0000000000..4da6cf8e5a
--- /dev/null
+++ b/src/main/java/graphql/StitchingDSLExample.java
@@ -0,0 +1,41 @@
+package graphql;
+
+import graphql.schema.GraphQLSchema;
+import graphql.schema.StaticDataFetcher;
+import graphql.schema.idl.RuntimeWiring;
+import graphql.schema.idl.SchemaGenerator;
+import graphql.schema.idl.SchemaParser;
+import graphql.schema.idl.TypeDefinitionRegistry;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Paths;
+import java.util.List;
+import java.util.stream.Collectors;
+
+import static graphql.schema.idl.RuntimeWiring.newRuntimeWiring;
+
+public class StitchingDSLExample {
+
+
+ public static void main(String[] args) throws IOException {
+
+ String schema = Files.readAllLines(Paths.get("./stitching-dsl.txt")).stream().collect(Collectors.joining());
+
+ SchemaParser schemaParser = new SchemaParser();
+ TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema);
+
+ RuntimeWiring runtimeWiring = newRuntimeWiring()
+ .type("Query", builder -> builder.dataFetcher("hello", new StaticDataFetcher("world")))
+ .build();
+
+ SchemaGenerator schemaGenerator = new SchemaGenerator();
+ GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
+
+ GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
+ ExecutionResult executionResult = build.execute("{hello}");
+
+ System.out.println(executionResult.getData().toString());
+
+ }
+}
diff --git a/src/main/java/graphql/language/ServiceDefinition.java b/src/main/java/graphql/language/ServiceDefinition.java
new file mode 100644
index 0000000000..5a25b8239a
--- /dev/null
+++ b/src/main/java/graphql/language/ServiceDefinition.java
@@ -0,0 +1,48 @@
+package graphql.language;
+
+import java.util.List;
+
+public class ServiceDefinition extends AbstractNode {
+
+ private final String name;
+ private final String url;
+ private List> typeDefinitions;
+
+
+ public ServiceDefinition(String name, String url) {
+ this.name = name;
+ this.url = url;
+ }
+
+ @Override
+ public List getChildren() {
+ return null;
+ }
+
+ @Override
+ public boolean isEqualTo(Node node) {
+ return false;
+ }
+
+ @Override
+ public ServiceDefinition deepCopy() {
+ return null;
+ }
+
+
+ public String getName() {
+ return name;
+ }
+
+ public String getUrl() {
+ return url;
+ }
+
+ public List> getTypeDefinitions() {
+ return typeDefinitions;
+ }
+
+ public void setTypeDefinitions(List> typeDefinitions) {
+ this.typeDefinitions = typeDefinitions;
+ }
+}
diff --git a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java
index 989b482268..fe3fbcf548 100644
--- a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java
+++ b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java
@@ -839,4 +839,9 @@ private List getCommentOnChannel(List refChannel) {
}
return comments;
}
+
+ @Override
+ public Void visitServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx) {
+ return super.visitServiceDefinition(ctx);
+ }
}
diff --git a/stitching-dsl.txt b/stitching-dsl.txt
new file mode 100644
index 0000000000..84e5842445
--- /dev/null
+++ b/stitching-dsl.txt
@@ -0,0 +1,4 @@
+service X {
+
+
+}
\ No newline at end of file
From aa4d068ae60ecce7b9f1bb93183c3535973f75f8 Mon Sep 17 00:00:00 2001
From: Andreas Marek
Date: Thu, 8 Feb 2018 17:30:26 +1100
Subject: [PATCH 02/19] add FieldTransformation and start handling service
definitions
---
.../graphql/language/FieldDefinition.java | 9 ++
.../graphql/language/FieldTransformation.java | 20 +++
.../graphql/language/ServiceDefinition.java | 7 +-
.../graphql/schema/idl/SchemaGenerator.java | 124 ++++++++++++------
.../schema/idl/TypeDefinitionRegistry.java | 15 ++-
5 files changed, 128 insertions(+), 47 deletions(-)
create mode 100644 src/main/java/graphql/language/FieldTransformation.java
diff --git a/src/main/java/graphql/language/FieldDefinition.java b/src/main/java/graphql/language/FieldDefinition.java
index e458f58fee..38d5e50cb7 100644
--- a/src/main/java/graphql/language/FieldDefinition.java
+++ b/src/main/java/graphql/language/FieldDefinition.java
@@ -14,6 +14,8 @@ public class FieldDefinition extends AbstractNode {
private final List inputValueDefinitions;
private final List directives;
+ private FieldTransformation fieldTransformation;
+
public FieldDefinition(String name) {
this(name, null, new ArrayList<>(), new ArrayList<>());
}
@@ -65,6 +67,13 @@ public Directive getDirective(String directiveName) {
return getDirectivesByName().get(directiveName);
}
+ public FieldTransformation getFieldTransformation() {
+ return fieldTransformation;
+ }
+
+ public void setFieldTransformation(FieldTransformation fieldTransformation) {
+ this.fieldTransformation = fieldTransformation;
+ }
@Override
public List getChildren() {
diff --git a/src/main/java/graphql/language/FieldTransformation.java b/src/main/java/graphql/language/FieldTransformation.java
new file mode 100644
index 0000000000..b9cd29c5a2
--- /dev/null
+++ b/src/main/java/graphql/language/FieldTransformation.java
@@ -0,0 +1,20 @@
+package graphql.language;
+
+import java.util.List;
+
+public class FieldTransformation extends AbstractNode {
+ @Override
+ public List getChildren() {
+ return null;
+ }
+
+ @Override
+ public boolean isEqualTo(Node node) {
+ return false;
+ }
+
+ @Override
+ public TypeDefinition deepCopy() {
+ return null;
+ }
+}
diff --git a/src/main/java/graphql/language/ServiceDefinition.java b/src/main/java/graphql/language/ServiceDefinition.java
index 5a25b8239a..a7b98a311a 100644
--- a/src/main/java/graphql/language/ServiceDefinition.java
+++ b/src/main/java/graphql/language/ServiceDefinition.java
@@ -2,7 +2,7 @@
import java.util.List;
-public class ServiceDefinition extends AbstractNode {
+public class ServiceDefinition extends AbstractNode implements TypeDefinition {
private final String name;
private final String url;
@@ -34,6 +34,11 @@ public String getName() {
return name;
}
+ @Override
+ public List getDirectives() {
+ return null;
+ }
+
public String getUrl() {
return url;
}
diff --git a/src/main/java/graphql/schema/idl/SchemaGenerator.java b/src/main/java/graphql/schema/idl/SchemaGenerator.java
index 6adacfb2d8..2f4852813d 100644
--- a/src/main/java/graphql/schema/idl/SchemaGenerator.java
+++ b/src/main/java/graphql/schema/idl/SchemaGenerator.java
@@ -20,6 +20,7 @@
import graphql.language.OperationTypeDefinition;
import graphql.language.ScalarTypeDefinition;
import graphql.language.SchemaDefinition;
+import graphql.language.ServiceDefinition;
import graphql.language.StringValue;
import graphql.language.Type;
import graphql.language.TypeDefinition;
@@ -151,9 +152,7 @@ public SchemaGenerator() {
*
* @param typeRegistry this can be obtained via {@link SchemaParser#parse(String)}
* @param wiring this can be built using {@link RuntimeWiring#newRuntimeWiring()}
- *
* @return an executable schema
- *
* @throws SchemaProblem if there are problems in assembling a schema such as missing type resolvers or no operations defined
*/
public GraphQLSchema makeExecutableSchema(TypeDefinitionRegistry typeRegistry, RuntimeWiring wiring) throws SchemaProblem {
@@ -166,6 +165,7 @@ public GraphQLSchema makeExecutableSchema(TypeDefinitionRegistry typeRegistry, R
return makeExecutableSchemaImpl(buildCtx);
}
+
private GraphQLSchema makeExecutableSchemaImpl(BuildContext buildCtx) {
GraphQLObjectType query;
GraphQLObjectType mutation;
@@ -173,49 +173,68 @@ private GraphQLSchema makeExecutableSchemaImpl(BuildContext buildCtx) {
GraphQLSchema.Builder schemaBuilder = GraphQLSchema.newSchema();
- //
- // Schema can be missing if the type is called 'Query'. Pre flight checks have checked that!
- //
- TypeDefinitionRegistry typeRegistry = buildCtx.getTypeRegistry();
- if (!typeRegistry.schemaDefinition().isPresent()) {
- @SuppressWarnings({"OptionalGetWithoutIsPresent", "ConstantConditions"})
- TypeDefinition queryTypeDef = typeRegistry.getType("Query").get();
-
- query = buildOutputType(buildCtx, new TypeName(queryTypeDef.getName()));
- schemaBuilder.query(query);
-
- Optional mutationTypeDef = typeRegistry.getType("Mutation");
- if (mutationTypeDef.isPresent()) {
- mutation = buildOutputType(buildCtx, new TypeName(mutationTypeDef.get().getName()));
- schemaBuilder.mutation(mutation);
- }
- Optional subscriptionTypeDef = typeRegistry.getType("Subscription");
- if (subscriptionTypeDef.isPresent()) {
- subscription = buildOutputType(buildCtx, new TypeName(subscriptionTypeDef.get().getName()));
- schemaBuilder.subscription(subscription);
- }
- } else {
- SchemaDefinition schemaDefinition = typeRegistry.schemaDefinition().get();
- List operationTypes = schemaDefinition.getOperationTypeDefinitions();
-
- // pre-flight checked via checker
- @SuppressWarnings({"OptionalGetWithoutIsPresent", "ConstantConditions"})
- OperationTypeDefinition queryOp = operationTypes.stream().filter(op -> "query".equals(op.getName())).findFirst().get();
- Optional mutationOp = operationTypes.stream().filter(op -> "mutation".equals(op.getName())).findFirst();
- Optional subscriptionOp = operationTypes.stream().filter(op -> "subscription".equals(op.getName())).findFirst();
- query = buildOperation(buildCtx, queryOp);
- schemaBuilder.query(query);
+ Map serviceDefinitions = buildCtx.getTypeRegistry().getServiceDefinitions();
+ List queries = new ArrayList<>();
- if (mutationOp.isPresent()) {
- mutation = buildOperation(buildCtx, mutationOp.get());
- schemaBuilder.mutation(mutation);
- }
- if (subscriptionOp.isPresent()) {
- subscription = buildOperation(buildCtx, subscriptionOp.get());
- schemaBuilder.subscription(subscription);
+ for (Map.Entry serviceDefinitionEntry : serviceDefinitions.entrySet()) {
+ ServiceDefinition serviceDefinition = serviceDefinitionEntry.getValue();
+ for (TypeDefinition> typeDefinition : serviceDefinition.getTypeDefinitions()) {
+ if (typeDefinition.getName().equals("Query")) {
+ queries.add((ObjectTypeDefinition) typeDefinition);
+ }
}
}
+ query = buildOutputType(buildCtx, new TypeName("Query"));
+
+ Assert.assertNotEmpty(queries, "queries not found");
+ GraphQLObjectType queryType = buildQueryType(buildCtx, queries);
+ schemaBuilder.query(queryType);
+
+
+// //
+// // Schema can be missing if the type is called 'Query'. Pre flight checks have checked that!
+// //
+// TypeDefinitionRegistry typeRegistry = buildCtx.getTypeRegistry();
+// if (!typeRegistry.schemaDefinition().isPresent()) {
+// @SuppressWarnings({"OptionalGetWithoutIsPresent", "ConstantConditions"})
+// TypeDefinition queryTypeDef = typeRegistry.getType("Query").get();
+//
+// query = buildOutputType(buildCtx, new TypeName(queryTypeDef.getName()));
+// schemaBuilder.query(query);
+//
+// Optional mutationTypeDef = typeRegistry.getType("Mutation");
+// if (mutationTypeDef.isPresent()) {
+// mutation = buildOutputType(buildCtx, new TypeName(mutationTypeDef.get().getName()));
+// schemaBuilder.mutation(mutation);
+// }
+// Optional subscriptionTypeDef = typeRegistry.getType("Subscription");
+// if (subscriptionTypeDef.isPresent()) {
+// subscription = buildOutputType(buildCtx, new TypeName(subscriptionTypeDef.get().getName()));
+// schemaBuilder.subscription(subscription);
+// }
+// } else {
+// SchemaDefinition schemaDefinition = typeRegistry.schemaDefinition().get();
+// List operationTypes = schemaDefinition.getOperationTypeDefinitions();
+//
+// // pre-flight checked via checker
+// @SuppressWarnings({"OptionalGetWithoutIsPresent", "ConstantConditions"})
+// OperationTypeDefinition queryOp = operationTypes.stream().filter(op -> "query".equals(op.getName())).findFirst().get();
+// Optional mutationOp = operationTypes.stream().filter(op -> "mutation".equals(op.getName())).findFirst();
+// Optional subscriptionOp = operationTypes.stream().filter(op -> "subscription".equals(op.getName())).findFirst();
+//
+// query = buildOperation(buildCtx, queryOp);
+// schemaBuilder.query(query);
+//
+// if (mutationOp.isPresent()) {
+// mutation = buildOperation(buildCtx, mutationOp.get());
+// schemaBuilder.mutation(mutation);
+// }
+// if (subscriptionOp.isPresent()) {
+// subscription = buildOperation(buildCtx, subscriptionOp.get());
+// schemaBuilder.subscription(subscription);
+// }
+// }
Set additionalTypes = buildAdditionalTypes(buildCtx);
@@ -234,12 +253,12 @@ private GraphQLObjectType buildOperation(BuildContext buildCtx, OperationTypeDef
* but then we build the rest of the types specified and put them in as additional types
*
* @param buildCtx the context we need to work out what we are doing
- *
* @return the additional types not referenced from the top level operations
*/
private Set buildAdditionalTypes(BuildContext buildCtx) {
Set additionalTypes = new HashSet<>();
TypeDefinitionRegistry typeRegistry = buildCtx.getTypeRegistry();
+
typeRegistry.types().values().forEach(typeDefinition -> {
TypeName typeName = new TypeName(typeDefinition.getName());
if (typeDefinition instanceof InputObjectTypeDefinition) {
@@ -260,7 +279,6 @@ private Set buildAdditionalTypes(BuildContext buildCtx) {
*
* @param buildCtx the context we need to work out what we are doing
* @param rawType the type to be built
- *
* @return an output type
*/
@SuppressWarnings("unchecked")
@@ -351,6 +369,26 @@ private GraphQLObjectType buildObjectType(BuildContext buildCtx, ObjectTypeDefin
return builder.build();
}
+ private GraphQLObjectType buildQueryType(BuildContext buildCtx, List typeDefinitions) {
+
+ GraphQLObjectType.Builder builder = GraphQLObjectType.newObject();
+ builder.definition(typeDefinitions.get(0));
+ builder.name("Query");
+ builder.description(buildDescription(typeDefinitions.get(0), typeDefinitions.get(0).getDescription()));
+
+ Map fieldDefinitions = new LinkedHashMap<>();
+ for (ObjectTypeDefinition typeDefinition : typeDefinitions) {
+ typeDefinition.getFieldDefinitions().forEach(fieldDef -> {
+ GraphQLFieldDefinition newFieldDefinition = buildField(buildCtx, typeDefinition, fieldDef);
+ fieldDefinitions.put(newFieldDefinition.getName(), newFieldDefinition);
+ });
+ }
+ fieldDefinitions.values().forEach(builder::field);
+
+
+ return builder.build();
+ }
+
private void buildObjectTypeFields(BuildContext buildCtx, ObjectTypeDefinition typeDefinition, GraphQLObjectType.Builder builder, List typeExtensions) {
Map fieldDefinitions = new LinkedHashMap<>();
diff --git a/src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java b/src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java
index 69593922cf..47ade447fe 100644
--- a/src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java
+++ b/src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java
@@ -4,6 +4,7 @@
import graphql.language.Definition;
import graphql.language.ScalarTypeDefinition;
import graphql.language.SchemaDefinition;
+import graphql.language.ServiceDefinition;
import graphql.language.Type;
import graphql.language.TypeDefinition;
import graphql.language.TypeExtensionDefinition;
@@ -29,15 +30,14 @@ public class TypeDefinitionRegistry {
private final Map scalarTypes = new LinkedHashMap<>();
private final Map> typeExtensions = new LinkedHashMap<>();
private final Map types = new LinkedHashMap<>();
+ private final Map serviceDefinitions = new LinkedHashMap<>();
private SchemaDefinition schema;
/**
* This will merge these type registries together and return this one
*
* @param typeRegistry the registry to be merged into this one
- *
* @return this registry
- *
* @throws SchemaProblem if there are problems merging the types such as redefinitions
*/
public TypeDefinitionRegistry merge(TypeDefinitionRegistry typeRegistry) throws SchemaProblem {
@@ -80,7 +80,6 @@ public TypeDefinitionRegistry merge(TypeDefinitionRegistry typeRegistry) throws
* Adds a definition to the registry
*
* @param definition the definition to add
- *
* @return an optional error
*/
public Optional add(Definition definition) {
@@ -93,6 +92,12 @@ public Optional add(Definition definition) {
} else if (definition instanceof TypeDefinition) {
TypeDefinition newEntry = (TypeDefinition) definition;
return define(types, types, newEntry);
+ } else if (definition instanceof ServiceDefinition) {
+ ServiceDefinition serviceDefinition = (ServiceDefinition) definition;
+ serviceDefinitions.put(((ServiceDefinition) definition).getName(), (ServiceDefinition) definition);
+ for(TypeDefinition typeDefinition: serviceDefinition.getTypeDefinitions()) {
+ add(typeDefinition);
+ }
} else if (definition instanceof SchemaDefinition) {
SchemaDefinition newSchema = (SchemaDefinition) definition;
if (schema != null) {
@@ -165,4 +170,8 @@ public Optional getType(String typeName) {
}
return Optional.empty();
}
+
+ public Map getServiceDefinitions() {
+ return serviceDefinitions;
+ }
}
From bdf7b204e4cca0d6b96fc4504e7d643b507e5b89 Mon Sep 17 00:00:00 2001
From: Andreas Marek
Date: Thu, 8 Feb 2018 20:33:44 +1100
Subject: [PATCH 03/19] first dummy query working .. yeah
---
build.gradle | 2 +-
.../java/graphql/StitchingDSLExample.java | 69 +++++++++++++++-
.../graphql/language/FieldDefinition.java | 10 ++-
.../java/graphql/language/SelectionSet.java | 2 +-
.../java/graphql/language/TypeDefinition.java | 1 +
.../graphql/schema/HttpRemoteRetriever.java | 82 +++++++++++++++++++
.../schema/RemoteRootQueryDataFetcher.java | 43 ++++++++++
.../graphql/schema/idl/SchemaGenerator.java | 4 +-
.../schema/idl/TypeDefinitionRegistry.java | 10 +--
9 files changed, 210 insertions(+), 13 deletions(-)
create mode 100644 src/main/java/graphql/schema/HttpRemoteRetriever.java
create mode 100644 src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java
diff --git a/build.gradle b/build.gradle
index 01b9325df0..f4dd741c6a 100644
--- a/build.gradle
+++ b/build.gradle
@@ -43,7 +43,7 @@ dependencies {
testCompile 'org.objenesis:objenesis:2.1'
testCompile 'com.google.code.gson:gson:2.8.0'
testCompile 'org.eclipse.jetty:jetty-server:9.4.5.v20170502'
- testCompile 'com.fasterxml.jackson.core:jackson-databind:2.8.8.1'
+ compile 'com.fasterxml.jackson.core:jackson-databind:2.8.8.1'
testCompile 'org.slf4j:slf4j-simple:' + slf4jVersion
testCompile 'org.awaitility:awaitility-groovy:3.0.0'
testCompile 'com.github.javafaker:javafaker:0.13'
diff --git a/src/main/java/graphql/StitchingDSLExample.java b/src/main/java/graphql/StitchingDSLExample.java
index 4da6cf8e5a..32e6489fb1 100644
--- a/src/main/java/graphql/StitchingDSLExample.java
+++ b/src/main/java/graphql/StitchingDSLExample.java
@@ -1,15 +1,28 @@
package graphql;
+import graphql.language.Document;
+import graphql.language.FieldDefinition;
+import graphql.language.ObjectTypeDefinition;
+import graphql.language.ServiceDefinition;
+import graphql.language.TypeDefinition;
+import graphql.language.TypeName;
+import graphql.schema.DataFetcher;
import graphql.schema.GraphQLSchema;
+import graphql.schema.RemoteRootQueryDataFetcher;
import graphql.schema.StaticDataFetcher;
+import graphql.schema.idl.FieldWiringEnvironment;
import graphql.schema.idl.RuntimeWiring;
import graphql.schema.idl.SchemaGenerator;
import graphql.schema.idl.SchemaParser;
+import graphql.schema.idl.SchemaPrinter;
import graphql.schema.idl.TypeDefinitionRegistry;
+import graphql.schema.idl.WiringFactory;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Paths;
+import java.util.Arrays;
+import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
@@ -18,20 +31,70 @@
public class StitchingDSLExample {
+ public static class StitchingRuntimeWiring implements WiringFactory {
+
+
+ @Override
+ public boolean providesDataFetcher(FieldWiringEnvironment environment) {
+ TypeDefinition parentType = environment.getParentType();
+ if (parentType.getName().equals("Query")) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public DataFetcher getDataFetcher(FieldWiringEnvironment environment) {
+ RemoteRootQueryDataFetcher remoteRootQueryDataFetcher = new RemoteRootQueryDataFetcher(environment.getFieldDefinition().getServiceDefinition());
+ return remoteRootQueryDataFetcher;
+ }
+ }
+
+ private static Document buildDocument() {
+ /**
+ * service Foo {
+ * type Query {
+ * hello: String
+ * }
+ * }
+ */
+ ServiceDefinition serviceDefinition = new ServiceDefinition("Foo", "https://4r09jwx0k9.lp.gql.zone/graphql");
+ ObjectTypeDefinition objectTypeDefinition = new ObjectTypeDefinition("Query");
+ FieldDefinition fieldDefinition = new FieldDefinition("hello");
+ fieldDefinition.setServiceDefinition(serviceDefinition);
+ fieldDefinition.setType(new TypeName("String"));
+ objectTypeDefinition.getFieldDefinitions().add(fieldDefinition);
+ serviceDefinition.setTypeDefinitions(Collections.singletonList(objectTypeDefinition));
+ Document document = new Document();
+ document.setDefinitions(Arrays.asList(serviceDefinition));
+ return document;
+ }
+
+
public static void main(String[] args) throws IOException {
- String schema = Files.readAllLines(Paths.get("./stitching-dsl.txt")).stream().collect(Collectors.joining());
+// String schema = Files.readAllLines(Paths.get("./stitching-dsl.txt")).stream().collect(Collectors.joining());
+//
+// SchemaParser schemaParser = new SchemaParser();
+
+ Document document = buildDocument();
+
+ StitchingRuntimeWiring wiringFactory = new StitchingRuntimeWiring();
SchemaParser schemaParser = new SchemaParser();
- TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema);
+ TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.buildRegistry(document);
RuntimeWiring runtimeWiring = newRuntimeWiring()
- .type("Query", builder -> builder.dataFetcher("hello", new StaticDataFetcher("world")))
+ .wiringFactory(wiringFactory)
.build();
SchemaGenerator schemaGenerator = new SchemaGenerator();
GraphQLSchema graphQLSchema = schemaGenerator.makeExecutableSchema(typeDefinitionRegistry, runtimeWiring);
+ SchemaPrinter schemaPrinter = new SchemaPrinter();
+ String printed = schemaPrinter.print(graphQLSchema);
+ System.out.println("schema:" + printed);
+
GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
ExecutionResult executionResult = build.execute("{hello}");
diff --git a/src/main/java/graphql/language/FieldDefinition.java b/src/main/java/graphql/language/FieldDefinition.java
index 38d5e50cb7..a07335a9ec 100644
--- a/src/main/java/graphql/language/FieldDefinition.java
+++ b/src/main/java/graphql/language/FieldDefinition.java
@@ -13,8 +13,8 @@ public class FieldDefinition extends AbstractNode {
private Description description;
private final List inputValueDefinitions;
private final List directives;
-
private FieldTransformation fieldTransformation;
+ private ServiceDefinition serviceDefinition;
public FieldDefinition(String name) {
this(name, null, new ArrayList<>(), new ArrayList<>());
@@ -75,6 +75,14 @@ public void setFieldTransformation(FieldTransformation fieldTransformation) {
this.fieldTransformation = fieldTransformation;
}
+ public ServiceDefinition getServiceDefinition() {
+ return serviceDefinition;
+ }
+
+ public void setServiceDefinition(ServiceDefinition serviceDefinition) {
+ this.serviceDefinition = serviceDefinition;
+ }
+
@Override
public List getChildren() {
List result = new ArrayList<>();
diff --git a/src/main/java/graphql/language/SelectionSet.java b/src/main/java/graphql/language/SelectionSet.java
index 0cb0e94af9..825076a3a1 100644
--- a/src/main/java/graphql/language/SelectionSet.java
+++ b/src/main/java/graphql/language/SelectionSet.java
@@ -15,7 +15,7 @@ public List getSelections() {
public SelectionSet() {
}
- public SelectionSet(List selections) {
+ public SelectionSet(List extends Selection> selections) {
this.selections.addAll(selections);
}
diff --git a/src/main/java/graphql/language/TypeDefinition.java b/src/main/java/graphql/language/TypeDefinition.java
index f10009da6e..db887a372d 100644
--- a/src/main/java/graphql/language/TypeDefinition.java
+++ b/src/main/java/graphql/language/TypeDefinition.java
@@ -18,4 +18,5 @@ public interface TypeDefinition extends Definition
* @return a deep copy of this type definition
*/
T deepCopy();
+
}
diff --git a/src/main/java/graphql/schema/HttpRemoteRetriever.java b/src/main/java/graphql/schema/HttpRemoteRetriever.java
new file mode 100644
index 0000000000..06a9c81519
--- /dev/null
+++ b/src/main/java/graphql/schema/HttpRemoteRetriever.java
@@ -0,0 +1,82 @@
+package graphql.schema;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import graphql.ExecutionInput;
+import graphql.language.AstPrinter;
+import graphql.language.OperationDefinition;
+
+import java.io.IOException;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLConnection;
+import java.nio.charset.Charset;
+import java.util.LinkedHashMap;
+import java.util.Map;
+import java.util.concurrent.CompletableFuture;
+import java.util.function.Consumer;
+
+import static graphql.introspection.IntrospectionQuery.INTROSPECTION_QUERY;
+import static java.util.Objects.requireNonNull;
+
+/**
+ * Simple remote retriever that retrieves data using the built-in HTTP client
+ */
+public class HttpRemoteRetriever {
+ private final ObjectMapper mapper = new ObjectMapper();
+ private final URL remoteUrl;
+
+ public HttpRemoteRetriever(URL remoteUrl) {
+ this.remoteUrl = requireNonNull(remoteUrl);
+ }
+
+ public CompletableFuture
*/
@Override public T visitServiceUrl(GraphqlParser.ServiceUrlContext ctx) { return visitChildren(ctx); }
- /**
- * {@inheritDoc}
- *
- * The default implementation returns the result of calling
- * {@link #visitChildren} on {@code ctx}.
- */
- @Override public T visitUrl(GraphqlParser.UrlContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/src/main/gen/GraphqlParser.java b/src/main/gen/GraphqlParser.java
index 35657bc3da..7a38ed6010 100644
--- a/src/main/gen/GraphqlParser.java
+++ b/src/main/gen/GraphqlParser.java
@@ -145,6 +145,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDocument(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitDocument(this);
+ else return visitor.visitChildren(this);
+ }
}
public final DocumentContext document() throws RecognitionException {
@@ -206,6 +211,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final DefinitionContext definition() throws RecognitionException {
@@ -278,8 +288,11 @@ public NameContext name() {
public ServiceUrlContext serviceUrl() {
return getRuleContext(ServiceUrlContext.class,0);
}
- public TypeSystemDefinitionContext typeSystemDefinition() {
- return getRuleContext(TypeSystemDefinitionContext.class,0);
+ public List typeSystemDefinition() {
+ return getRuleContexts(TypeSystemDefinitionContext.class);
+ }
+ public TypeSystemDefinitionContext typeSystemDefinition(int i) {
+ return getRuleContext(TypeSystemDefinitionContext.class,i);
}
public ServiceDefinitionContext(ParserRuleContext parent, int invokingState) {
super(parent, invokingState);
@@ -293,11 +306,17 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitServiceDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitServiceDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ServiceDefinitionContext serviceDefinition() throws RecognitionException {
ServiceDefinitionContext _localctx = new ServiceDefinitionContext(_ctx, getState());
enterRule(_localctx, 4, RULE_serviceDefinition);
+ int _la;
try {
enterOuterAlt(_localctx, 1);
{
@@ -309,9 +328,21 @@ public final ServiceDefinitionContext serviceDefinition() throws RecognitionExce
match(T__1);
setState(134);
serviceUrl();
- setState(135);
- typeSystemDefinition();
- setState(136);
+ setState(138);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0)) {
+ {
+ {
+ setState(135);
+ typeSystemDefinition();
+ }
+ }
+ setState(140);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ }
+ setState(141);
match(T__2);
}
}
@@ -342,6 +373,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitServiceUrl(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitServiceUrl(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ServiceUrlContext serviceUrl() throws RecognitionException {
@@ -350,11 +386,11 @@ public final ServiceUrlContext serviceUrl() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(138);
+ setState(143);
match(T__3);
- setState(139);
+ setState(144);
match(T__4);
- setState(140);
+ setState(145);
stringValue();
}
}
@@ -397,6 +433,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitOperationDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitOperationDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final OperationDefinitionContext operationDefinition() throws RecognitionException {
@@ -404,13 +445,13 @@ public final OperationDefinitionContext operationDefinition() throws Recognition
enterRule(_localctx, 8, RULE_operationDefinition);
int _la;
try {
- setState(155);
+ setState(160);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__1:
enterOuterAlt(_localctx, 1);
{
- setState(142);
+ setState(147);
selectionSet();
}
break;
@@ -419,39 +460,39 @@ public final OperationDefinitionContext operationDefinition() throws Recognition
case SUBSCRIPTION:
enterOuterAlt(_localctx, 2);
{
- setState(143);
+ setState(148);
operationType();
- setState(145);
+ setState(150);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0)) {
{
- setState(144);
+ setState(149);
name();
}
}
- setState(148);
+ setState(153);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(147);
+ setState(152);
variableDefinitions();
}
}
- setState(151);
+ setState(156);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(150);
+ setState(155);
directives();
}
}
- setState(153);
+ setState(158);
selectionSet();
}
break;
@@ -486,6 +527,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitOperationType(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitOperationType(this);
+ else return visitor.visitChildren(this);
+ }
}
public final OperationTypeContext operationType() throws RecognitionException {
@@ -495,7 +541,7 @@ public final OperationTypeContext operationType() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(157);
+ setState(162);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -537,6 +583,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitVariableDefinitions(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitVariableDefinitions(this);
+ else return visitor.visitChildren(this);
+ }
}
public final VariableDefinitionsContext variableDefinitions() throws RecognitionException {
@@ -546,23 +597,23 @@ public final VariableDefinitionsContext variableDefinitions() throws Recognition
try {
enterOuterAlt(_localctx, 1);
{
- setState(159);
+ setState(164);
match(T__5);
- setState(161);
+ setState(166);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(160);
+ setState(165);
variableDefinition();
}
}
- setState(163);
+ setState(168);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==T__7 );
- setState(165);
+ setState(170);
match(T__6);
}
}
@@ -599,6 +650,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitVariableDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitVariableDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final VariableDefinitionContext variableDefinition() throws RecognitionException {
@@ -608,18 +664,18 @@ public final VariableDefinitionContext variableDefinition() throws RecognitionEx
try {
enterOuterAlt(_localctx, 1);
{
- setState(167);
+ setState(172);
variable();
- setState(168);
+ setState(173);
match(T__4);
- setState(169);
+ setState(174);
type();
- setState(171);
+ setState(176);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__8) {
{
- setState(170);
+ setState(175);
defaultValue();
}
}
@@ -653,6 +709,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitVariable(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitVariable(this);
+ else return visitor.visitChildren(this);
+ }
}
public final VariableContext variable() throws RecognitionException {
@@ -661,9 +722,9 @@ public final VariableContext variable() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(173);
+ setState(178);
match(T__7);
- setState(174);
+ setState(179);
name();
}
}
@@ -694,6 +755,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDefaultValue(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitDefaultValue(this);
+ else return visitor.visitChildren(this);
+ }
}
public final DefaultValueContext defaultValue() throws RecognitionException {
@@ -702,9 +768,9 @@ public final DefaultValueContext defaultValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(176);
+ setState(181);
match(T__8);
- setState(177);
+ setState(182);
value();
}
}
@@ -738,6 +804,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitSelectionSet(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitSelectionSet(this);
+ else return visitor.visitChildren(this);
+ }
}
public final SelectionSetContext selectionSet() throws RecognitionException {
@@ -747,23 +818,23 @@ public final SelectionSetContext selectionSet() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(179);
+ setState(184);
match(T__1);
- setState(181);
+ setState(186);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(180);
+ setState(185);
selection();
}
}
- setState(183);
+ setState(188);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__9) | (1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0) );
- setState(185);
+ setState(190);
match(T__2);
}
}
@@ -800,33 +871,38 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitSelection(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitSelection(this);
+ else return visitor.visitChildren(this);
+ }
}
public final SelectionContext selection() throws RecognitionException {
SelectionContext _localctx = new SelectionContext(_ctx, getState());
enterRule(_localctx, 22, RULE_selection);
try {
- setState(190);
+ setState(195);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(187);
+ setState(192);
field();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(188);
+ setState(193);
fragmentSpread();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(189);
+ setState(194);
inlineFragment();
}
break;
@@ -871,6 +947,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitField(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitField(this);
+ else return visitor.visitChildren(this);
+ }
}
public final FieldContext field() throws RecognitionException {
@@ -880,44 +961,44 @@ public final FieldContext field() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(193);
+ setState(198);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) {
case 1:
{
- setState(192);
+ setState(197);
alias();
}
break;
}
- setState(195);
+ setState(200);
name();
- setState(197);
+ setState(202);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(196);
+ setState(201);
arguments();
}
}
- setState(200);
+ setState(205);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(199);
+ setState(204);
directives();
}
}
- setState(203);
+ setState(208);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__1) {
{
- setState(202);
+ setState(207);
selectionSet();
}
}
@@ -951,6 +1032,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitAlias(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitAlias(this);
+ else return visitor.visitChildren(this);
+ }
}
public final AliasContext alias() throws RecognitionException {
@@ -959,9 +1045,9 @@ public final AliasContext alias() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(205);
+ setState(210);
name();
- setState(206);
+ setState(211);
match(T__4);
}
}
@@ -995,6 +1081,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitArguments(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitArguments(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ArgumentsContext arguments() throws RecognitionException {
@@ -1004,23 +1095,23 @@ public final ArgumentsContext arguments() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(208);
+ setState(213);
match(T__5);
- setState(210);
+ setState(215);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(209);
+ setState(214);
argument();
}
}
- setState(212);
+ setState(217);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0) );
- setState(214);
+ setState(219);
match(T__6);
}
}
@@ -1054,6 +1145,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitArgument(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitArgument(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ArgumentContext argument() throws RecognitionException {
@@ -1062,11 +1158,11 @@ public final ArgumentContext argument() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(216);
+ setState(221);
name();
- setState(217);
+ setState(222);
match(T__4);
- setState(218);
+ setState(223);
valueWithVariable();
}
}
@@ -1100,6 +1196,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFragmentSpread(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitFragmentSpread(this);
+ else return visitor.visitChildren(this);
+ }
}
public final FragmentSpreadContext fragmentSpread() throws RecognitionException {
@@ -1109,16 +1210,16 @@ public final FragmentSpreadContext fragmentSpread() throws RecognitionException
try {
enterOuterAlt(_localctx, 1);
{
- setState(220);
+ setState(225);
match(T__9);
- setState(221);
+ setState(226);
fragmentName();
- setState(223);
+ setState(228);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(222);
+ setState(227);
directives();
}
}
@@ -1158,6 +1259,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitInlineFragment(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitInlineFragment(this);
+ else return visitor.visitChildren(this);
+ }
}
public final InlineFragmentContext inlineFragment() throws RecognitionException {
@@ -1167,29 +1273,29 @@ public final InlineFragmentContext inlineFragment() throws RecognitionException
try {
enterOuterAlt(_localctx, 1);
{
- setState(225);
+ setState(230);
match(T__9);
- setState(227);
+ setState(232);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__10) {
{
- setState(226);
+ setState(231);
typeCondition();
}
}
- setState(230);
+ setState(235);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(229);
+ setState(234);
directives();
}
}
- setState(232);
+ setState(237);
selectionSet();
}
}
@@ -1229,6 +1335,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFragmentDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitFragmentDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final FragmentDefinitionContext fragmentDefinition() throws RecognitionException {
@@ -1238,23 +1349,23 @@ public final FragmentDefinitionContext fragmentDefinition() throws RecognitionEx
try {
enterOuterAlt(_localctx, 1);
{
- setState(234);
+ setState(239);
match(FRAGMENT);
- setState(235);
+ setState(240);
fragmentName();
- setState(236);
+ setState(241);
typeCondition();
- setState(238);
+ setState(243);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(237);
+ setState(242);
directives();
}
}
- setState(240);
+ setState(245);
selectionSet();
}
}
@@ -1285,6 +1396,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFragmentName(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitFragmentName(this);
+ else return visitor.visitChildren(this);
+ }
}
public final FragmentNameContext fragmentName() throws RecognitionException {
@@ -1293,7 +1409,7 @@ public final FragmentNameContext fragmentName() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(242);
+ setState(247);
name();
}
}
@@ -1324,6 +1440,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTypeCondition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitTypeCondition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final TypeConditionContext typeCondition() throws RecognitionException {
@@ -1332,9 +1453,9 @@ public final TypeConditionContext typeCondition() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(244);
+ setState(249);
match(T__10);
- setState(245);
+ setState(250);
typeName();
}
}
@@ -1377,6 +1498,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitName(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitName(this);
+ else return visitor.visitChildren(this);
+ }
}
public final NameContext name() throws RecognitionException {
@@ -1386,7 +1512,7 @@ public final NameContext name() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(247);
+ setState(252);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1438,48 +1564,53 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitValue(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitValue(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ValueContext value() throws RecognitionException {
ValueContext _localctx = new ValueContext(_ctx, getState());
enterRule(_localctx, 44, RULE_value);
try {
- setState(257);
+ setState(262);
_errHandler.sync(this);
switch (_input.LA(1)) {
case StringValue:
case TripleQuotedStringValue:
enterOuterAlt(_localctx, 1);
{
- setState(249);
+ setState(254);
stringValue();
}
break;
case IntValue:
enterOuterAlt(_localctx, 2);
{
- setState(250);
+ setState(255);
match(IntValue);
}
break;
case FloatValue:
enterOuterAlt(_localctx, 3);
{
- setState(251);
+ setState(256);
match(FloatValue);
}
break;
case BooleanValue:
enterOuterAlt(_localctx, 4);
{
- setState(252);
+ setState(257);
match(BooleanValue);
}
break;
case NullValue:
enterOuterAlt(_localctx, 5);
{
- setState(253);
+ setState(258);
match(NullValue);
}
break;
@@ -1500,21 +1631,21 @@ public final ValueContext value() throws RecognitionException {
case NAME:
enterOuterAlt(_localctx, 6);
{
- setState(254);
+ setState(259);
enumValue();
}
break;
case T__11:
enterOuterAlt(_localctx, 7);
{
- setState(255);
+ setState(260);
arrayValue();
}
break;
case T__1:
enterOuterAlt(_localctx, 8);
{
- setState(256);
+ setState(261);
objectValue();
}
break;
@@ -1565,19 +1696,24 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitValueWithVariable(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitValueWithVariable(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ValueWithVariableContext valueWithVariable() throws RecognitionException {
ValueWithVariableContext _localctx = new ValueWithVariableContext(_ctx, getState());
enterRule(_localctx, 46, RULE_valueWithVariable);
try {
- setState(268);
+ setState(273);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__7:
enterOuterAlt(_localctx, 1);
{
- setState(259);
+ setState(264);
variable();
}
break;
@@ -1585,35 +1721,35 @@ public final ValueWithVariableContext valueWithVariable() throws RecognitionExce
case TripleQuotedStringValue:
enterOuterAlt(_localctx, 2);
{
- setState(260);
+ setState(265);
stringValue();
}
break;
case IntValue:
enterOuterAlt(_localctx, 3);
{
- setState(261);
+ setState(266);
match(IntValue);
}
break;
case FloatValue:
enterOuterAlt(_localctx, 4);
{
- setState(262);
+ setState(267);
match(FloatValue);
}
break;
case BooleanValue:
enterOuterAlt(_localctx, 5);
{
- setState(263);
+ setState(268);
match(BooleanValue);
}
break;
case NullValue:
enterOuterAlt(_localctx, 6);
{
- setState(264);
+ setState(269);
match(NullValue);
}
break;
@@ -1634,21 +1770,21 @@ public final ValueWithVariableContext valueWithVariable() throws RecognitionExce
case NAME:
enterOuterAlt(_localctx, 7);
{
- setState(265);
+ setState(270);
enumValue();
}
break;
case T__11:
enterOuterAlt(_localctx, 8);
{
- setState(266);
+ setState(271);
arrayValueWithVariable();
}
break;
case T__1:
enterOuterAlt(_localctx, 9);
{
- setState(267);
+ setState(272);
objectValueWithVariable();
}
break;
@@ -1682,6 +1818,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitStringValue(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitStringValue(this);
+ else return visitor.visitChildren(this);
+ }
}
public final StringValueContext stringValue() throws RecognitionException {
@@ -1691,7 +1832,7 @@ public final StringValueContext stringValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(270);
+ setState(275);
_la = _input.LA(1);
if ( !(_la==StringValue || _la==TripleQuotedStringValue) ) {
_errHandler.recoverInline(this);
@@ -1730,6 +1871,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDescription(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitDescription(this);
+ else return visitor.visitChildren(this);
+ }
}
public final DescriptionContext description() throws RecognitionException {
@@ -1738,7 +1884,7 @@ public final DescriptionContext description() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(272);
+ setState(277);
stringValue();
}
}
@@ -1769,6 +1915,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitEnumValue(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitEnumValue(this);
+ else return visitor.visitChildren(this);
+ }
}
public final EnumValueContext enumValue() throws RecognitionException {
@@ -1777,7 +1928,7 @@ public final EnumValueContext enumValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(274);
+ setState(279);
name();
}
}
@@ -1811,6 +1962,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitArrayValue(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitArrayValue(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ArrayValueContext arrayValue() throws RecognitionException {
@@ -1820,23 +1976,23 @@ public final ArrayValueContext arrayValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(276);
+ setState(281);
match(T__11);
- setState(280);
+ setState(285);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__11) | (1L << BooleanValue) | (1L << NullValue) | (1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << IntValue) | (1L << FloatValue) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0)) {
{
{
- setState(277);
+ setState(282);
value();
}
}
- setState(282);
+ setState(287);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(283);
+ setState(288);
match(T__12);
}
}
@@ -1870,6 +2026,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitArrayValueWithVariable(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitArrayValueWithVariable(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ArrayValueWithVariableContext arrayValueWithVariable() throws RecognitionException {
@@ -1879,23 +2040,23 @@ public final ArrayValueWithVariableContext arrayValueWithVariable() throws Recog
try {
enterOuterAlt(_localctx, 1);
{
- setState(285);
+ setState(290);
match(T__11);
- setState(289);
+ setState(294);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__7) | (1L << T__11) | (1L << BooleanValue) | (1L << NullValue) | (1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << IntValue) | (1L << FloatValue) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0)) {
{
{
- setState(286);
+ setState(291);
valueWithVariable();
}
}
- setState(291);
+ setState(296);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(292);
+ setState(297);
match(T__12);
}
}
@@ -1929,6 +2090,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitObjectValue(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitObjectValue(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ObjectValueContext objectValue() throws RecognitionException {
@@ -1938,23 +2104,23 @@ public final ObjectValueContext objectValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(294);
+ setState(299);
match(T__1);
- setState(298);
+ setState(303);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0)) {
{
{
- setState(295);
+ setState(300);
objectField();
}
}
- setState(300);
+ setState(305);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(301);
+ setState(306);
match(T__2);
}
}
@@ -1988,6 +2154,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitObjectValueWithVariable(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitObjectValueWithVariable(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ObjectValueWithVariableContext objectValueWithVariable() throws RecognitionException {
@@ -1997,23 +2168,23 @@ public final ObjectValueWithVariableContext objectValueWithVariable() throws Rec
try {
enterOuterAlt(_localctx, 1);
{
- setState(303);
+ setState(308);
match(T__1);
- setState(307);
+ setState(312);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0)) {
{
{
- setState(304);
+ setState(309);
objectFieldWithVariable();
}
}
- setState(309);
+ setState(314);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(310);
+ setState(315);
match(T__2);
}
}
@@ -2047,6 +2218,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitObjectField(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitObjectField(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ObjectFieldContext objectField() throws RecognitionException {
@@ -2055,11 +2231,11 @@ public final ObjectFieldContext objectField() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(312);
+ setState(317);
name();
- setState(313);
+ setState(318);
match(T__4);
- setState(314);
+ setState(319);
value();
}
}
@@ -2093,6 +2269,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitObjectFieldWithVariable(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitObjectFieldWithVariable(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ObjectFieldWithVariableContext objectFieldWithVariable() throws RecognitionException {
@@ -2101,11 +2282,11 @@ public final ObjectFieldWithVariableContext objectFieldWithVariable() throws Rec
try {
enterOuterAlt(_localctx, 1);
{
- setState(316);
+ setState(321);
name();
- setState(317);
+ setState(322);
match(T__4);
- setState(318);
+ setState(323);
valueWithVariable();
}
}
@@ -2139,6 +2320,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDirectives(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitDirectives(this);
+ else return visitor.visitChildren(this);
+ }
}
public final DirectivesContext directives() throws RecognitionException {
@@ -2148,17 +2334,17 @@ public final DirectivesContext directives() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(321);
+ setState(326);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(320);
+ setState(325);
directive();
}
}
- setState(323);
+ setState(328);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==T__13 );
@@ -2194,6 +2380,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDirective(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitDirective(this);
+ else return visitor.visitChildren(this);
+ }
}
public final DirectiveContext directive() throws RecognitionException {
@@ -2203,16 +2394,16 @@ public final DirectiveContext directive() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(325);
+ setState(330);
match(T__13);
- setState(326);
+ setState(331);
name();
- setState(328);
+ setState(333);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(327);
+ setState(332);
arguments();
}
}
@@ -2252,33 +2443,38 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitType(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitType(this);
+ else return visitor.visitChildren(this);
+ }
}
public final TypeContext type() throws RecognitionException {
TypeContext _localctx = new TypeContext(_ctx, getState());
enterRule(_localctx, 70, RULE_type);
try {
- setState(333);
+ setState(338);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(330);
+ setState(335);
typeName();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(331);
+ setState(336);
listType();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(332);
+ setState(337);
nonNullType();
}
break;
@@ -2311,6 +2507,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTypeName(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitTypeName(this);
+ else return visitor.visitChildren(this);
+ }
}
public final TypeNameContext typeName() throws RecognitionException {
@@ -2319,7 +2520,7 @@ public final TypeNameContext typeName() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(335);
+ setState(340);
name();
}
}
@@ -2350,6 +2551,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitListType(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitListType(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ListTypeContext listType() throws RecognitionException {
@@ -2358,11 +2564,11 @@ public final ListTypeContext listType() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(337);
+ setState(342);
match(T__11);
- setState(338);
+ setState(343);
type();
- setState(339);
+ setState(344);
match(T__12);
}
}
@@ -2396,13 +2602,18 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitNonNullType(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitNonNullType(this);
+ else return visitor.visitChildren(this);
+ }
}
public final NonNullTypeContext nonNullType() throws RecognitionException {
NonNullTypeContext _localctx = new NonNullTypeContext(_ctx, getState());
enterRule(_localctx, 76, RULE_nonNullType);
try {
- setState(347);
+ setState(352);
_errHandler.sync(this);
switch (_input.LA(1)) {
case FRAGMENT:
@@ -2422,18 +2633,18 @@ public final NonNullTypeContext nonNullType() throws RecognitionException {
case NAME:
enterOuterAlt(_localctx, 1);
{
- setState(341);
+ setState(346);
typeName();
- setState(342);
+ setState(347);
match(T__14);
}
break;
case T__11:
enterOuterAlt(_localctx, 2);
{
- setState(344);
+ setState(349);
listType();
- setState(345);
+ setState(350);
match(T__14);
}
break;
@@ -2480,50 +2691,55 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTypeSystemDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitTypeSystemDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final TypeSystemDefinitionContext typeSystemDefinition() throws RecognitionException {
TypeSystemDefinitionContext _localctx = new TypeSystemDefinitionContext(_ctx, getState());
enterRule(_localctx, 78, RULE_typeSystemDefinition);
try {
- setState(356);
+ setState(361);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,31,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(350);
+ setState(355);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) {
case 1:
{
- setState(349);
+ setState(354);
description();
}
break;
}
- setState(352);
+ setState(357);
schemaDefinition();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(353);
+ setState(358);
typeDefinition();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(354);
+ setState(359);
typeExtensionDefinition();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(355);
+ setState(360);
directiveDefinition();
}
break;
@@ -2566,6 +2782,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitSchemaDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitSchemaDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final SchemaDefinitionContext schemaDefinition() throws RecognitionException {
@@ -2575,45 +2796,45 @@ public final SchemaDefinitionContext schemaDefinition() throws RecognitionExcept
try {
enterOuterAlt(_localctx, 1);
{
- setState(359);
+ setState(364);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(358);
+ setState(363);
description();
}
}
- setState(361);
+ setState(366);
match(SCHEMA);
- setState(363);
+ setState(368);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(362);
+ setState(367);
directives();
}
}
- setState(365);
+ setState(370);
match(T__1);
- setState(367);
+ setState(372);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(366);
+ setState(371);
operationTypeDefinition();
}
}
- setState(369);
+ setState(374);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(371);
+ setState(376);
match(T__2);
}
}
@@ -2650,6 +2871,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitOperationTypeDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitOperationTypeDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final OperationTypeDefinitionContext operationTypeDefinition() throws RecognitionException {
@@ -2659,21 +2885,21 @@ public final OperationTypeDefinitionContext operationTypeDefinition() throws Rec
try {
enterOuterAlt(_localctx, 1);
{
- setState(374);
+ setState(379);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(373);
+ setState(378);
description();
}
}
- setState(376);
+ setState(381);
operationType();
- setState(377);
+ setState(382);
match(T__4);
- setState(378);
+ setState(383);
typeName();
}
}
@@ -2719,54 +2945,59 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTypeDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitTypeDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final TypeDefinitionContext typeDefinition() throws RecognitionException {
TypeDefinitionContext _localctx = new TypeDefinitionContext(_ctx, getState());
enterRule(_localctx, 84, RULE_typeDefinition);
try {
- setState(386);
+ setState(391);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(380);
+ setState(385);
scalarTypeDefinition();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(381);
+ setState(386);
objectTypeDefinition();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(382);
+ setState(387);
interfaceTypeDefinition();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(383);
+ setState(388);
unionTypeDefinition();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(384);
+ setState(389);
enumTypeDefinition();
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(385);
+ setState(390);
inputObjectTypeDefinition();
}
break;
@@ -2806,6 +3037,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitScalarTypeDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitScalarTypeDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ScalarTypeDefinitionContext scalarTypeDefinition() throws RecognitionException {
@@ -2815,26 +3051,26 @@ public final ScalarTypeDefinitionContext scalarTypeDefinition() throws Recogniti
try {
enterOuterAlt(_localctx, 1);
{
- setState(389);
+ setState(394);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(388);
+ setState(393);
description();
}
}
- setState(391);
+ setState(396);
match(SCALAR);
- setState(392);
+ setState(397);
name();
- setState(394);
+ setState(399);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(393);
+ setState(398);
directives();
}
}
@@ -2881,6 +3117,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitObjectTypeDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitObjectTypeDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ObjectTypeDefinitionContext objectTypeDefinition() throws RecognitionException {
@@ -2890,46 +3131,46 @@ public final ObjectTypeDefinitionContext objectTypeDefinition() throws Recogniti
try {
enterOuterAlt(_localctx, 1);
{
- setState(397);
+ setState(402);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(396);
+ setState(401);
description();
}
}
- setState(399);
+ setState(404);
match(TYPE);
- setState(400);
+ setState(405);
name();
- setState(402);
+ setState(407);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==IMPLEMENTS) {
{
- setState(401);
+ setState(406);
implementsInterfaces(0);
}
}
- setState(405);
+ setState(410);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(404);
+ setState(409);
directives();
}
}
- setState(408);
+ setState(413);
_errHandler.sync(this);
- switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) {
+ switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) {
case 1:
{
- setState(407);
+ setState(412);
fieldsDefinition();
}
break;
@@ -2970,6 +3211,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitImplementsInterfaces(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitImplementsInterfaces(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ImplementsInterfacesContext implementsInterfaces() throws RecognitionException {
@@ -2989,19 +3235,19 @@ private ImplementsInterfacesContext implementsInterfaces(int _p) throws Recognit
enterOuterAlt(_localctx, 1);
{
{
- setState(411);
+ setState(416);
match(IMPLEMENTS);
- setState(413);
+ setState(418);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__15) {
{
- setState(412);
+ setState(417);
match(T__15);
}
}
- setState(416);
+ setState(421);
_errHandler.sync(this);
_alt = 1;
do {
@@ -3009,7 +3255,7 @@ private ImplementsInterfacesContext implementsInterfaces(int _p) throws Recognit
case 1:
{
{
- setState(415);
+ setState(420);
typeName();
}
}
@@ -3017,15 +3263,15 @@ private ImplementsInterfacesContext implementsInterfaces(int _p) throws Recognit
default:
throw new NoViableAltException(this);
}
- setState(418);
+ setState(423);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,43,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,44,_ctx);
} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
}
_ctx.stop = _input.LT(-1);
- setState(425);
+ setState(430);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,44,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,45,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -3034,18 +3280,18 @@ private ImplementsInterfacesContext implementsInterfaces(int _p) throws Recognit
{
_localctx = new ImplementsInterfacesContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_implementsInterfaces);
- setState(420);
+ setState(425);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(421);
+ setState(426);
match(T__15);
- setState(422);
+ setState(427);
typeName();
}
}
}
- setState(427);
+ setState(432);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,44,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,45,_ctx);
}
}
}
@@ -3079,6 +3325,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFieldsDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitFieldsDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final FieldsDefinitionContext fieldsDefinition() throws RecognitionException {
@@ -3088,23 +3339,23 @@ public final FieldsDefinitionContext fieldsDefinition() throws RecognitionExcept
try {
enterOuterAlt(_localctx, 1);
{
- setState(428);
+ setState(433);
match(T__1);
- setState(430);
+ setState(435);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(429);
+ setState(434);
fieldDefinition();
}
}
- setState(432);
+ setState(437);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(434);
+ setState(439);
match(T__2);
}
}
@@ -3147,6 +3398,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFieldDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitFieldDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final FieldDefinitionContext fieldDefinition() throws RecognitionException {
@@ -3156,38 +3412,38 @@ public final FieldDefinitionContext fieldDefinition() throws RecognitionExceptio
try {
enterOuterAlt(_localctx, 1);
{
- setState(437);
+ setState(442);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(436);
+ setState(441);
description();
}
}
- setState(439);
+ setState(444);
name();
- setState(441);
+ setState(446);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(440);
+ setState(445);
argumentsDefinition();
}
}
- setState(443);
+ setState(448);
match(T__4);
- setState(444);
+ setState(449);
type();
- setState(446);
+ setState(451);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(445);
+ setState(450);
directives();
}
}
@@ -3224,6 +3480,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitArgumentsDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitArgumentsDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final ArgumentsDefinitionContext argumentsDefinition() throws RecognitionException {
@@ -3233,23 +3494,23 @@ public final ArgumentsDefinitionContext argumentsDefinition() throws Recognition
try {
enterOuterAlt(_localctx, 1);
{
- setState(448);
+ setState(453);
match(T__5);
- setState(450);
+ setState(455);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(449);
+ setState(454);
inputValueDefinition();
}
}
- setState(452);
+ setState(457);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(454);
+ setState(459);
match(T__6);
}
}
@@ -3292,6 +3553,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitInputValueDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitInputValueDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final InputValueDefinitionContext inputValueDefinition() throws RecognitionException {
@@ -3301,38 +3567,38 @@ public final InputValueDefinitionContext inputValueDefinition() throws Recogniti
try {
enterOuterAlt(_localctx, 1);
{
- setState(457);
+ setState(462);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(456);
+ setState(461);
description();
}
}
- setState(459);
+ setState(464);
name();
- setState(460);
+ setState(465);
match(T__4);
- setState(461);
+ setState(466);
type();
- setState(463);
+ setState(468);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__8) {
{
- setState(462);
+ setState(467);
defaultValue();
}
}
- setState(466);
+ setState(471);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(465);
+ setState(470);
directives();
}
}
@@ -3379,6 +3645,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitInterfaceTypeDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitInterfaceTypeDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final InterfaceTypeDefinitionContext interfaceTypeDefinition() throws RecognitionException {
@@ -3388,47 +3659,47 @@ public final InterfaceTypeDefinitionContext interfaceTypeDefinition() throws Rec
try {
enterOuterAlt(_localctx, 1);
{
- setState(469);
+ setState(474);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(468);
+ setState(473);
description();
}
}
- setState(471);
+ setState(476);
match(INTERFACE);
- setState(472);
+ setState(477);
name();
- setState(474);
+ setState(479);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(473);
+ setState(478);
directives();
}
}
- setState(476);
+ setState(481);
match(T__1);
- setState(478);
+ setState(483);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(477);
+ setState(482);
fieldDefinition();
}
}
- setState(480);
+ setState(485);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(482);
+ setState(487);
match(T__2);
}
}
@@ -3469,6 +3740,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitUnionTypeDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitUnionTypeDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final UnionTypeDefinitionContext unionTypeDefinition() throws RecognitionException {
@@ -3478,33 +3754,33 @@ public final UnionTypeDefinitionContext unionTypeDefinition() throws Recognition
try {
enterOuterAlt(_localctx, 1);
{
- setState(485);
+ setState(490);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(484);
+ setState(489);
description();
}
}
- setState(487);
+ setState(492);
match(UNION);
- setState(488);
+ setState(493);
name();
- setState(490);
+ setState(495);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(489);
+ setState(494);
directives();
}
}
- setState(492);
+ setState(497);
match(T__8);
- setState(493);
+ setState(498);
unionMembers(0);
}
}
@@ -3538,6 +3814,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitUnionMembers(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitUnionMembers(this);
+ else return visitor.visitChildren(this);
+ }
}
public final UnionMembersContext unionMembers() throws RecognitionException {
@@ -3556,13 +3837,13 @@ private UnionMembersContext unionMembers(int _p) throws RecognitionException {
enterOuterAlt(_localctx, 1);
{
{
- setState(496);
+ setState(501);
typeName();
}
_ctx.stop = _input.LT(-1);
- setState(503);
+ setState(508);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,58,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,59,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -3571,18 +3852,18 @@ private UnionMembersContext unionMembers(int _p) throws RecognitionException {
{
_localctx = new UnionMembersContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_unionMembers);
- setState(498);
+ setState(503);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(499);
+ setState(504);
match(T__16);
- setState(500);
+ setState(505);
typeName();
}
}
}
- setState(505);
+ setState(510);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,58,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,59,_ctx);
}
}
}
@@ -3626,6 +3907,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitEnumTypeDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitEnumTypeDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final EnumTypeDefinitionContext enumTypeDefinition() throws RecognitionException {
@@ -3635,47 +3921,47 @@ public final EnumTypeDefinitionContext enumTypeDefinition() throws RecognitionEx
try {
enterOuterAlt(_localctx, 1);
{
- setState(507);
+ setState(512);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(506);
+ setState(511);
description();
}
}
- setState(509);
+ setState(514);
match(ENUM);
- setState(510);
+ setState(515);
name();
- setState(512);
+ setState(517);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(511);
+ setState(516);
directives();
}
}
- setState(514);
+ setState(519);
match(T__1);
- setState(516);
+ setState(521);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(515);
+ setState(520);
enumValueDefinition();
}
}
- setState(518);
+ setState(523);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(520);
+ setState(525);
match(T__2);
}
}
@@ -3712,6 +3998,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitEnumValueDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitEnumValueDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final EnumValueDefinitionContext enumValueDefinition() throws RecognitionException {
@@ -3721,24 +4012,24 @@ public final EnumValueDefinitionContext enumValueDefinition() throws Recognition
try {
enterOuterAlt(_localctx, 1);
{
- setState(523);
+ setState(528);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(522);
+ setState(527);
description();
}
}
- setState(525);
+ setState(530);
enumValue();
- setState(527);
+ setState(532);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(526);
+ setState(531);
directives();
}
}
@@ -3785,6 +4076,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitInputObjectTypeDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitInputObjectTypeDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final InputObjectTypeDefinitionContext inputObjectTypeDefinition() throws RecognitionException {
@@ -3794,47 +4090,47 @@ public final InputObjectTypeDefinitionContext inputObjectTypeDefinition() throws
try {
enterOuterAlt(_localctx, 1);
{
- setState(530);
+ setState(535);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(529);
+ setState(534);
description();
}
}
- setState(532);
+ setState(537);
match(INPUT);
- setState(533);
+ setState(538);
name();
- setState(535);
+ setState(540);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(534);
+ setState(539);
directives();
}
}
- setState(537);
+ setState(542);
match(T__1);
- setState(539);
+ setState(544);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(538);
+ setState(543);
inputValueDefinition();
}
}
- setState(541);
+ setState(546);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(543);
+ setState(548);
match(T__2);
}
}
@@ -3866,6 +4162,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTypeExtensionDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitTypeExtensionDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final TypeExtensionDefinitionContext typeExtensionDefinition() throws RecognitionException {
@@ -3874,9 +4175,9 @@ public final TypeExtensionDefinitionContext typeExtensionDefinition() throws Rec
try {
enterOuterAlt(_localctx, 1);
{
- setState(545);
+ setState(550);
match(EXTEND);
- setState(546);
+ setState(551);
objectTypeDefinition();
}
}
@@ -3917,6 +4218,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDirectiveDefinition(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitDirectiveDefinition(this);
+ else return visitor.visitChildren(this);
+ }
}
public final DirectiveDefinitionContext directiveDefinition() throws RecognitionException {
@@ -3926,35 +4232,35 @@ public final DirectiveDefinitionContext directiveDefinition() throws Recognition
try {
enterOuterAlt(_localctx, 1);
{
- setState(549);
+ setState(554);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(548);
+ setState(553);
description();
}
}
- setState(551);
+ setState(556);
match(DIRECTIVE);
- setState(552);
+ setState(557);
match(T__13);
- setState(553);
+ setState(558);
name();
- setState(555);
+ setState(560);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(554);
+ setState(559);
argumentsDefinition();
}
}
- setState(557);
+ setState(562);
match(T__10);
- setState(558);
+ setState(563);
directiveLocations(0);
}
}
@@ -3985,6 +4291,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDirectiveLocation(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitDirectiveLocation(this);
+ else return visitor.visitChildren(this);
+ }
}
public final DirectiveLocationContext directiveLocation() throws RecognitionException {
@@ -3993,7 +4304,7 @@ public final DirectiveLocationContext directiveLocation() throws RecognitionExce
try {
enterOuterAlt(_localctx, 1);
{
- setState(560);
+ setState(565);
name();
}
}
@@ -4027,6 +4338,11 @@ public void enterRule(ParseTreeListener listener) {
public void exitRule(ParseTreeListener listener) {
if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDirectiveLocations(this);
}
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitDirectiveLocations(this);
+ else return visitor.visitChildren(this);
+ }
}
public final DirectiveLocationsContext directiveLocations() throws RecognitionException {
@@ -4045,13 +4361,13 @@ private DirectiveLocationsContext directiveLocations(int _p) throws RecognitionE
enterOuterAlt(_localctx, 1);
{
{
- setState(563);
+ setState(568);
directiveLocation();
}
_ctx.stop = _input.LT(-1);
- setState(570);
+ setState(575);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,69,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,70,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -4060,18 +4376,18 @@ private DirectiveLocationsContext directiveLocations(int _p) throws RecognitionE
{
_localctx = new DirectiveLocationsContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_directiveLocations);
- setState(565);
+ setState(570);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(566);
+ setState(571);
match(T__16);
- setState(567);
+ setState(572);
directiveLocation();
}
}
}
- setState(572);
+ setState(577);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,69,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,70,_ctx);
}
}
}
@@ -4120,7 +4436,7 @@ private boolean directiveLocations_sempred(DirectiveLocationsContext _localctx,
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3/\u0240\4\2\t\2\4"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3/\u0245\4\2\t\2\4"+
"\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
"\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
@@ -4129,210 +4445,213 @@ private boolean directiveLocations_sempred(DirectiveLocationsContext _localctx,
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
"\3\2\6\2|\n\2\r\2\16\2}\3\3\3\3\3\3\3\3\5\3\u0084\n\3\3\4\3\4\3\4\3\4"+
- "\3\4\3\4\3\4\3\5\3\5\3\5\3\5\3\6\3\6\3\6\5\6\u0094\n\6\3\6\5\6\u0097\n"+
- "\6\3\6\5\6\u009a\n\6\3\6\3\6\5\6\u009e\n\6\3\7\3\7\3\b\3\b\6\b\u00a4\n"+
- "\b\r\b\16\b\u00a5\3\b\3\b\3\t\3\t\3\t\3\t\5\t\u00ae\n\t\3\n\3\n\3\n\3"+
- "\13\3\13\3\13\3\f\3\f\6\f\u00b8\n\f\r\f\16\f\u00b9\3\f\3\f\3\r\3\r\3\r"+
- "\5\r\u00c1\n\r\3\16\5\16\u00c4\n\16\3\16\3\16\5\16\u00c8\n\16\3\16\5\16"+
- "\u00cb\n\16\3\16\5\16\u00ce\n\16\3\17\3\17\3\17\3\20\3\20\6\20\u00d5\n"+
- "\20\r\20\16\20\u00d6\3\20\3\20\3\21\3\21\3\21\3\21\3\22\3\22\3\22\5\22"+
- "\u00e2\n\22\3\23\3\23\5\23\u00e6\n\23\3\23\5\23\u00e9\n\23\3\23\3\23\3"+
- "\24\3\24\3\24\3\24\5\24\u00f1\n\24\3\24\3\24\3\25\3\25\3\26\3\26\3\26"+
- "\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u0104\n\30\3\31"+
- "\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\5\31\u010f\n\31\3\32\3\32\3\33"+
- "\3\33\3\34\3\34\3\35\3\35\7\35\u0119\n\35\f\35\16\35\u011c\13\35\3\35"+
- "\3\35\3\36\3\36\7\36\u0122\n\36\f\36\16\36\u0125\13\36\3\36\3\36\3\37"+
- "\3\37\7\37\u012b\n\37\f\37\16\37\u012e\13\37\3\37\3\37\3 \3 \7 \u0134"+
- "\n \f \16 \u0137\13 \3 \3 \3!\3!\3!\3!\3\"\3\"\3\"\3\"\3#\6#\u0144\n#"+
- "\r#\16#\u0145\3$\3$\3$\5$\u014b\n$\3%\3%\3%\5%\u0150\n%\3&\3&\3\'\3\'"+
- "\3\'\3\'\3(\3(\3(\3(\3(\3(\5(\u015e\n(\3)\5)\u0161\n)\3)\3)\3)\3)\5)\u0167"+
- "\n)\3*\5*\u016a\n*\3*\3*\5*\u016e\n*\3*\3*\6*\u0172\n*\r*\16*\u0173\3"+
- "*\3*\3+\5+\u0179\n+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3,\5,\u0185\n,\3-\5-\u0188"+
- "\n-\3-\3-\3-\5-\u018d\n-\3.\5.\u0190\n.\3.\3.\3.\5.\u0195\n.\3.\5.\u0198"+
- "\n.\3.\5.\u019b\n.\3/\3/\3/\5/\u01a0\n/\3/\6/\u01a3\n/\r/\16/\u01a4\3"+
- "/\3/\3/\7/\u01aa\n/\f/\16/\u01ad\13/\3\60\3\60\6\60\u01b1\n\60\r\60\16"+
- "\60\u01b2\3\60\3\60\3\61\5\61\u01b8\n\61\3\61\3\61\5\61\u01bc\n\61\3\61"+
- "\3\61\3\61\5\61\u01c1\n\61\3\62\3\62\6\62\u01c5\n\62\r\62\16\62\u01c6"+
- "\3\62\3\62\3\63\5\63\u01cc\n\63\3\63\3\63\3\63\3\63\5\63\u01d2\n\63\3"+
- "\63\5\63\u01d5\n\63\3\64\5\64\u01d8\n\64\3\64\3\64\3\64\5\64\u01dd\n\64"+
- "\3\64\3\64\6\64\u01e1\n\64\r\64\16\64\u01e2\3\64\3\64\3\65\5\65\u01e8"+
- "\n\65\3\65\3\65\3\65\5\65\u01ed\n\65\3\65\3\65\3\65\3\66\3\66\3\66\3\66"+
- "\3\66\3\66\7\66\u01f8\n\66\f\66\16\66\u01fb\13\66\3\67\5\67\u01fe\n\67"+
- "\3\67\3\67\3\67\5\67\u0203\n\67\3\67\3\67\6\67\u0207\n\67\r\67\16\67\u0208"+
- "\3\67\3\67\38\58\u020e\n8\38\38\58\u0212\n8\39\59\u0215\n9\39\39\39\5"+
- "9\u021a\n9\39\39\69\u021e\n9\r9\169\u021f\39\39\3:\3:\3:\3;\5;\u0228\n"+
- ";\3;\3;\3;\3;\5;\u022e\n;\3;\3;\3;\3<\3<\3=\3=\3=\3=\3=\3=\7=\u023b\n"+
- "=\f=\16=\u023e\13=\3=\2\5\\jx>\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36"+
- " \"$&(*,.\60\62\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvx\2\5\3\2\27\31"+
- "\3\2\26$\3\2,-\2\u0260\2{\3\2\2\2\4\u0083\3\2\2\2\6\u0085\3\2\2\2\b\u008c"+
- "\3\2\2\2\n\u009d\3\2\2\2\f\u009f\3\2\2\2\16\u00a1\3\2\2\2\20\u00a9\3\2"+
- "\2\2\22\u00af\3\2\2\2\24\u00b2\3\2\2\2\26\u00b5\3\2\2\2\30\u00c0\3\2\2"+
- "\2\32\u00c3\3\2\2\2\34\u00cf\3\2\2\2\36\u00d2\3\2\2\2 \u00da\3\2\2\2\""+
- "\u00de\3\2\2\2$\u00e3\3\2\2\2&\u00ec\3\2\2\2(\u00f4\3\2\2\2*\u00f6\3\2"+
- "\2\2,\u00f9\3\2\2\2.\u0103\3\2\2\2\60\u010e\3\2\2\2\62\u0110\3\2\2\2\64"+
- "\u0112\3\2\2\2\66\u0114\3\2\2\28\u0116\3\2\2\2:\u011f\3\2\2\2<\u0128\3"+
- "\2\2\2>\u0131\3\2\2\2@\u013a\3\2\2\2B\u013e\3\2\2\2D\u0143\3\2\2\2F\u0147"+
- "\3\2\2\2H\u014f\3\2\2\2J\u0151\3\2\2\2L\u0153\3\2\2\2N\u015d\3\2\2\2P"+
- "\u0166\3\2\2\2R\u0169\3\2\2\2T\u0178\3\2\2\2V\u0184\3\2\2\2X\u0187\3\2"+
- "\2\2Z\u018f\3\2\2\2\\\u019c\3\2\2\2^\u01ae\3\2\2\2`\u01b7\3\2\2\2b\u01c2"+
- "\3\2\2\2d\u01cb\3\2\2\2f\u01d7\3\2\2\2h\u01e7\3\2\2\2j\u01f1\3\2\2\2l"+
- "\u01fd\3\2\2\2n\u020d\3\2\2\2p\u0214\3\2\2\2r\u0223\3\2\2\2t\u0227\3\2"+
- "\2\2v\u0232\3\2\2\2x\u0234\3\2\2\2z|\5\4\3\2{z\3\2\2\2|}\3\2\2\2}{\3\2"+
- "\2\2}~\3\2\2\2~\3\3\2\2\2\177\u0084\5\n\6\2\u0080\u0084\5&\24\2\u0081"+
- "\u0084\5P)\2\u0082\u0084\5\6\4\2\u0083\177\3\2\2\2\u0083\u0080\3\2\2\2"+
- "\u0083\u0081\3\2\2\2\u0083\u0082\3\2\2\2\u0084\5\3\2\2\2\u0085\u0086\7"+
- "\3\2\2\u0086\u0087\5,\27\2\u0087\u0088\7\4\2\2\u0088\u0089\5\b\5\2\u0089"+
- "\u008a\5P)\2\u008a\u008b\7\5\2\2\u008b\7\3\2\2\2\u008c\u008d\7\6\2\2\u008d"+
- "\u008e\7\7\2\2\u008e\u008f\5\62\32\2\u008f\t\3\2\2\2\u0090\u009e\5\26"+
- "\f\2\u0091\u0093\5\f\7\2\u0092\u0094\5,\27\2\u0093\u0092\3\2\2\2\u0093"+
- "\u0094\3\2\2\2\u0094\u0096\3\2\2\2\u0095\u0097\5\16\b\2\u0096\u0095\3"+
- "\2\2\2\u0096\u0097\3\2\2\2\u0097\u0099\3\2\2\2\u0098\u009a\5D#\2\u0099"+
- "\u0098\3\2\2\2\u0099\u009a\3\2\2\2\u009a\u009b\3\2\2\2\u009b\u009c\5\26"+
- "\f\2\u009c\u009e\3\2\2\2\u009d\u0090\3\2\2\2\u009d\u0091\3\2\2\2\u009e"+
- "\13\3\2\2\2\u009f\u00a0\t\2\2\2\u00a0\r\3\2\2\2\u00a1\u00a3\7\b\2\2\u00a2"+
- "\u00a4\5\20\t\2\u00a3\u00a2\3\2\2\2\u00a4\u00a5\3\2\2\2\u00a5\u00a3\3"+
- "\2\2\2\u00a5\u00a6\3\2\2\2\u00a6\u00a7\3\2\2\2\u00a7\u00a8\7\t\2\2\u00a8"+
- "\17\3\2\2\2\u00a9\u00aa\5\22\n\2\u00aa\u00ab\7\7\2\2\u00ab\u00ad\5H%\2"+
- "\u00ac\u00ae\5\24\13\2\u00ad\u00ac\3\2\2\2\u00ad\u00ae\3\2\2\2\u00ae\21"+
- "\3\2\2\2\u00af\u00b0\7\n\2\2\u00b0\u00b1\5,\27\2\u00b1\23\3\2\2\2\u00b2"+
- "\u00b3\7\13\2\2\u00b3\u00b4\5.\30\2\u00b4\25\3\2\2\2\u00b5\u00b7\7\4\2"+
- "\2\u00b6\u00b8\5\30\r\2\u00b7\u00b6\3\2\2\2\u00b8\u00b9\3\2\2\2\u00b9"+
- "\u00b7\3\2\2\2\u00b9\u00ba\3\2\2\2\u00ba\u00bb\3\2\2\2\u00bb\u00bc\7\5"+
- "\2\2\u00bc\27\3\2\2\2\u00bd\u00c1\5\32\16\2\u00be\u00c1\5\"\22\2\u00bf"+
- "\u00c1\5$\23\2\u00c0\u00bd\3\2\2\2\u00c0\u00be\3\2\2\2\u00c0\u00bf\3\2"+
- "\2\2\u00c1\31\3\2\2\2\u00c2\u00c4\5\34\17\2\u00c3\u00c2\3\2\2\2\u00c3"+
- "\u00c4\3\2\2\2\u00c4\u00c5\3\2\2\2\u00c5\u00c7\5,\27\2\u00c6\u00c8\5\36"+
- "\20\2\u00c7\u00c6\3\2\2\2\u00c7\u00c8\3\2\2\2\u00c8\u00ca\3\2\2\2\u00c9"+
- "\u00cb\5D#\2\u00ca\u00c9\3\2\2\2\u00ca\u00cb\3\2\2\2\u00cb\u00cd\3\2\2"+
- "\2\u00cc\u00ce\5\26\f\2\u00cd\u00cc\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce"+
- "\33\3\2\2\2\u00cf\u00d0\5,\27\2\u00d0\u00d1\7\7\2\2\u00d1\35\3\2\2\2\u00d2"+
- "\u00d4\7\b\2\2\u00d3\u00d5\5 \21\2\u00d4\u00d3\3\2\2\2\u00d5\u00d6\3\2"+
- "\2\2\u00d6\u00d4\3\2\2\2\u00d6\u00d7\3\2\2\2\u00d7\u00d8\3\2\2\2\u00d8"+
- "\u00d9\7\t\2\2\u00d9\37\3\2\2\2\u00da\u00db\5,\27\2\u00db\u00dc\7\7\2"+
- "\2\u00dc\u00dd\5\60\31\2\u00dd!\3\2\2\2\u00de\u00df\7\f\2\2\u00df\u00e1"+
- "\5(\25\2\u00e0\u00e2\5D#\2\u00e1\u00e0\3\2\2\2\u00e1\u00e2\3\2\2\2\u00e2"+
- "#\3\2\2\2\u00e3\u00e5\7\f\2\2\u00e4\u00e6\5*\26\2\u00e5\u00e4\3\2\2\2"+
- "\u00e5\u00e6\3\2\2\2\u00e6\u00e8\3\2\2\2\u00e7\u00e9\5D#\2\u00e8\u00e7"+
- "\3\2\2\2\u00e8\u00e9\3\2\2\2\u00e9\u00ea\3\2\2\2\u00ea\u00eb\5\26\f\2"+
- "\u00eb%\3\2\2\2\u00ec\u00ed\7\26\2\2\u00ed\u00ee\5(\25\2\u00ee\u00f0\5"+
- "*\26\2\u00ef\u00f1\5D#\2\u00f0\u00ef\3\2\2\2\u00f0\u00f1\3\2\2\2\u00f1"+
- "\u00f2\3\2\2\2\u00f2\u00f3\5\26\f\2\u00f3\'\3\2\2\2\u00f4\u00f5\5,\27"+
- "\2\u00f5)\3\2\2\2\u00f6\u00f7\7\r\2\2\u00f7\u00f8\5J&\2\u00f8+\3\2\2\2"+
- "\u00f9\u00fa\t\3\2\2\u00fa-\3\2\2\2\u00fb\u0104\5\62\32\2\u00fc\u0104"+
- "\7%\2\2\u00fd\u0104\7&\2\2\u00fe\u0104\7\24\2\2\u00ff\u0104\7\25\2\2\u0100"+
- "\u0104\5\66\34\2\u0101\u0104\58\35\2\u0102\u0104\5<\37\2\u0103\u00fb\3"+
- "\2\2\2\u0103\u00fc\3\2\2\2\u0103\u00fd\3\2\2\2\u0103\u00fe\3\2\2\2\u0103"+
- "\u00ff\3\2\2\2\u0103\u0100\3\2\2\2\u0103\u0101\3\2\2\2\u0103\u0102\3\2"+
- "\2\2\u0104/\3\2\2\2\u0105\u010f\5\22\n\2\u0106\u010f\5\62\32\2\u0107\u010f"+
- "\7%\2\2\u0108\u010f\7&\2\2\u0109\u010f\7\24\2\2\u010a\u010f\7\25\2\2\u010b"+
- "\u010f\5\66\34\2\u010c\u010f\5:\36\2\u010d\u010f\5> \2\u010e\u0105\3\2"+
- "\2\2\u010e\u0106\3\2\2\2\u010e\u0107\3\2\2\2\u010e\u0108\3\2\2\2\u010e"+
- "\u0109\3\2\2\2\u010e\u010a\3\2\2\2\u010e\u010b\3\2\2\2\u010e\u010c\3\2"+
- "\2\2\u010e\u010d\3\2\2\2\u010f\61\3\2\2\2\u0110\u0111\t\4\2\2\u0111\63"+
- "\3\2\2\2\u0112\u0113\5\62\32\2\u0113\65\3\2\2\2\u0114\u0115\5,\27\2\u0115"+
- "\67\3\2\2\2\u0116\u011a\7\16\2\2\u0117\u0119\5.\30\2\u0118\u0117\3\2\2"+
- "\2\u0119\u011c\3\2\2\2\u011a\u0118\3\2\2\2\u011a\u011b\3\2\2\2\u011b\u011d"+
- "\3\2\2\2\u011c\u011a\3\2\2\2\u011d\u011e\7\17\2\2\u011e9\3\2\2\2\u011f"+
- "\u0123\7\16\2\2\u0120\u0122\5\60\31\2\u0121\u0120\3\2\2\2\u0122\u0125"+
- "\3\2\2\2\u0123\u0121\3\2\2\2\u0123\u0124\3\2\2\2\u0124\u0126\3\2\2\2\u0125"+
- "\u0123\3\2\2\2\u0126\u0127\7\17\2\2\u0127;\3\2\2\2\u0128\u012c\7\4\2\2"+
- "\u0129\u012b\5@!\2\u012a\u0129\3\2\2\2\u012b\u012e\3\2\2\2\u012c\u012a"+
- "\3\2\2\2\u012c\u012d\3\2\2\2\u012d\u012f\3\2\2\2\u012e\u012c\3\2\2\2\u012f"+
- "\u0130\7\5\2\2\u0130=\3\2\2\2\u0131\u0135\7\4\2\2\u0132\u0134\5B\"\2\u0133"+
- "\u0132\3\2\2\2\u0134\u0137\3\2\2\2\u0135\u0133\3\2\2\2\u0135\u0136\3\2"+
- "\2\2\u0136\u0138\3\2\2\2\u0137\u0135\3\2\2\2\u0138\u0139\7\5\2\2\u0139"+
- "?\3\2\2\2\u013a\u013b\5,\27\2\u013b\u013c\7\7\2\2\u013c\u013d\5.\30\2"+
- "\u013dA\3\2\2\2\u013e\u013f\5,\27\2\u013f\u0140\7\7\2\2\u0140\u0141\5"+
- "\60\31\2\u0141C\3\2\2\2\u0142\u0144\5F$\2\u0143\u0142\3\2\2\2\u0144\u0145"+
- "\3\2\2\2\u0145\u0143\3\2\2\2\u0145\u0146\3\2\2\2\u0146E\3\2\2\2\u0147"+
- "\u0148\7\20\2\2\u0148\u014a\5,\27\2\u0149\u014b\5\36\20\2\u014a\u0149"+
- "\3\2\2\2\u014a\u014b\3\2\2\2\u014bG\3\2\2\2\u014c\u0150\5J&\2\u014d\u0150"+
- "\5L\'\2\u014e\u0150\5N(\2\u014f\u014c\3\2\2\2\u014f\u014d\3\2\2\2\u014f"+
- "\u014e\3\2\2\2\u0150I\3\2\2\2\u0151\u0152\5,\27\2\u0152K\3\2\2\2\u0153"+
- "\u0154\7\16\2\2\u0154\u0155\5H%\2\u0155\u0156\7\17\2\2\u0156M\3\2\2\2"+
- "\u0157\u0158\5J&\2\u0158\u0159\7\21\2\2\u0159\u015e\3\2\2\2\u015a\u015b"+
- "\5L\'\2\u015b\u015c\7\21\2\2\u015c\u015e\3\2\2\2\u015d\u0157\3\2\2\2\u015d"+
- "\u015a\3\2\2\2\u015eO\3\2\2\2\u015f\u0161\5\64\33\2\u0160\u015f\3\2\2"+
- "\2\u0160\u0161\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u0167\5R*\2\u0163\u0167"+
- "\5V,\2\u0164\u0167\5r:\2\u0165\u0167\5t;\2\u0166\u0160\3\2\2\2\u0166\u0163"+
- "\3\2\2\2\u0166\u0164\3\2\2\2\u0166\u0165\3\2\2\2\u0167Q\3\2\2\2\u0168"+
- "\u016a\5\64\33\2\u0169\u0168\3\2\2\2\u0169\u016a\3\2\2\2\u016a\u016b\3"+
- "\2\2\2\u016b\u016d\7\32\2\2\u016c\u016e\5D#\2\u016d\u016c\3\2\2\2\u016d"+
- "\u016e\3\2\2\2\u016e\u016f\3\2\2\2\u016f\u0171\7\4\2\2\u0170\u0172\5T"+
- "+\2\u0171\u0170\3\2\2\2\u0172\u0173\3\2\2\2\u0173\u0171\3\2\2\2\u0173"+
- "\u0174\3\2\2\2\u0174\u0175\3\2\2\2\u0175\u0176\7\5\2\2\u0176S\3\2\2\2"+
- "\u0177\u0179\5\64\33\2\u0178\u0177\3\2\2\2\u0178\u0179\3\2\2\2\u0179\u017a"+
- "\3\2\2\2\u017a\u017b\5\f\7\2\u017b\u017c\7\7\2\2\u017c\u017d\5J&\2\u017d"+
- "U\3\2\2\2\u017e\u0185\5X-\2\u017f\u0185\5Z.\2\u0180\u0185\5f\64\2\u0181"+
- "\u0185\5h\65\2\u0182\u0185\5l\67\2\u0183\u0185\5p9\2\u0184\u017e\3\2\2"+
- "\2\u0184\u017f\3\2\2\2\u0184\u0180\3\2\2\2\u0184\u0181\3\2\2\2\u0184\u0182"+
- "\3\2\2\2\u0184\u0183\3\2\2\2\u0185W\3\2\2\2\u0186\u0188\5\64\33\2\u0187"+
- "\u0186\3\2\2\2\u0187\u0188\3\2\2\2\u0188\u0189\3\2\2\2\u0189\u018a\7\33"+
- "\2\2\u018a\u018c\5,\27\2\u018b\u018d\5D#\2\u018c\u018b\3\2\2\2\u018c\u018d"+
- "\3\2\2\2\u018dY\3\2\2\2\u018e\u0190\5\64\33\2\u018f\u018e\3\2\2\2\u018f"+
- "\u0190\3\2\2\2\u0190\u0191\3\2\2\2\u0191\u0192\7\34\2\2\u0192\u0194\5"+
- ",\27\2\u0193\u0195\5\\/\2\u0194\u0193\3\2\2\2\u0194\u0195\3\2\2\2\u0195"+
- "\u0197\3\2\2\2\u0196\u0198\5D#\2\u0197\u0196\3\2\2\2\u0197\u0198\3\2\2"+
- "\2\u0198\u019a\3\2\2\2\u0199\u019b\5^\60\2\u019a\u0199\3\2\2\2\u019a\u019b"+
- "\3\2\2\2\u019b[\3\2\2\2\u019c\u019d\b/\1\2\u019d\u019f\7\36\2\2\u019e"+
- "\u01a0\7\22\2\2\u019f\u019e\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0\u01a2\3"+
- "\2\2\2\u01a1\u01a3\5J&\2\u01a2\u01a1\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4"+
- "\u01a2\3\2\2\2\u01a4\u01a5\3\2\2\2\u01a5\u01ab\3\2\2\2\u01a6\u01a7\f\3"+
- "\2\2\u01a7\u01a8\7\22\2\2\u01a8\u01aa\5J&\2\u01a9\u01a6\3\2\2\2\u01aa"+
- "\u01ad\3\2\2\2\u01ab\u01a9\3\2\2\2\u01ab\u01ac\3\2\2\2\u01ac]\3\2\2\2"+
- "\u01ad\u01ab\3\2\2\2\u01ae\u01b0\7\4\2\2\u01af\u01b1\5`\61\2\u01b0\u01af"+
- "\3\2\2\2\u01b1\u01b2\3\2\2\2\u01b2\u01b0\3\2\2\2\u01b2\u01b3\3\2\2\2\u01b3"+
- "\u01b4\3\2\2\2\u01b4\u01b5\7\5\2\2\u01b5_\3\2\2\2\u01b6\u01b8\5\64\33"+
- "\2\u01b7\u01b6\3\2\2\2\u01b7\u01b8\3\2\2\2\u01b8\u01b9\3\2\2\2\u01b9\u01bb"+
- "\5,\27\2\u01ba\u01bc\5b\62\2\u01bb\u01ba\3\2\2\2\u01bb\u01bc\3\2\2\2\u01bc"+
- "\u01bd\3\2\2\2\u01bd\u01be\7\7\2\2\u01be\u01c0\5H%\2\u01bf\u01c1\5D#\2"+
- "\u01c0\u01bf\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1a\3\2\2\2\u01c2\u01c4\7"+
- "\b\2\2\u01c3\u01c5\5d\63\2\u01c4\u01c3\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6"+
- "\u01c4\3\2\2\2\u01c6\u01c7\3\2\2\2\u01c7\u01c8\3\2\2\2\u01c8\u01c9\7\t"+
- "\2\2\u01c9c\3\2\2\2\u01ca\u01cc\5\64\33\2\u01cb\u01ca\3\2\2\2\u01cb\u01cc"+
- "\3\2\2\2\u01cc\u01cd\3\2\2\2\u01cd\u01ce\5,\27\2\u01ce\u01cf\7\7\2\2\u01cf"+
- "\u01d1\5H%\2\u01d0\u01d2\5\24\13\2\u01d1\u01d0\3\2\2\2\u01d1\u01d2\3\2"+
- "\2\2\u01d2\u01d4\3\2\2\2\u01d3\u01d5\5D#\2\u01d4\u01d3\3\2\2\2\u01d4\u01d5"+
- "\3\2\2\2\u01d5e\3\2\2\2\u01d6\u01d8\5\64\33\2\u01d7\u01d6\3\2\2\2\u01d7"+
- "\u01d8\3\2\2\2\u01d8\u01d9\3\2\2\2\u01d9\u01da\7\35\2\2\u01da\u01dc\5"+
- ",\27\2\u01db\u01dd\5D#\2\u01dc\u01db\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd"+
- "\u01de\3\2\2\2\u01de\u01e0\7\4\2\2\u01df\u01e1\5`\61\2\u01e0\u01df\3\2"+
- "\2\2\u01e1\u01e2\3\2\2\2\u01e2\u01e0\3\2\2\2\u01e2\u01e3\3\2\2\2\u01e3"+
- "\u01e4\3\2\2\2\u01e4\u01e5\7\5\2\2\u01e5g\3\2\2\2\u01e6\u01e8\5\64\33"+
- "\2\u01e7\u01e6\3\2\2\2\u01e7\u01e8\3\2\2\2\u01e8\u01e9\3\2\2\2\u01e9\u01ea"+
- "\7 \2\2\u01ea\u01ec\5,\27\2\u01eb\u01ed\5D#\2\u01ec\u01eb\3\2\2\2\u01ec"+
- "\u01ed\3\2\2\2\u01ed\u01ee\3\2\2\2\u01ee\u01ef\7\13\2\2\u01ef\u01f0\5"+
- "j\66\2\u01f0i\3\2\2\2\u01f1\u01f2\b\66\1\2\u01f2\u01f3\5J&\2\u01f3\u01f9"+
- "\3\2\2\2\u01f4\u01f5\f\3\2\2\u01f5\u01f6\7\23\2\2\u01f6\u01f8\5J&\2\u01f7"+
- "\u01f4\3\2\2\2\u01f8\u01fb\3\2\2\2\u01f9\u01f7\3\2\2\2\u01f9\u01fa\3\2"+
- "\2\2\u01fak\3\2\2\2\u01fb\u01f9\3\2\2\2\u01fc\u01fe\5\64\33\2\u01fd\u01fc"+
- "\3\2\2\2\u01fd\u01fe\3\2\2\2\u01fe\u01ff\3\2\2\2\u01ff\u0200\7\37\2\2"+
- "\u0200\u0202\5,\27\2\u0201\u0203\5D#\2\u0202\u0201\3\2\2\2\u0202\u0203"+
- "\3\2\2\2\u0203\u0204\3\2\2\2\u0204\u0206\7\4\2\2\u0205\u0207\5n8\2\u0206"+
- "\u0205\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u0206\3\2\2\2\u0208\u0209\3\2"+
- "\2\2\u0209\u020a\3\2\2\2\u020a\u020b\7\5\2\2\u020bm\3\2\2\2\u020c\u020e"+
- "\5\64\33\2\u020d\u020c\3\2\2\2\u020d\u020e\3\2\2\2\u020e\u020f\3\2\2\2"+
- "\u020f\u0211\5\66\34\2\u0210\u0212\5D#\2\u0211\u0210\3\2\2\2\u0211\u0212"+
- "\3\2\2\2\u0212o\3\2\2\2\u0213\u0215\5\64\33\2\u0214\u0213\3\2\2\2\u0214"+
- "\u0215\3\2\2\2\u0215\u0216\3\2\2\2\u0216\u0217\7!\2\2\u0217\u0219\5,\27"+
- "\2\u0218\u021a\5D#\2\u0219\u0218\3\2\2\2\u0219\u021a\3\2\2\2\u021a\u021b"+
- "\3\2\2\2\u021b\u021d\7\4\2\2\u021c\u021e\5d\63\2\u021d\u021c\3\2\2\2\u021e"+
- "\u021f\3\2\2\2\u021f\u021d\3\2\2\2\u021f\u0220\3\2\2\2\u0220\u0221\3\2"+
- "\2\2\u0221\u0222\7\5\2\2\u0222q\3\2\2\2\u0223\u0224\7\"\2\2\u0224\u0225"+
- "\5Z.\2\u0225s\3\2\2\2\u0226\u0228\5\64\33\2\u0227\u0226\3\2\2\2\u0227"+
- "\u0228\3\2\2\2\u0228\u0229\3\2\2\2\u0229\u022a\7#\2\2\u022a\u022b\7\20"+
- "\2\2\u022b\u022d\5,\27\2\u022c\u022e\5b\62\2\u022d\u022c\3\2\2\2\u022d"+
- "\u022e\3\2\2\2\u022e\u022f\3\2\2\2\u022f\u0230\7\r\2\2\u0230\u0231\5x"+
- "=\2\u0231u\3\2\2\2\u0232\u0233\5,\27\2\u0233w\3\2\2\2\u0234\u0235\b=\1"+
- "\2\u0235\u0236\5v<\2\u0236\u023c\3\2\2\2\u0237\u0238\f\3\2\2\u0238\u0239"+
- "\7\23\2\2\u0239\u023b\5v<\2\u023a\u0237\3\2\2\2\u023b\u023e\3\2\2\2\u023c"+
- "\u023a\3\2\2\2\u023c\u023d\3\2\2\2\u023dy\3\2\2\2\u023e\u023c\3\2\2\2"+
- "H}\u0083\u0093\u0096\u0099\u009d\u00a5\u00ad\u00b9\u00c0\u00c3\u00c7\u00ca"+
- "\u00cd\u00d6\u00e1\u00e5\u00e8\u00f0\u0103\u010e\u011a\u0123\u012c\u0135"+
- "\u0145\u014a\u014f\u015d\u0160\u0166\u0169\u016d\u0173\u0178\u0184\u0187"+
- "\u018c\u018f\u0194\u0197\u019a\u019f\u01a4\u01ab\u01b2\u01b7\u01bb\u01c0"+
- "\u01c6\u01cb\u01d1\u01d4\u01d7\u01dc\u01e2\u01e7\u01ec\u01f9\u01fd\u0202"+
- "\u0208\u020d\u0211\u0214\u0219\u021f\u0227\u022d\u023c";
+ "\3\4\7\4\u008b\n\4\f\4\16\4\u008e\13\4\3\4\3\4\3\5\3\5\3\5\3\5\3\6\3\6"+
+ "\3\6\5\6\u0099\n\6\3\6\5\6\u009c\n\6\3\6\5\6\u009f\n\6\3\6\3\6\5\6\u00a3"+
+ "\n\6\3\7\3\7\3\b\3\b\6\b\u00a9\n\b\r\b\16\b\u00aa\3\b\3\b\3\t\3\t\3\t"+
+ "\3\t\5\t\u00b3\n\t\3\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f\6\f\u00bd\n\f\r"+
+ "\f\16\f\u00be\3\f\3\f\3\r\3\r\3\r\5\r\u00c6\n\r\3\16\5\16\u00c9\n\16\3"+
+ "\16\3\16\5\16\u00cd\n\16\3\16\5\16\u00d0\n\16\3\16\5\16\u00d3\n\16\3\17"+
+ "\3\17\3\17\3\20\3\20\6\20\u00da\n\20\r\20\16\20\u00db\3\20\3\20\3\21\3"+
+ "\21\3\21\3\21\3\22\3\22\3\22\5\22\u00e7\n\22\3\23\3\23\5\23\u00eb\n\23"+
+ "\3\23\5\23\u00ee\n\23\3\23\3\23\3\24\3\24\3\24\3\24\5\24\u00f6\n\24\3"+
+ "\24\3\24\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3"+
+ "\30\3\30\3\30\5\30\u0109\n\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31"+
+ "\3\31\5\31\u0114\n\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\7\35\u011e"+
+ "\n\35\f\35\16\35\u0121\13\35\3\35\3\35\3\36\3\36\7\36\u0127\n\36\f\36"+
+ "\16\36\u012a\13\36\3\36\3\36\3\37\3\37\7\37\u0130\n\37\f\37\16\37\u0133"+
+ "\13\37\3\37\3\37\3 \3 \7 \u0139\n \f \16 \u013c\13 \3 \3 \3!\3!\3!\3!"+
+ "\3\"\3\"\3\"\3\"\3#\6#\u0149\n#\r#\16#\u014a\3$\3$\3$\5$\u0150\n$\3%\3"+
+ "%\3%\5%\u0155\n%\3&\3&\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\5(\u0163\n(\3"+
+ ")\5)\u0166\n)\3)\3)\3)\3)\5)\u016c\n)\3*\5*\u016f\n*\3*\3*\5*\u0173\n"+
+ "*\3*\3*\6*\u0177\n*\r*\16*\u0178\3*\3*\3+\5+\u017e\n+\3+\3+\3+\3+\3,\3"+
+ ",\3,\3,\3,\3,\5,\u018a\n,\3-\5-\u018d\n-\3-\3-\3-\5-\u0192\n-\3.\5.\u0195"+
+ "\n.\3.\3.\3.\5.\u019a\n.\3.\5.\u019d\n.\3.\5.\u01a0\n.\3/\3/\3/\5/\u01a5"+
+ "\n/\3/\6/\u01a8\n/\r/\16/\u01a9\3/\3/\3/\7/\u01af\n/\f/\16/\u01b2\13/"+
+ "\3\60\3\60\6\60\u01b6\n\60\r\60\16\60\u01b7\3\60\3\60\3\61\5\61\u01bd"+
+ "\n\61\3\61\3\61\5\61\u01c1\n\61\3\61\3\61\3\61\5\61\u01c6\n\61\3\62\3"+
+ "\62\6\62\u01ca\n\62\r\62\16\62\u01cb\3\62\3\62\3\63\5\63\u01d1\n\63\3"+
+ "\63\3\63\3\63\3\63\5\63\u01d7\n\63\3\63\5\63\u01da\n\63\3\64\5\64\u01dd"+
+ "\n\64\3\64\3\64\3\64\5\64\u01e2\n\64\3\64\3\64\6\64\u01e6\n\64\r\64\16"+
+ "\64\u01e7\3\64\3\64\3\65\5\65\u01ed\n\65\3\65\3\65\3\65\5\65\u01f2\n\65"+
+ "\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\7\66\u01fd\n\66\f\66\16"+
+ "\66\u0200\13\66\3\67\5\67\u0203\n\67\3\67\3\67\3\67\5\67\u0208\n\67\3"+
+ "\67\3\67\6\67\u020c\n\67\r\67\16\67\u020d\3\67\3\67\38\58\u0213\n8\38"+
+ "\38\58\u0217\n8\39\59\u021a\n9\39\39\39\59\u021f\n9\39\39\69\u0223\n9"+
+ "\r9\169\u0224\39\39\3:\3:\3:\3;\5;\u022d\n;\3;\3;\3;\3;\5;\u0233\n;\3"+
+ ";\3;\3;\3<\3<\3=\3=\3=\3=\3=\3=\7=\u0240\n=\f=\16=\u0243\13=\3=\2\5\\"+
+ "jx>\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@B"+
+ "DFHJLNPRTVXZ\\^`bdfhjlnprtvx\2\5\3\2\27\31\3\2\26$\3\2,-\2\u0266\2{\3"+
+ "\2\2\2\4\u0083\3\2\2\2\6\u0085\3\2\2\2\b\u0091\3\2\2\2\n\u00a2\3\2\2\2"+
+ "\f\u00a4\3\2\2\2\16\u00a6\3\2\2\2\20\u00ae\3\2\2\2\22\u00b4\3\2\2\2\24"+
+ "\u00b7\3\2\2\2\26\u00ba\3\2\2\2\30\u00c5\3\2\2\2\32\u00c8\3\2\2\2\34\u00d4"+
+ "\3\2\2\2\36\u00d7\3\2\2\2 \u00df\3\2\2\2\"\u00e3\3\2\2\2$\u00e8\3\2\2"+
+ "\2&\u00f1\3\2\2\2(\u00f9\3\2\2\2*\u00fb\3\2\2\2,\u00fe\3\2\2\2.\u0108"+
+ "\3\2\2\2\60\u0113\3\2\2\2\62\u0115\3\2\2\2\64\u0117\3\2\2\2\66\u0119\3"+
+ "\2\2\28\u011b\3\2\2\2:\u0124\3\2\2\2<\u012d\3\2\2\2>\u0136\3\2\2\2@\u013f"+
+ "\3\2\2\2B\u0143\3\2\2\2D\u0148\3\2\2\2F\u014c\3\2\2\2H\u0154\3\2\2\2J"+
+ "\u0156\3\2\2\2L\u0158\3\2\2\2N\u0162\3\2\2\2P\u016b\3\2\2\2R\u016e\3\2"+
+ "\2\2T\u017d\3\2\2\2V\u0189\3\2\2\2X\u018c\3\2\2\2Z\u0194\3\2\2\2\\\u01a1"+
+ "\3\2\2\2^\u01b3\3\2\2\2`\u01bc\3\2\2\2b\u01c7\3\2\2\2d\u01d0\3\2\2\2f"+
+ "\u01dc\3\2\2\2h\u01ec\3\2\2\2j\u01f6\3\2\2\2l\u0202\3\2\2\2n\u0212\3\2"+
+ "\2\2p\u0219\3\2\2\2r\u0228\3\2\2\2t\u022c\3\2\2\2v\u0237\3\2\2\2x\u0239"+
+ "\3\2\2\2z|\5\4\3\2{z\3\2\2\2|}\3\2\2\2}{\3\2\2\2}~\3\2\2\2~\3\3\2\2\2"+
+ "\177\u0084\5\n\6\2\u0080\u0084\5&\24\2\u0081\u0084\5P)\2\u0082\u0084\5"+
+ "\6\4\2\u0083\177\3\2\2\2\u0083\u0080\3\2\2\2\u0083\u0081\3\2\2\2\u0083"+
+ "\u0082\3\2\2\2\u0084\5\3\2\2\2\u0085\u0086\7\3\2\2\u0086\u0087\5,\27\2"+
+ "\u0087\u0088\7\4\2\2\u0088\u008c\5\b\5\2\u0089\u008b\5P)\2\u008a\u0089"+
+ "\3\2\2\2\u008b\u008e\3\2\2\2\u008c\u008a\3\2\2\2\u008c\u008d\3\2\2\2\u008d"+
+ "\u008f\3\2\2\2\u008e\u008c\3\2\2\2\u008f\u0090\7\5\2\2\u0090\7\3\2\2\2"+
+ "\u0091\u0092\7\6\2\2\u0092\u0093\7\7\2\2\u0093\u0094\5\62\32\2\u0094\t"+
+ "\3\2\2\2\u0095\u00a3\5\26\f\2\u0096\u0098\5\f\7\2\u0097\u0099\5,\27\2"+
+ "\u0098\u0097\3\2\2\2\u0098\u0099\3\2\2\2\u0099\u009b\3\2\2\2\u009a\u009c"+
+ "\5\16\b\2\u009b\u009a\3\2\2\2\u009b\u009c\3\2\2\2\u009c\u009e\3\2\2\2"+
+ "\u009d\u009f\5D#\2\u009e\u009d\3\2\2\2\u009e\u009f\3\2\2\2\u009f\u00a0"+
+ "\3\2\2\2\u00a0\u00a1\5\26\f\2\u00a1\u00a3\3\2\2\2\u00a2\u0095\3\2\2\2"+
+ "\u00a2\u0096\3\2\2\2\u00a3\13\3\2\2\2\u00a4\u00a5\t\2\2\2\u00a5\r\3\2"+
+ "\2\2\u00a6\u00a8\7\b\2\2\u00a7\u00a9\5\20\t\2\u00a8\u00a7\3\2\2\2\u00a9"+
+ "\u00aa\3\2\2\2\u00aa\u00a8\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2"+
+ "\2\2\u00ac\u00ad\7\t\2\2\u00ad\17\3\2\2\2\u00ae\u00af\5\22\n\2\u00af\u00b0"+
+ "\7\7\2\2\u00b0\u00b2\5H%\2\u00b1\u00b3\5\24\13\2\u00b2\u00b1\3\2\2\2\u00b2"+
+ "\u00b3\3\2\2\2\u00b3\21\3\2\2\2\u00b4\u00b5\7\n\2\2\u00b5\u00b6\5,\27"+
+ "\2\u00b6\23\3\2\2\2\u00b7\u00b8\7\13\2\2\u00b8\u00b9\5.\30\2\u00b9\25"+
+ "\3\2\2\2\u00ba\u00bc\7\4\2\2\u00bb\u00bd\5\30\r\2\u00bc\u00bb\3\2\2\2"+
+ "\u00bd\u00be\3\2\2\2\u00be\u00bc\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\u00c0"+
+ "\3\2\2\2\u00c0\u00c1\7\5\2\2\u00c1\27\3\2\2\2\u00c2\u00c6\5\32\16\2\u00c3"+
+ "\u00c6\5\"\22\2\u00c4\u00c6\5$\23\2\u00c5\u00c2\3\2\2\2\u00c5\u00c3\3"+
+ "\2\2\2\u00c5\u00c4\3\2\2\2\u00c6\31\3\2\2\2\u00c7\u00c9\5\34\17\2\u00c8"+
+ "\u00c7\3\2\2\2\u00c8\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cc\5,"+
+ "\27\2\u00cb\u00cd\5\36\20\2\u00cc\u00cb\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd"+
+ "\u00cf\3\2\2\2\u00ce\u00d0\5D#\2\u00cf\u00ce\3\2\2\2\u00cf\u00d0\3\2\2"+
+ "\2\u00d0\u00d2\3\2\2\2\u00d1\u00d3\5\26\f\2\u00d2\u00d1\3\2\2\2\u00d2"+
+ "\u00d3\3\2\2\2\u00d3\33\3\2\2\2\u00d4\u00d5\5,\27\2\u00d5\u00d6\7\7\2"+
+ "\2\u00d6\35\3\2\2\2\u00d7\u00d9\7\b\2\2\u00d8\u00da\5 \21\2\u00d9\u00d8"+
+ "\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc"+
+ "\u00dd\3\2\2\2\u00dd\u00de\7\t\2\2\u00de\37\3\2\2\2\u00df\u00e0\5,\27"+
+ "\2\u00e0\u00e1\7\7\2\2\u00e1\u00e2\5\60\31\2\u00e2!\3\2\2\2\u00e3\u00e4"+
+ "\7\f\2\2\u00e4\u00e6\5(\25\2\u00e5\u00e7\5D#\2\u00e6\u00e5\3\2\2\2\u00e6"+
+ "\u00e7\3\2\2\2\u00e7#\3\2\2\2\u00e8\u00ea\7\f\2\2\u00e9\u00eb\5*\26\2"+
+ "\u00ea\u00e9\3\2\2\2\u00ea\u00eb\3\2\2\2\u00eb\u00ed\3\2\2\2\u00ec\u00ee"+
+ "\5D#\2\u00ed\u00ec\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef"+
+ "\u00f0\5\26\f\2\u00f0%\3\2\2\2\u00f1\u00f2\7\26\2\2\u00f2\u00f3\5(\25"+
+ "\2\u00f3\u00f5\5*\26\2\u00f4\u00f6\5D#\2\u00f5\u00f4\3\2\2\2\u00f5\u00f6"+
+ "\3\2\2\2\u00f6\u00f7\3\2\2\2\u00f7\u00f8\5\26\f\2\u00f8\'\3\2\2\2\u00f9"+
+ "\u00fa\5,\27\2\u00fa)\3\2\2\2\u00fb\u00fc\7\r\2\2\u00fc\u00fd\5J&\2\u00fd"+
+ "+\3\2\2\2\u00fe\u00ff\t\3\2\2\u00ff-\3\2\2\2\u0100\u0109\5\62\32\2\u0101"+
+ "\u0109\7%\2\2\u0102\u0109\7&\2\2\u0103\u0109\7\24\2\2\u0104\u0109\7\25"+
+ "\2\2\u0105\u0109\5\66\34\2\u0106\u0109\58\35\2\u0107\u0109\5<\37\2\u0108"+
+ "\u0100\3\2\2\2\u0108\u0101\3\2\2\2\u0108\u0102\3\2\2\2\u0108\u0103\3\2"+
+ "\2\2\u0108\u0104\3\2\2\2\u0108\u0105\3\2\2\2\u0108\u0106\3\2\2\2\u0108"+
+ "\u0107\3\2\2\2\u0109/\3\2\2\2\u010a\u0114\5\22\n\2\u010b\u0114\5\62\32"+
+ "\2\u010c\u0114\7%\2\2\u010d\u0114\7&\2\2\u010e\u0114\7\24\2\2\u010f\u0114"+
+ "\7\25\2\2\u0110\u0114\5\66\34\2\u0111\u0114\5:\36\2\u0112\u0114\5> \2"+
+ "\u0113\u010a\3\2\2\2\u0113\u010b\3\2\2\2\u0113\u010c\3\2\2\2\u0113\u010d"+
+ "\3\2\2\2\u0113\u010e\3\2\2\2\u0113\u010f\3\2\2\2\u0113\u0110\3\2\2\2\u0113"+
+ "\u0111\3\2\2\2\u0113\u0112\3\2\2\2\u0114\61\3\2\2\2\u0115\u0116\t\4\2"+
+ "\2\u0116\63\3\2\2\2\u0117\u0118\5\62\32\2\u0118\65\3\2\2\2\u0119\u011a"+
+ "\5,\27\2\u011a\67\3\2\2\2\u011b\u011f\7\16\2\2\u011c\u011e\5.\30\2\u011d"+
+ "\u011c\3\2\2\2\u011e\u0121\3\2\2\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2"+
+ "\2\2\u0120\u0122\3\2\2\2\u0121\u011f\3\2\2\2\u0122\u0123\7\17\2\2\u0123"+
+ "9\3\2\2\2\u0124\u0128\7\16\2\2\u0125\u0127\5\60\31\2\u0126\u0125\3\2\2"+
+ "\2\u0127\u012a\3\2\2\2\u0128\u0126\3\2\2\2\u0128\u0129\3\2\2\2\u0129\u012b"+
+ "\3\2\2\2\u012a\u0128\3\2\2\2\u012b\u012c\7\17\2\2\u012c;\3\2\2\2\u012d"+
+ "\u0131\7\4\2\2\u012e\u0130\5@!\2\u012f\u012e\3\2\2\2\u0130\u0133\3\2\2"+
+ "\2\u0131\u012f\3\2\2\2\u0131\u0132\3\2\2\2\u0132\u0134\3\2\2\2\u0133\u0131"+
+ "\3\2\2\2\u0134\u0135\7\5\2\2\u0135=\3\2\2\2\u0136\u013a\7\4\2\2\u0137"+
+ "\u0139\5B\"\2\u0138\u0137\3\2\2\2\u0139\u013c\3\2\2\2\u013a\u0138\3\2"+
+ "\2\2\u013a\u013b\3\2\2\2\u013b\u013d\3\2\2\2\u013c\u013a\3\2\2\2\u013d"+
+ "\u013e\7\5\2\2\u013e?\3\2\2\2\u013f\u0140\5,\27\2\u0140\u0141\7\7\2\2"+
+ "\u0141\u0142\5.\30\2\u0142A\3\2\2\2\u0143\u0144\5,\27\2\u0144\u0145\7"+
+ "\7\2\2\u0145\u0146\5\60\31\2\u0146C\3\2\2\2\u0147\u0149\5F$\2\u0148\u0147"+
+ "\3\2\2\2\u0149\u014a\3\2\2\2\u014a\u0148\3\2\2\2\u014a\u014b\3\2\2\2\u014b"+
+ "E\3\2\2\2\u014c\u014d\7\20\2\2\u014d\u014f\5,\27\2\u014e\u0150\5\36\20"+
+ "\2\u014f\u014e\3\2\2\2\u014f\u0150\3\2\2\2\u0150G\3\2\2\2\u0151\u0155"+
+ "\5J&\2\u0152\u0155\5L\'\2\u0153\u0155\5N(\2\u0154\u0151\3\2\2\2\u0154"+
+ "\u0152\3\2\2\2\u0154\u0153\3\2\2\2\u0155I\3\2\2\2\u0156\u0157\5,\27\2"+
+ "\u0157K\3\2\2\2\u0158\u0159\7\16\2\2\u0159\u015a\5H%\2\u015a\u015b\7\17"+
+ "\2\2\u015bM\3\2\2\2\u015c\u015d\5J&\2\u015d\u015e\7\21\2\2\u015e\u0163"+
+ "\3\2\2\2\u015f\u0160\5L\'\2\u0160\u0161\7\21\2\2\u0161\u0163\3\2\2\2\u0162"+
+ "\u015c\3\2\2\2\u0162\u015f\3\2\2\2\u0163O\3\2\2\2\u0164\u0166\5\64\33"+
+ "\2\u0165\u0164\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u0167\3\2\2\2\u0167\u016c"+
+ "\5R*\2\u0168\u016c\5V,\2\u0169\u016c\5r:\2\u016a\u016c\5t;\2\u016b\u0165"+
+ "\3\2\2\2\u016b\u0168\3\2\2\2\u016b\u0169\3\2\2\2\u016b\u016a\3\2\2\2\u016c"+
+ "Q\3\2\2\2\u016d\u016f\5\64\33\2\u016e\u016d\3\2\2\2\u016e\u016f\3\2\2"+
+ "\2\u016f\u0170\3\2\2\2\u0170\u0172\7\32\2\2\u0171\u0173\5D#\2\u0172\u0171"+
+ "\3\2\2\2\u0172\u0173\3\2\2\2\u0173\u0174\3\2\2\2\u0174\u0176\7\4\2\2\u0175"+
+ "\u0177\5T+\2\u0176\u0175\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u0176\3\2\2"+
+ "\2\u0178\u0179\3\2\2\2\u0179\u017a\3\2\2\2\u017a\u017b\7\5\2\2\u017bS"+
+ "\3\2\2\2\u017c\u017e\5\64\33\2\u017d\u017c\3\2\2\2\u017d\u017e\3\2\2\2"+
+ "\u017e\u017f\3\2\2\2\u017f\u0180\5\f\7\2\u0180\u0181\7\7\2\2\u0181\u0182"+
+ "\5J&\2\u0182U\3\2\2\2\u0183\u018a\5X-\2\u0184\u018a\5Z.\2\u0185\u018a"+
+ "\5f\64\2\u0186\u018a\5h\65\2\u0187\u018a\5l\67\2\u0188\u018a\5p9\2\u0189"+
+ "\u0183\3\2\2\2\u0189\u0184\3\2\2\2\u0189\u0185\3\2\2\2\u0189\u0186\3\2"+
+ "\2\2\u0189\u0187\3\2\2\2\u0189\u0188\3\2\2\2\u018aW\3\2\2\2\u018b\u018d"+
+ "\5\64\33\2\u018c\u018b\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018e\3\2\2\2"+
+ "\u018e\u018f\7\33\2\2\u018f\u0191\5,\27\2\u0190\u0192\5D#\2\u0191\u0190"+
+ "\3\2\2\2\u0191\u0192\3\2\2\2\u0192Y\3\2\2\2\u0193\u0195\5\64\33\2\u0194"+
+ "\u0193\3\2\2\2\u0194\u0195\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u0197\7\34"+
+ "\2\2\u0197\u0199\5,\27\2\u0198\u019a\5\\/\2\u0199\u0198\3\2\2\2\u0199"+
+ "\u019a\3\2\2\2\u019a\u019c\3\2\2\2\u019b\u019d\5D#\2\u019c\u019b\3\2\2"+
+ "\2\u019c\u019d\3\2\2\2\u019d\u019f\3\2\2\2\u019e\u01a0\5^\60\2\u019f\u019e"+
+ "\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0[\3\2\2\2\u01a1\u01a2\b/\1\2\u01a2\u01a4"+
+ "\7\36\2\2\u01a3\u01a5\7\22\2\2\u01a4\u01a3\3\2\2\2\u01a4\u01a5\3\2\2\2"+
+ "\u01a5\u01a7\3\2\2\2\u01a6\u01a8\5J&\2\u01a7\u01a6\3\2\2\2\u01a8\u01a9"+
+ "\3\2\2\2\u01a9\u01a7\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01b0\3\2\2\2\u01ab"+
+ "\u01ac\f\3\2\2\u01ac\u01ad\7\22\2\2\u01ad\u01af\5J&\2\u01ae\u01ab\3\2"+
+ "\2\2\u01af\u01b2\3\2\2\2\u01b0\u01ae\3\2\2\2\u01b0\u01b1\3\2\2\2\u01b1"+
+ "]\3\2\2\2\u01b2\u01b0\3\2\2\2\u01b3\u01b5\7\4\2\2\u01b4\u01b6\5`\61\2"+
+ "\u01b5\u01b4\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b7\u01b8"+
+ "\3\2\2\2\u01b8\u01b9\3\2\2\2\u01b9\u01ba\7\5\2\2\u01ba_\3\2\2\2\u01bb"+
+ "\u01bd\5\64\33\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01be\3"+
+ "\2\2\2\u01be\u01c0\5,\27\2\u01bf\u01c1\5b\62\2\u01c0\u01bf\3\2\2\2\u01c0"+
+ "\u01c1\3\2\2\2\u01c1\u01c2\3\2\2\2\u01c2\u01c3\7\7\2\2\u01c3\u01c5\5H"+
+ "%\2\u01c4\u01c6\5D#\2\u01c5\u01c4\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6a\3"+
+ "\2\2\2\u01c7\u01c9\7\b\2\2\u01c8\u01ca\5d\63\2\u01c9\u01c8\3\2\2\2\u01ca"+
+ "\u01cb\3\2\2\2\u01cb\u01c9\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc\u01cd\3\2"+
+ "\2\2\u01cd\u01ce\7\t\2\2\u01cec\3\2\2\2\u01cf\u01d1\5\64\33\2\u01d0\u01cf"+
+ "\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1\u01d2\3\2\2\2\u01d2\u01d3\5,\27\2\u01d3"+
+ "\u01d4\7\7\2\2\u01d4\u01d6\5H%\2\u01d5\u01d7\5\24\13\2\u01d6\u01d5\3\2"+
+ "\2\2\u01d6\u01d7\3\2\2\2\u01d7\u01d9\3\2\2\2\u01d8\u01da\5D#\2\u01d9\u01d8"+
+ "\3\2\2\2\u01d9\u01da\3\2\2\2\u01dae\3\2\2\2\u01db\u01dd\5\64\33\2\u01dc"+
+ "\u01db\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd\u01de\3\2\2\2\u01de\u01df\7\35"+
+ "\2\2\u01df\u01e1\5,\27\2\u01e0\u01e2\5D#\2\u01e1\u01e0\3\2\2\2\u01e1\u01e2"+
+ "\3\2\2\2\u01e2\u01e3\3\2\2\2\u01e3\u01e5\7\4\2\2\u01e4\u01e6\5`\61\2\u01e5"+
+ "\u01e4\3\2\2\2\u01e6\u01e7\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e7\u01e8\3\2"+
+ "\2\2\u01e8\u01e9\3\2\2\2\u01e9\u01ea\7\5\2\2\u01eag\3\2\2\2\u01eb\u01ed"+
+ "\5\64\33\2\u01ec\u01eb\3\2\2\2\u01ec\u01ed\3\2\2\2\u01ed\u01ee\3\2\2\2"+
+ "\u01ee\u01ef\7 \2\2\u01ef\u01f1\5,\27\2\u01f0\u01f2\5D#\2\u01f1\u01f0"+
+ "\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2\u01f3\3\2\2\2\u01f3\u01f4\7\13\2\2"+
+ "\u01f4\u01f5\5j\66\2\u01f5i\3\2\2\2\u01f6\u01f7\b\66\1\2\u01f7\u01f8\5"+
+ "J&\2\u01f8\u01fe\3\2\2\2\u01f9\u01fa\f\3\2\2\u01fa\u01fb\7\23\2\2\u01fb"+
+ "\u01fd\5J&\2\u01fc\u01f9\3\2\2\2\u01fd\u0200\3\2\2\2\u01fe\u01fc\3\2\2"+
+ "\2\u01fe\u01ff\3\2\2\2\u01ffk\3\2\2\2\u0200\u01fe\3\2\2\2\u0201\u0203"+
+ "\5\64\33\2\u0202\u0201\3\2\2\2\u0202\u0203\3\2\2\2\u0203\u0204\3\2\2\2"+
+ "\u0204\u0205\7\37\2\2\u0205\u0207\5,\27\2\u0206\u0208\5D#\2\u0207\u0206"+
+ "\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u0209\3\2\2\2\u0209\u020b\7\4\2\2\u020a"+
+ "\u020c\5n8\2\u020b\u020a\3\2\2\2\u020c\u020d\3\2\2\2\u020d\u020b\3\2\2"+
+ "\2\u020d\u020e\3\2\2\2\u020e\u020f\3\2\2\2\u020f\u0210\7\5\2\2\u0210m"+
+ "\3\2\2\2\u0211\u0213\5\64\33\2\u0212\u0211\3\2\2\2\u0212\u0213\3\2\2\2"+
+ "\u0213\u0214\3\2\2\2\u0214\u0216\5\66\34\2\u0215\u0217\5D#\2\u0216\u0215"+
+ "\3\2\2\2\u0216\u0217\3\2\2\2\u0217o\3\2\2\2\u0218\u021a\5\64\33\2\u0219"+
+ "\u0218\3\2\2\2\u0219\u021a\3\2\2\2\u021a\u021b\3\2\2\2\u021b\u021c\7!"+
+ "\2\2\u021c\u021e\5,\27\2\u021d\u021f\5D#\2\u021e\u021d\3\2\2\2\u021e\u021f"+
+ "\3\2\2\2\u021f\u0220\3\2\2\2\u0220\u0222\7\4\2\2\u0221\u0223\5d\63\2\u0222"+
+ "\u0221\3\2\2\2\u0223\u0224\3\2\2\2\u0224\u0222\3\2\2\2\u0224\u0225\3\2"+
+ "\2\2\u0225\u0226\3\2\2\2\u0226\u0227\7\5\2\2\u0227q\3\2\2\2\u0228\u0229"+
+ "\7\"\2\2\u0229\u022a\5Z.\2\u022as\3\2\2\2\u022b\u022d\5\64\33\2\u022c"+
+ "\u022b\3\2\2\2\u022c\u022d\3\2\2\2\u022d\u022e\3\2\2\2\u022e\u022f\7#"+
+ "\2\2\u022f\u0230\7\20\2\2\u0230\u0232\5,\27\2\u0231\u0233\5b\62\2\u0232"+
+ "\u0231\3\2\2\2\u0232\u0233\3\2\2\2\u0233\u0234\3\2\2\2\u0234\u0235\7\r"+
+ "\2\2\u0235\u0236\5x=\2\u0236u\3\2\2\2\u0237\u0238\5,\27\2\u0238w\3\2\2"+
+ "\2\u0239\u023a\b=\1\2\u023a\u023b\5v<\2\u023b\u0241\3\2\2\2\u023c\u023d"+
+ "\f\3\2\2\u023d\u023e\7\23\2\2\u023e\u0240\5v<\2\u023f\u023c\3\2\2\2\u0240"+
+ "\u0243\3\2\2\2\u0241\u023f\3\2\2\2\u0241\u0242\3\2\2\2\u0242y\3\2\2\2"+
+ "\u0243\u0241\3\2\2\2I}\u0083\u008c\u0098\u009b\u009e\u00a2\u00aa\u00b2"+
+ "\u00be\u00c5\u00c8\u00cc\u00cf\u00d2\u00db\u00e6\u00ea\u00ed\u00f5\u0108"+
+ "\u0113\u011f\u0128\u0131\u013a\u014a\u014f\u0154\u0162\u0165\u016b\u016e"+
+ "\u0172\u0178\u017d\u0189\u018c\u0191\u0194\u0199\u019c\u019f\u01a4\u01a9"+
+ "\u01b0\u01b7\u01bc\u01c0\u01c5\u01cb\u01d0\u01d6\u01d9\u01dc\u01e1\u01e7"+
+ "\u01ec\u01f1\u01fe\u0202\u0207\u020d\u0212\u0216\u0219\u021e\u0224\u022c"+
+ "\u0232\u0241";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/gen/GraphqlVisitor.java b/src/main/gen/GraphqlVisitor.java
index 8674231d21..8c34ec506d 100644
--- a/src/main/gen/GraphqlVisitor.java
+++ b/src/main/gen/GraphqlVisitor.java
@@ -36,12 +36,6 @@ public interface GraphqlVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitServiceUrl(GraphqlParser.ServiceUrlContext ctx);
- /**
- * Visit a parse tree produced by {@link GraphqlParser#url}.
- * @param ctx the parse tree
- * @return the visitor result
- */
- T visitUrl(GraphqlParser.UrlContext ctx);
/**
* Visit a parse tree produced by {@link GraphqlParser#operationDefinition}.
* @param ctx the parse tree
diff --git a/src/test/groovy/graphql/parser/ParserTest.groovy b/src/test/groovy/graphql/parser/ParserTest.groovy
index 584b8e2b9f..8b0498d94b 100644
--- a/src/test/groovy/graphql/parser/ParserTest.groovy
+++ b/src/test/groovy/graphql/parser/ParserTest.groovy
@@ -45,7 +45,13 @@ class ParserTest extends Specification {
url: "asd"
type Post {
id: ID!
+ title: String
}
+
+ extend type User {
+ id: ID!
+ posts: [Post]
+ }
}
service UserSvc {
From 4f0756bacd5e561ad2f199961f388ef0e27ba449 Mon Sep 17 00:00:00 2001
From: Diogo Lucas
Date: Fri, 9 Feb 2018 10:20:29 +1100
Subject: [PATCH 12/19] fixes merge error
---
src/main/java/graphql/language/ServiceDefinition.java | 5 -----
1 file changed, 5 deletions(-)
diff --git a/src/main/java/graphql/language/ServiceDefinition.java b/src/main/java/graphql/language/ServiceDefinition.java
index b134ab2b95..d4c7c8feb3 100644
--- a/src/main/java/graphql/language/ServiceDefinition.java
+++ b/src/main/java/graphql/language/ServiceDefinition.java
@@ -45,11 +45,6 @@ public String getName() {
return name;
}
- @Override
- public List getDirectives() {
- return null;
- }
-
public String getUrl() {
return url;
}
From c5696bbb2f2147c98b0ff3faa9ff769f5552cc26 Mon Sep 17 00:00:00 2001
From: Andreas Marek
Date: Fri, 9 Feb 2018 11:12:26 +1100
Subject: [PATCH 13/19] successfully linked two services
---
.../java/graphql/StitchingDSLExample.java | 2 +-
.../graphql/schema/HttpRemoteRetriever.java | 1 -
.../schema/RemoteRootQueryDataFetcher.java | 43 +++++++++++++++++--
.../schema/TransformationDataFetcher.java | 15 +++----
4 files changed, 46 insertions(+), 15 deletions(-)
diff --git a/src/main/java/graphql/StitchingDSLExample.java b/src/main/java/graphql/StitchingDSLExample.java
index d36cb9ec61..eb54305463 100644
--- a/src/main/java/graphql/StitchingDSLExample.java
+++ b/src/main/java/graphql/StitchingDSLExample.java
@@ -221,7 +221,7 @@ public static void main(String[] args) throws IOException {
GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
//
- ExecutionResult executionResult1 = build.execute("{posts{id, authorId}}");
+ ExecutionResult executionResult1 = build.execute("{posts{id, author {id name}}}");
System.out.println(executionResult1.getData().toString());
diff --git a/src/main/java/graphql/schema/HttpRemoteRetriever.java b/src/main/java/graphql/schema/HttpRemoteRetriever.java
index 2c0019898e..06a9c81519 100644
--- a/src/main/java/graphql/schema/HttpRemoteRetriever.java
+++ b/src/main/java/graphql/schema/HttpRemoteRetriever.java
@@ -46,7 +46,6 @@ public CompletableFuture> query(OperationDefinition query) {
Map body = new LinkedHashMap<>();
String queryString = AstPrinter.printAst(query);
body.put("query", queryString);
- System.out.println("query: " + queryString);
mapper.writeValue(out, body);
} catch (IOException e) {
throw new RuntimeException(e);
diff --git a/src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java b/src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java
index 8d79f7d8d9..b9ab0b01f6 100644
--- a/src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java
+++ b/src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java
@@ -2,16 +2,24 @@
import graphql.PublicApi;
+import graphql.analysis.QueryTraversal;
+import graphql.language.AstPrinter;
+import graphql.language.Document;
import graphql.language.Field;
+import graphql.language.FieldDefinition;
+import graphql.language.FieldTransformation;
import graphql.language.OperationDefinition;
import graphql.language.SelectionSet;
import graphql.language.ServiceDefinition;
import java.net.MalformedURLException;
import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
import java.util.LinkedHashMap;
+import java.util.List;
import java.util.Map;
-import java.util.concurrent.ExecutionException;
+import java.util.stream.Collectors;
@PublicApi
public class RemoteRootQueryDataFetcher implements DataFetcher {
@@ -30,10 +38,9 @@ public RemoteRootQueryDataFetcher(ServiceDefinition serviceDefinition) {
@Override
public Object get(DataFetchingEnvironment environment) {
- OperationDefinition query = new OperationDefinition();
- query.setOperation(OperationDefinition.Operation.QUERY);
- query.setSelectionSet(new SelectionSet(environment.getFields()));
Field field = environment.getFields().get(0);
+ OperationDefinition query = createQuery(environment);
+ String tmp = AstPrinter.printAst(query);
try {
Map result = remoteRetriever.query(query).get();
Map data = (Map) result.get("data");
@@ -43,5 +50,33 @@ public Object get(DataFetchingEnvironment environment) {
}
}
+ private OperationDefinition createQuery(DataFetchingEnvironment environment) {
+ OperationDefinition query = new OperationDefinition();
+ query.setOperation(OperationDefinition.Operation.QUERY);
+ List copiedFields = environment.getFields().stream().map(Field::deepCopy).collect(Collectors.toList());
+ query.setSelectionSet(new SelectionSet(copiedFields));
+ Document document = new Document();
+ document.getDefinitions().add(query);
+
+ QueryTraversal queryTraversal = new QueryTraversal(environment.getGraphQLSchema(), document,null , environment.getArguments());
+ Map fieldsToBeReplaced = new LinkedHashMap<>();
+
+ queryTraversal.visitPreOrder(queryVisitorEnvironment -> {
+ FieldDefinition definition = queryVisitorEnvironment.getFieldDefinition().getDefinition();
+ FieldTransformation fieldTransformation = definition.getFieldTransformation();
+ if (fieldTransformation != null) {
+ fieldsToBeReplaced.put(queryVisitorEnvironment.getField(), definition);
+ }
+ });
+
+ for(Map.Entry toReplace: fieldsToBeReplaced.entrySet()) {
+ Field field = toReplace.getKey();
+ FieldDefinition fieldDefinition = toReplace.getValue();
+ field.setName(fieldDefinition.getName());
+ field.setSelectionSet(null);
+ }
+
+ return query;
+ }
}
diff --git a/src/main/java/graphql/schema/TransformationDataFetcher.java b/src/main/java/graphql/schema/TransformationDataFetcher.java
index 65d01a848e..69e5a5c229 100644
--- a/src/main/java/graphql/schema/TransformationDataFetcher.java
+++ b/src/main/java/graphql/schema/TransformationDataFetcher.java
@@ -1,19 +1,16 @@
package graphql.schema;
-import graphql.Assert;
import graphql.PublicApi;
import graphql.language.Argument;
import graphql.language.AstPrinter;
import graphql.language.Field;
-import graphql.language.FieldDefinition;
import graphql.language.FieldTransformation;
import graphql.language.ObjectTypeDefinition;
import graphql.language.OperationDefinition;
import graphql.language.SelectionSet;
import graphql.language.ServiceDefinition;
import graphql.language.StringValue;
-import graphql.language.Type;
import graphql.language.TypeName;
import graphql.validation.ValidationUtil;
@@ -21,7 +18,6 @@
import java.net.URL;
import java.util.Arrays;
import java.util.Map;
-import java.util.concurrent.ExecutionException;
import static graphql.Assert.assertNotNull;
import static graphql.Assert.assertTrue;
@@ -43,7 +39,7 @@ public Object get(DataFetchingEnvironment environment) {
TypeName targetType = validationUtil.getUnmodifiedType(fieldTransformation.getTargetFieldDefinition().getType());
GraphQLType targetGraphQLType = environment.getGraphQLSchema().getType(targetType.getName());
- assertTrue(targetGraphQLType instanceof ObjectTypeDefinition, "target type must be an Object");
+ assertTrue(targetGraphQLType instanceof GraphQLObjectType, "target type must be an Object");
GraphQLObjectType targetObjectType = (GraphQLObjectType) targetGraphQLType;
@@ -55,7 +51,7 @@ public Object get(DataFetchingEnvironment environment) {
HttpRemoteRetriever remoteRetriever = new HttpRemoteRetriever(getRemoteUrl(targetService));
- PropertyDataFetcher propertyDataFetcher = new PropertyDataFetcher(environment.getFieldDefinition().getName());
+ PropertyDataFetcher propertyDataFetcher = new PropertyDataFetcher(environment.getFieldDefinition().getDefinition().getName());
Object id = propertyDataFetcher.get(environment);
assertNotNull(id, "id is null");
@@ -63,18 +59,19 @@ public Object get(DataFetchingEnvironment environment) {
// Convention: name of Type to lowercase is a valid query by Id
Field getTypeByIdField = new Field(targetObjectType.getName().toLowerCase());
getTypeByIdField.getArguments().add(new Argument("id", new StringValue(id.toString())));
- getTypeByIdField.setSelectionSet(new SelectionSet(environment.getFields()));
+ Field field = environment.getFields().get(0);
+ getTypeByIdField.setSelectionSet(field.getSelectionSet());
OperationDefinition query = new OperationDefinition();
query.setOperation(OperationDefinition.Operation.QUERY);
query.setSelectionSet(new SelectionSet(Arrays.asList(getTypeByIdField)));
- System.out.println("query:" + AstPrinter.printAst(query));
Map result = null;
try {
result = (Map) remoteRetriever.query(query).get();
- return result;
+ Map data = (Map) result.get("data");
+ return data.get(getTypeByIdField.getName());
} catch (Exception e) {
throw new RuntimeException(e);
}
From ea679afd5f870b48c1c63f6d396f5d88f2a0fce0 Mon Sep 17 00:00:00 2001
From: Diogo Lucas
Date: Fri, 9 Feb 2018 11:37:51 +1100
Subject: [PATCH 14/19] service definition now pushed into fields (when
available)
---
src/main/antlr/Graphql.g4 | 6 +-
src/main/antlr/dsl-alternatives.md | 237 ++++
src/main/gen/Graphql.tokens | 92 +-
src/main/gen/GraphqlBaseListener.java | 24 +
src/main/gen/GraphqlBaseVisitor.java | 14 +
src/main/gen/GraphqlLexer.java | 309 ++--
src/main/gen/GraphqlLexer.tokens | 92 +-
src/main/gen/GraphqlListener.java | 20 +
src/main/gen/GraphqlParser.java | 1255 +++++++++--------
src/main/gen/GraphqlVisitor.java | 12 +
.../parser/GraphqlAntlrToLanguage.java | 8 +
.../groovy/graphql/parser/ParserTest.groovy | 21 +-
12 files changed, 1274 insertions(+), 816 deletions(-)
create mode 100644 src/main/antlr/dsl-alternatives.md
diff --git a/src/main/antlr/Graphql.g4 b/src/main/antlr/Graphql.g4
index 8ec2fb511c..9a68507ae5 100644
--- a/src/main/antlr/Graphql.g4
+++ b/src/main/antlr/Graphql.g4
@@ -158,7 +158,11 @@ implementsInterfaces :
fieldsDefinition : '{' fieldDefinition+ '}';
-fieldDefinition : description? name argumentsDefinition? ':' type directives?;
+fieldDefinition : description? name argumentsDefinition? ':' type fieldTransformation? directives?;
+
+fieldTransformation : '=>' targetFieldDefinition;
+
+targetFieldDefinition : name ':' type;
argumentsDefinition : '(' inputValueDefinition+ ')';
diff --git a/src/main/antlr/dsl-alternatives.md b/src/main/antlr/dsl-alternatives.md
new file mode 100644
index 0000000000..cf1adfe354
--- /dev/null
+++ b/src/main/antlr/dsl-alternatives.md
@@ -0,0 +1,237 @@
+# DSL alternatives
+
+Resulting stitched schema:
+
+```
+type Post {
+ id: ID!
+ title: String
+ author: User
+}
+
+type User {
+ id: ID!
+ name: String
+ posts: [Post]
+}
+
+type Query {
+ post(id:ID!) : Post
+ posts(authorId:ID) : [Post]
+ user(id:ID!): User
+ users: [User]
+}
+
+```
+
+Post service internal schema:
+
+```
+type Post {
+ id: ID!
+ title: String
+ authorId: ID
+}
+
+
+type Query {
+ post(id:ID!) : Post
+ posts(authorId:ID) : [Post]
+}
+
+```
+
+User service internal schema:
+
+```
+type User {
+ id: ID!
+ name: String
+}
+
+type Query {
+ user(id:ID!): User
+ users: [User]
+}
+
+```
+
+## Pure SDL
+
+In this approach, no additional input parsing is needed, as the SDL contains all the stitching info.
+
+Pros:
+* Pure SDL makes it simpler to implement (other stacks can easily onboard this approach)
+* No need to learn a new DSL: SDL is a well-known format for GraphQL devs
+* Locality: final types are not scattered across multiple service definitions
+
+Cons:
+* The most verbose option of the list
+* Arguably the least readable solution
+
+### Linking
+
+Simple, convention-driven case:
+```
+type Post {
+ id: ID!
+ title: String
+ # this uses id as the default argument name, can be overridden
+ @ResolvedWith(service:"UserSvc",inputField:"authorId")
+ author: User
+}
+```
+
+Full definition example:
+```
+type Post {
+ id: ID!
+ title: String
+ @ResolvedWith(service:"UserSvc", inputField:"authorId", query: 'User', queryArgument: 'id')
+ author: User
+}
+```
+
+### Full example
+
+```
+# Service can allow for both URLs or a service nickname (URLs being passed separately)
+# allowDynamicSchema informs the stitcher to automatically add fields from the service into the final stitched schema
+@DefinedBy(service:"PostSvc",allowDynamicSchema:true)
+type Post {
+ id: ID!
+ title: String
+ @ResolvedWith(service:"UserSvc",inputField:"authorId")
+ author: User
+}
+
+@DefinedBy(service:"UserSvc",allowDynamicSchema:false)
+type User {
+ id: ID!
+ name: String
+ # This could have a default in case it's just one input argument, but starts getting into magic realm
+ # Input value resolves to 'id' by default, can be overridden
+ @ResolvedWith(service:"PostSvc",argumentName:"authorId")
+ posts: [Post]
+}
+
+@Service(name:"PostSvc", url:"http://posts/graphql")
+@Service(name:"UserSvc", url:"http://users/graphql")
+type Query {
+ @ImplementedBy(service:"PostSvc")
+ post(id:ID!) : Post
+ @ImplementedBy(service:"PostSvc")
+ posts(authorId:ID) : [Post]
+ @ImplementedBy(service:"UserSvc")
+ user(id:ID!): User
+ @ImplementedBy(service:"UserSvc")
+ users: [User]
+}
+```
+
+## Pure DSL
+
+### Linking
+
+Simple, convention-driven case:
+```
+type Post {
+ id: ID!
+ title: String
+ # Resolution of the 'User' type defaults to a 'user' query
+ authorId: ID => author:User
+}
+
+```
+
+Full definition:
+```
+type Post {
+ id: ID!
+ title: String
+ # Resolution of the 'User' type defaults to a 'user' query
+ authorId: ID => author:User { user(id) }
+}
+
+```
+
+
+### Full example
+
+```
+service PostSvc {
+ url: "asd"
+
+ type Post {
+ id: ID!
+ title: String
+ # Resolution of the 'User' type defaults to a 'user' query
+ authorId: ID => author:User
+ }
+
+ extend type User {
+ id: ID!
+ # Input value for the authorId argument defaults to the entity's id field
+ posts: [Post] => { posts(authorId) }
+ }
+
+ type Query {
+ post(id:ID!) : Post
+ posts(authorId:ID) : [Post]
+ }
+
+}
+
+service UserSvc {
+ url: "xyz"
+ type User {
+ id: ID!
+ name: String
+ }
+
+ type Query {
+ user(id:ID!): User
+ users: [User]
+ }
+}
+```
+
+## Hybrid
+
+```
+service PostSvc {
+ url: "asd"
+ type Post {
+ id: ID!
+ title: String
+ # User resolves to the query 'user' and authorId resolves to the 'id' argument by convention
+ @ConvertTo(type:"User",name:"author")
+ authorId: ID
+ }
+
+ extend type User {
+ id: ID!
+ # The argument value defaults to the type id so no need to input it as well
+ @ResolveWith(query:"posts",argument:"authorId")
+ posts: [Post]
+ }
+
+ type Query {
+ post(id:ID!) : Post
+ posts(authorId:ID) : [Post]
+ }
+}
+
+service UserSvc {
+ url: "xyz"
+ type User {
+ id: ID!
+ name: String
+ }
+
+ type Query {
+ user(id:ID!): User
+ users: [User]
+ }
+}
+```
\ No newline at end of file
diff --git a/src/main/gen/Graphql.tokens b/src/main/gen/Graphql.tokens
index 1975f9ed99..e3f3cb9238 100644
--- a/src/main/gen/Graphql.tokens
+++ b/src/main/gen/Graphql.tokens
@@ -15,34 +15,35 @@ T__13=14
T__14=15
T__15=16
T__16=17
-BooleanValue=18
-NullValue=19
-FRAGMENT=20
-QUERY=21
-MUTATION=22
-SUBSCRIPTION=23
-SCHEMA=24
-SCALAR=25
-TYPE=26
-INTERFACE=27
-IMPLEMENTS=28
-ENUM=29
-UNION=30
-INPUT=31
-EXTEND=32
-DIRECTIVE=33
-NAME=34
-IntValue=35
-FloatValue=36
-Sign=37
-IntegerPart=38
-NonZeroDigit=39
-ExponentPart=40
-Digit=41
-StringValue=42
-TripleQuotedStringValue=43
-Comment=44
-Ignored=45
+T__17=18
+BooleanValue=19
+NullValue=20
+FRAGMENT=21
+QUERY=22
+MUTATION=23
+SUBSCRIPTION=24
+SCHEMA=25
+SCALAR=26
+TYPE=27
+INTERFACE=28
+IMPLEMENTS=29
+ENUM=30
+UNION=31
+INPUT=32
+EXTEND=33
+DIRECTIVE=34
+NAME=35
+IntValue=36
+FloatValue=37
+Sign=38
+IntegerPart=39
+NonZeroDigit=40
+ExponentPart=41
+Digit=42
+StringValue=43
+TripleQuotedStringValue=44
+Comment=45
+Ignored=46
'service'=1
'{'=2
'}'=3
@@ -59,20 +60,21 @@ Ignored=45
'@'=14
'!'=15
'&'=16
-'|'=17
-'null'=19
-'fragment'=20
-'query'=21
-'mutation'=22
-'subscription'=23
-'schema'=24
-'scalar'=25
-'type'=26
-'interface'=27
-'implements'=28
-'enum'=29
-'union'=30
-'input'=31
-'extend'=32
-'directive'=33
-'-'=37
+'=>'=17
+'|'=18
+'null'=20
+'fragment'=21
+'query'=22
+'mutation'=23
+'subscription'=24
+'schema'=25
+'scalar'=26
+'type'=27
+'interface'=28
+'implements'=29
+'enum'=30
+'union'=31
+'input'=32
+'extend'=33
+'directive'=34
+'-'=38
diff --git a/src/main/gen/GraphqlBaseListener.java b/src/main/gen/GraphqlBaseListener.java
index e75f336995..0b807399e8 100644
--- a/src/main/gen/GraphqlBaseListener.java
+++ b/src/main/gen/GraphqlBaseListener.java
@@ -589,6 +589,30 @@ public class GraphqlBaseListener implements GraphqlListener {
* The default implementation does nothing.
*/
@Override public void exitFieldDefinition(GraphqlParser.FieldDefinitionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterFieldTransformation(GraphqlParser.FieldTransformationContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitFieldTransformation(GraphqlParser.FieldTransformationContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void enterTargetFieldDefinition(GraphqlParser.TargetFieldDefinitionContext ctx) { }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation does nothing.
+ */
+ @Override public void exitTargetFieldDefinition(GraphqlParser.TargetFieldDefinitionContext ctx) { }
/**
* {@inheritDoc}
*
diff --git a/src/main/gen/GraphqlBaseVisitor.java b/src/main/gen/GraphqlBaseVisitor.java
index e52f07e53c..4b4ddcc64d 100644
--- a/src/main/gen/GraphqlBaseVisitor.java
+++ b/src/main/gen/GraphqlBaseVisitor.java
@@ -349,6 +349,20 @@ public class GraphqlBaseVisitor extends AbstractParseTreeVisitor implement
* {@link #visitChildren} on {@code ctx}.
*/
@Override public T visitFieldDefinition(GraphqlParser.FieldDefinitionContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitFieldTransformation(GraphqlParser.FieldTransformationContext ctx) { return visitChildren(ctx); }
+ /**
+ * {@inheritDoc}
+ *
+ * The default implementation returns the result of calling
+ * {@link #visitChildren} on {@code ctx}.
+ */
+ @Override public T visitTargetFieldDefinition(GraphqlParser.TargetFieldDefinitionContext ctx) { return visitChildren(ctx); }
/**
* {@inheritDoc}
*
diff --git a/src/main/gen/GraphqlLexer.java b/src/main/gen/GraphqlLexer.java
index 67c9b7baf9..22cdfbd9f2 100644
--- a/src/main/gen/GraphqlLexer.java
+++ b/src/main/gen/GraphqlLexer.java
@@ -21,11 +21,11 @@ public class GraphqlLexer extends Lexer {
public static final int
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
- BooleanValue=18, NullValue=19, FRAGMENT=20, QUERY=21, MUTATION=22, SUBSCRIPTION=23,
- SCHEMA=24, SCALAR=25, TYPE=26, INTERFACE=27, IMPLEMENTS=28, ENUM=29, UNION=30,
- INPUT=31, EXTEND=32, DIRECTIVE=33, NAME=34, IntValue=35, FloatValue=36,
- Sign=37, IntegerPart=38, NonZeroDigit=39, ExponentPart=40, Digit=41, StringValue=42,
- TripleQuotedStringValue=43, Comment=44, Ignored=45;
+ T__17=18, BooleanValue=19, NullValue=20, FRAGMENT=21, QUERY=22, MUTATION=23,
+ SUBSCRIPTION=24, SCHEMA=25, SCALAR=26, TYPE=27, INTERFACE=28, IMPLEMENTS=29,
+ ENUM=30, UNION=31, INPUT=32, EXTEND=33, DIRECTIVE=34, NAME=35, IntValue=36,
+ FloatValue=37, Sign=38, IntegerPart=39, NonZeroDigit=40, ExponentPart=41,
+ Digit=42, StringValue=43, TripleQuotedStringValue=44, Comment=45, Ignored=46;
public static String[] channelNames = {
"DEFAULT_TOKEN_CHANNEL", "HIDDEN"
};
@@ -37,10 +37,10 @@ public class GraphqlLexer extends Lexer {
public static final String[] ruleNames = {
"T__0", "T__1", "T__2", "T__3", "T__4", "T__5", "T__6", "T__7", "T__8",
"T__9", "T__10", "T__11", "T__12", "T__13", "T__14", "T__15", "T__16",
- "BooleanValue", "NullValue", "FRAGMENT", "QUERY", "MUTATION", "SUBSCRIPTION",
- "SCHEMA", "SCALAR", "TYPE", "INTERFACE", "IMPLEMENTS", "ENUM", "UNION",
- "INPUT", "EXTEND", "DIRECTIVE", "NAME", "IntValue", "FloatValue", "Sign",
- "IntegerPart", "NonZeroDigit", "ExponentPart", "Digit", "StringValue",
+ "T__17", "BooleanValue", "NullValue", "FRAGMENT", "QUERY", "MUTATION",
+ "SUBSCRIPTION", "SCHEMA", "SCALAR", "TYPE", "INTERFACE", "IMPLEMENTS",
+ "ENUM", "UNION", "INPUT", "EXTEND", "DIRECTIVE", "NAME", "IntValue", "FloatValue",
+ "Sign", "IntegerPart", "NonZeroDigit", "ExponentPart", "Digit", "StringValue",
"TripleQuotedStringValue", "TripleQuotedStringPart", "EscapedTripleQuote",
"SourceCharacter", "Comment", "Ignored", "EscapedChar", "Unicode", "Hex",
"LineTerminator", "Whitespace", "Comma", "UnicodeBOM"
@@ -48,18 +48,19 @@ public class GraphqlLexer extends Lexer {
private static final String[] _LITERAL_NAMES = {
null, "'service'", "'{'", "'}'", "'url'", "':'", "'('", "')'", "'$'",
- "'='", "'...'", "'on'", "'['", "']'", "'@'", "'!'", "'&'", "'|'", null,
- "'null'", "'fragment'", "'query'", "'mutation'", "'subscription'", "'schema'",
- "'scalar'", "'type'", "'interface'", "'implements'", "'enum'", "'union'",
- "'input'", "'extend'", "'directive'", null, null, null, "'-'"
+ "'='", "'...'", "'on'", "'['", "']'", "'@'", "'!'", "'&'", "'=>'", "'|'",
+ null, "'null'", "'fragment'", "'query'", "'mutation'", "'subscription'",
+ "'schema'", "'scalar'", "'type'", "'interface'", "'implements'", "'enum'",
+ "'union'", "'input'", "'extend'", "'directive'", null, null, null, "'-'"
};
private static final String[] _SYMBOLIC_NAMES = {
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, "BooleanValue", "NullValue", "FRAGMENT",
- "QUERY", "MUTATION", "SUBSCRIPTION", "SCHEMA", "SCALAR", "TYPE", "INTERFACE",
- "IMPLEMENTS", "ENUM", "UNION", "INPUT", "EXTEND", "DIRECTIVE", "NAME",
- "IntValue", "FloatValue", "Sign", "IntegerPart", "NonZeroDigit", "ExponentPart",
- "Digit", "StringValue", "TripleQuotedStringValue", "Comment", "Ignored"
+ null, null, null, null, null, null, null, "BooleanValue", "NullValue",
+ "FRAGMENT", "QUERY", "MUTATION", "SUBSCRIPTION", "SCHEMA", "SCALAR", "TYPE",
+ "INTERFACE", "IMPLEMENTS", "ENUM", "UNION", "INPUT", "EXTEND", "DIRECTIVE",
+ "NAME", "IntValue", "FloatValue", "Sign", "IntegerPart", "NonZeroDigit",
+ "ExponentPart", "Digit", "StringValue", "TripleQuotedStringValue", "Comment",
+ "Ignored"
};
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
@@ -119,143 +120,145 @@ public GraphqlLexer(CharStream input) {
public ATN getATN() { return _ATN; }
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2/\u0199\b\1\4\2\t"+
- "\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
- "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
- "\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
- "\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
- "\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
- ",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
- "\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\3\2\3\2\3\2\3\2\3\2\3\2\3\2\3"+
- "\2\3\3\3\3\3\4\3\4\3\5\3\5\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t\3\t\3\n"+
- "\3\n\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3\17\3\20"+
- "\3\20\3\21\3\21\3\22\3\22\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23\3\23"+
- "\5\23\u00a8\n\23\3\24\3\24\3\24\3\24\3\24\3\25\3\25\3\25\3\25\3\25\3\25"+
- "\3\25\3\25\3\25\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27"+
- "\3\27\3\27\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30"+
- "\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32"+
- "\3\32\3\32\3\32\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\34"+
- "\3\34\3\34\3\34\3\34\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35"+
- "\3\35\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3\37\3 \3 \3 "+
- "\3 \3 \3 \3!\3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3\""+
- "\3#\3#\7#\u0120\n#\f#\16#\u0123\13#\3$\5$\u0126\n$\3$\3$\3%\5%\u012b\n"+
- "%\3%\3%\3%\6%\u0130\n%\r%\16%\u0131\5%\u0134\n%\3%\5%\u0137\n%\3&\3&\3"+
- "\'\3\'\3\'\3\'\6\'\u013f\n\'\r\'\16\'\u0140\5\'\u0143\n\'\3(\3(\3)\3)"+
- "\5)\u0149\n)\3)\6)\u014c\n)\r)\16)\u014d\3*\3*\3+\3+\3+\7+\u0155\n+\f"+
- "+\16+\u0158\13+\3+\3+\3,\3,\3,\3,\3,\5,\u0161\n,\3,\3,\3,\3,\3-\3-\6-"+
- "\u0169\n-\r-\16-\u016a\3.\3.\3.\3.\3.\3/\3/\3\60\3\60\7\60\u0176\n\60"+
- "\f\60\16\60\u0179\13\60\3\60\3\60\3\61\3\61\3\61\3\61\5\61\u0181\n\61"+
- "\3\61\3\61\3\62\3\62\3\62\5\62\u0188\n\62\3\63\3\63\3\63\3\63\3\63\3\63"+
- "\3\64\3\64\3\65\3\65\3\66\3\66\3\67\3\67\38\38\3\u016a\29\3\3\5\4\7\5"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\2\60\u019e\b\1\4\2"+
+ "\t\2\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4"+
+ "\13\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22"+
+ "\t\22\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31"+
+ "\t\31\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t"+
+ " \4!\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t"+
+ "+\4,\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64"+
+ "\t\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\3\2\3\2\3\2\3\2\3\2\3"+
+ "\2\3\2\3\2\3\3\3\3\3\4\3\4\3\5\3\5\3\5\3\5\3\6\3\6\3\7\3\7\3\b\3\b\3\t"+
+ "\3\t\3\n\3\n\3\13\3\13\3\13\3\13\3\f\3\f\3\f\3\r\3\r\3\16\3\16\3\17\3"+
+ "\17\3\20\3\20\3\21\3\21\3\22\3\22\3\22\3\23\3\23\3\24\3\24\3\24\3\24\3"+
+ "\24\3\24\3\24\3\24\3\24\5\24\u00ad\n\24\3\25\3\25\3\25\3\25\3\25\3\26"+
+ "\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\26\3\27\3\27\3\27\3\27\3\27\3\27"+
+ "\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\30\3\31\3\31\3\31\3\31\3\31"+
+ "\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\32\3\32\3\32\3\32\3\32\3\32"+
+ "\3\32\3\33\3\33\3\33\3\33\3\33\3\33\3\33\3\34\3\34\3\34\3\34\3\34\3\35"+
+ "\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\35\3\36\3\36\3\36\3\36\3\36"+
+ "\3\36\3\36\3\36\3\36\3\36\3\36\3\37\3\37\3\37\3\37\3\37\3 \3 \3 \3 \3"+
+ " \3 \3!\3!\3!\3!\3!\3!\3\"\3\"\3\"\3\"\3\"\3\"\3\"\3#\3#\3#\3#\3#\3#\3"+
+ "#\3#\3#\3#\3$\3$\7$\u0125\n$\f$\16$\u0128\13$\3%\5%\u012b\n%\3%\3%\3&"+
+ "\5&\u0130\n&\3&\3&\3&\6&\u0135\n&\r&\16&\u0136\5&\u0139\n&\3&\5&\u013c"+
+ "\n&\3\'\3\'\3(\3(\3(\3(\6(\u0144\n(\r(\16(\u0145\5(\u0148\n(\3)\3)\3*"+
+ "\3*\5*\u014e\n*\3*\6*\u0151\n*\r*\16*\u0152\3+\3+\3,\3,\3,\7,\u015a\n"+
+ ",\f,\16,\u015d\13,\3,\3,\3-\3-\3-\3-\3-\5-\u0166\n-\3-\3-\3-\3-\3.\3."+
+ "\6.\u016e\n.\r.\16.\u016f\3/\3/\3/\3/\3/\3\60\3\60\3\61\3\61\7\61\u017b"+
+ "\n\61\f\61\16\61\u017e\13\61\3\61\3\61\3\62\3\62\3\62\3\62\5\62\u0186"+
+ "\n\62\3\62\3\62\3\63\3\63\3\63\5\63\u018d\n\63\3\64\3\64\3\64\3\64\3\64"+
+ "\3\64\3\65\3\65\3\66\3\66\3\67\3\67\38\38\39\39\3\u016f\2:\3\3\5\4\7\5"+
"\t\6\13\7\r\b\17\t\21\n\23\13\25\f\27\r\31\16\33\17\35\20\37\21!\22#\23"+
"%\24\'\25)\26+\27-\30/\31\61\32\63\33\65\34\67\359\36;\37= ?!A\"C#E$G"+
- "%I&K\'M(O)Q*S+U,W-Y\2[\2]\2_.a/c\2e\2g\2i\2k\2m\2o\2\3\2\f\5\2C\\aac|"+
- "\6\2\62;C\\aac|\4\2GGgg\7\2\f\f\17\17$$^^\u202a\u202b\5\2\13\f\17\17\""+
- "\1\5\2\f\f\17\17\u202a\u202b\n\2$$\61\61^^ddhhppttvv\5\2\62;CHch\4\2\13"+
- "\13\"\"\3\2\uff01\uff01\2\u01a4\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2\2\2\2"+
- "\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2\23\3\2"+
- "\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3\2\2\2"+
- "\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3\2\2\2"+
- "\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65\3\2\2"+
- "\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3\2\2\2"+
- "\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2\2\2O"+
- "\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2_\3\2\2\2\2a\3\2"+
- "\2\2\3q\3\2\2\2\5y\3\2\2\2\7{\3\2\2\2\t}\3\2\2\2\13\u0081\3\2\2\2\r\u0083"+
- "\3\2\2\2\17\u0085\3\2\2\2\21\u0087\3\2\2\2\23\u0089\3\2\2\2\25\u008b\3"+
- "\2\2\2\27\u008f\3\2\2\2\31\u0092\3\2\2\2\33\u0094\3\2\2\2\35\u0096\3\2"+
- "\2\2\37\u0098\3\2\2\2!\u009a\3\2\2\2#\u009c\3\2\2\2%\u00a7\3\2\2\2\'\u00a9"+
- "\3\2\2\2)\u00ae\3\2\2\2+\u00b7\3\2\2\2-\u00bd\3\2\2\2/\u00c6\3\2\2\2\61"+
- "\u00d3\3\2\2\2\63\u00da\3\2\2\2\65\u00e1\3\2\2\2\67\u00e6\3\2\2\29\u00f0"+
- "\3\2\2\2;\u00fb\3\2\2\2=\u0100\3\2\2\2?\u0106\3\2\2\2A\u010c\3\2\2\2C"+
- "\u0113\3\2\2\2E\u011d\3\2\2\2G\u0125\3\2\2\2I\u012a\3\2\2\2K\u0138\3\2"+
- "\2\2M\u0142\3\2\2\2O\u0144\3\2\2\2Q\u0146\3\2\2\2S\u014f\3\2\2\2U\u0151"+
- "\3\2\2\2W\u015b\3\2\2\2Y\u0168\3\2\2\2[\u016c\3\2\2\2]\u0171\3\2\2\2_"+
- "\u0173\3\2\2\2a\u0180\3\2\2\2c\u0184\3\2\2\2e\u0189\3\2\2\2g\u018f\3\2"+
- "\2\2i\u0191\3\2\2\2k\u0193\3\2\2\2m\u0195\3\2\2\2o\u0197\3\2\2\2qr\7u"+
- "\2\2rs\7g\2\2st\7t\2\2tu\7x\2\2uv\7k\2\2vw\7e\2\2wx\7g\2\2x\4\3\2\2\2"+
- "yz\7}\2\2z\6\3\2\2\2{|\7\177\2\2|\b\3\2\2\2}~\7w\2\2~\177\7t\2\2\177\u0080"+
- "\7n\2\2\u0080\n\3\2\2\2\u0081\u0082\7<\2\2\u0082\f\3\2\2\2\u0083\u0084"+
- "\7*\2\2\u0084\16\3\2\2\2\u0085\u0086\7+\2\2\u0086\20\3\2\2\2\u0087\u0088"+
- "\7&\2\2\u0088\22\3\2\2\2\u0089\u008a\7?\2\2\u008a\24\3\2\2\2\u008b\u008c"+
- "\7\60\2\2\u008c\u008d\7\60\2\2\u008d\u008e\7\60\2\2\u008e\26\3\2\2\2\u008f"+
- "\u0090\7q\2\2\u0090\u0091\7p\2\2\u0091\30\3\2\2\2\u0092\u0093\7]\2\2\u0093"+
- "\32\3\2\2\2\u0094\u0095\7_\2\2\u0095\34\3\2\2\2\u0096\u0097\7B\2\2\u0097"+
- "\36\3\2\2\2\u0098\u0099\7#\2\2\u0099 \3\2\2\2\u009a\u009b\7(\2\2\u009b"+
- "\"\3\2\2\2\u009c\u009d\7~\2\2\u009d$\3\2\2\2\u009e\u009f\7v\2\2\u009f"+
- "\u00a0\7t\2\2\u00a0\u00a1\7w\2\2\u00a1\u00a8\7g\2\2\u00a2\u00a3\7h\2\2"+
- "\u00a3\u00a4\7c\2\2\u00a4\u00a5\7n\2\2\u00a5\u00a6\7u\2\2\u00a6\u00a8"+
- "\7g\2\2\u00a7\u009e\3\2\2\2\u00a7\u00a2\3\2\2\2\u00a8&\3\2\2\2\u00a9\u00aa"+
- "\7p\2\2\u00aa\u00ab\7w\2\2\u00ab\u00ac\7n\2\2\u00ac\u00ad\7n\2\2\u00ad"+
- "(\3\2\2\2\u00ae\u00af\7h\2\2\u00af\u00b0\7t\2\2\u00b0\u00b1\7c\2\2\u00b1"+
- "\u00b2\7i\2\2\u00b2\u00b3\7o\2\2\u00b3\u00b4\7g\2\2\u00b4\u00b5\7p\2\2"+
- "\u00b5\u00b6\7v\2\2\u00b6*\3\2\2\2\u00b7\u00b8\7s\2\2\u00b8\u00b9\7w\2"+
- "\2\u00b9\u00ba\7g\2\2\u00ba\u00bb\7t\2\2\u00bb\u00bc\7{\2\2\u00bc,\3\2"+
- "\2\2\u00bd\u00be\7o\2\2\u00be\u00bf\7w\2\2\u00bf\u00c0\7v\2\2\u00c0\u00c1"+
- "\7c\2\2\u00c1\u00c2\7v\2\2\u00c2\u00c3\7k\2\2\u00c3\u00c4\7q\2\2\u00c4"+
- "\u00c5\7p\2\2\u00c5.\3\2\2\2\u00c6\u00c7\7u\2\2\u00c7\u00c8\7w\2\2\u00c8"+
- "\u00c9\7d\2\2\u00c9\u00ca\7u\2\2\u00ca\u00cb\7e\2\2\u00cb\u00cc\7t\2\2"+
- "\u00cc\u00cd\7k\2\2\u00cd\u00ce\7r\2\2\u00ce\u00cf\7v\2\2\u00cf\u00d0"+
- "\7k\2\2\u00d0\u00d1\7q\2\2\u00d1\u00d2\7p\2\2\u00d2\60\3\2\2\2\u00d3\u00d4"+
- "\7u\2\2\u00d4\u00d5\7e\2\2\u00d5\u00d6\7j\2\2\u00d6\u00d7\7g\2\2\u00d7"+
- "\u00d8\7o\2\2\u00d8\u00d9\7c\2\2\u00d9\62\3\2\2\2\u00da\u00db\7u\2\2\u00db"+
- "\u00dc\7e\2\2\u00dc\u00dd\7c\2\2\u00dd\u00de\7n\2\2\u00de\u00df\7c\2\2"+
- "\u00df\u00e0\7t\2\2\u00e0\64\3\2\2\2\u00e1\u00e2\7v\2\2\u00e2\u00e3\7"+
- "{\2\2\u00e3\u00e4\7r\2\2\u00e4\u00e5\7g\2\2\u00e5\66\3\2\2\2\u00e6\u00e7"+
- "\7k\2\2\u00e7\u00e8\7p\2\2\u00e8\u00e9\7v\2\2\u00e9\u00ea\7g\2\2\u00ea"+
- "\u00eb\7t\2\2\u00eb\u00ec\7h\2\2\u00ec\u00ed\7c\2\2\u00ed\u00ee\7e\2\2"+
- "\u00ee\u00ef\7g\2\2\u00ef8\3\2\2\2\u00f0\u00f1\7k\2\2\u00f1\u00f2\7o\2"+
- "\2\u00f2\u00f3\7r\2\2\u00f3\u00f4\7n\2\2\u00f4\u00f5\7g\2\2\u00f5\u00f6"+
- "\7o\2\2\u00f6\u00f7\7g\2\2\u00f7\u00f8\7p\2\2\u00f8\u00f9\7v\2\2\u00f9"+
- "\u00fa\7u\2\2\u00fa:\3\2\2\2\u00fb\u00fc\7g\2\2\u00fc\u00fd\7p\2\2\u00fd"+
- "\u00fe\7w\2\2\u00fe\u00ff\7o\2\2\u00ff<\3\2\2\2\u0100\u0101\7w\2\2\u0101"+
- "\u0102\7p\2\2\u0102\u0103\7k\2\2\u0103\u0104\7q\2\2\u0104\u0105\7p\2\2"+
- "\u0105>\3\2\2\2\u0106\u0107\7k\2\2\u0107\u0108\7p\2\2\u0108\u0109\7r\2"+
- "\2\u0109\u010a\7w\2\2\u010a\u010b\7v\2\2\u010b@\3\2\2\2\u010c\u010d\7"+
- "g\2\2\u010d\u010e\7z\2\2\u010e\u010f\7v\2\2\u010f\u0110\7g\2\2\u0110\u0111"+
- "\7p\2\2\u0111\u0112\7f\2\2\u0112B\3\2\2\2\u0113\u0114\7f\2\2\u0114\u0115"+
- "\7k\2\2\u0115\u0116\7t\2\2\u0116\u0117\7g\2\2\u0117\u0118\7e\2\2\u0118"+
- "\u0119\7v\2\2\u0119\u011a\7k\2\2\u011a\u011b\7x\2\2\u011b\u011c\7g\2\2"+
- "\u011cD\3\2\2\2\u011d\u0121\t\2\2\2\u011e\u0120\t\3\2\2\u011f\u011e\3"+
- "\2\2\2\u0120\u0123\3\2\2\2\u0121\u011f\3\2\2\2\u0121\u0122\3\2\2\2\u0122"+
- "F\3\2\2\2\u0123\u0121\3\2\2\2\u0124\u0126\5K&\2\u0125\u0124\3\2\2\2\u0125"+
- "\u0126\3\2\2\2\u0126\u0127\3\2\2\2\u0127\u0128\5M\'\2\u0128H\3\2\2\2\u0129"+
- "\u012b\5K&\2\u012a\u0129\3\2\2\2\u012a\u012b\3\2\2\2\u012b\u012c\3\2\2"+
- "\2\u012c\u0133\5M\'\2\u012d\u012f\7\60\2\2\u012e\u0130\5S*\2\u012f\u012e"+
- "\3\2\2\2\u0130\u0131\3\2\2\2\u0131\u012f\3\2\2\2\u0131\u0132\3\2\2\2\u0132"+
- "\u0134\3\2\2\2\u0133\u012d\3\2\2\2\u0133\u0134\3\2\2\2\u0134\u0136\3\2"+
- "\2\2\u0135\u0137\5Q)\2\u0136\u0135\3\2\2\2\u0136\u0137\3\2\2\2\u0137J"+
- "\3\2\2\2\u0138\u0139\7/\2\2\u0139L\3\2\2\2\u013a\u0143\7\62\2\2\u013b"+
- "\u0143\5O(\2\u013c\u013e\5O(\2\u013d\u013f\5S*\2\u013e\u013d\3\2\2\2\u013f"+
- "\u0140\3\2\2\2\u0140\u013e\3\2\2\2\u0140\u0141\3\2\2\2\u0141\u0143\3\2"+
- "\2\2\u0142\u013a\3\2\2\2\u0142\u013b\3\2\2\2\u0142\u013c\3\2\2\2\u0143"+
- "N\3\2\2\2\u0144\u0145\4\63;\2\u0145P\3\2\2\2\u0146\u0148\t\4\2\2\u0147"+
- "\u0149\5K&\2\u0148\u0147\3\2\2\2\u0148\u0149\3\2\2\2\u0149\u014b\3\2\2"+
- "\2\u014a\u014c\5S*\2\u014b\u014a\3\2\2\2\u014c\u014d\3\2\2\2\u014d\u014b"+
- "\3\2\2\2\u014d\u014e\3\2\2\2\u014eR\3\2\2\2\u014f\u0150\4\62;\2\u0150"+
- "T\3\2\2\2\u0151\u0156\7$\2\2\u0152\u0155\n\5\2\2\u0153\u0155\5c\62\2\u0154"+
- "\u0152\3\2\2\2\u0154\u0153\3\2\2\2\u0155\u0158\3\2\2\2\u0156\u0154\3\2"+
- "\2\2\u0156\u0157\3\2\2\2\u0157\u0159\3\2\2\2\u0158\u0156\3\2\2\2\u0159"+
- "\u015a\7$\2\2\u015aV\3\2\2\2\u015b\u015c\7$\2\2\u015c\u015d\7$\2\2\u015d"+
- "\u015e\7$\2\2\u015e\u0160\3\2\2\2\u015f\u0161\5Y-\2\u0160\u015f\3\2\2"+
- "\2\u0160\u0161\3\2\2\2\u0161\u0162\3\2\2\2\u0162\u0163\7$\2\2\u0163\u0164"+
- "\7$\2\2\u0164\u0165\7$\2\2\u0165X\3\2\2\2\u0166\u0169\5[.\2\u0167\u0169"+
- "\5]/\2\u0168\u0166\3\2\2\2\u0168\u0167\3\2\2\2\u0169\u016a\3\2\2\2\u016a"+
- "\u016b\3\2\2\2\u016a\u0168\3\2\2\2\u016bZ\3\2\2\2\u016c\u016d\7^\2\2\u016d"+
- "\u016e\7$\2\2\u016e\u016f\7$\2\2\u016f\u0170\7$\2\2\u0170\\\3\2\2\2\u0171"+
- "\u0172\t\6\2\2\u0172^\3\2\2\2\u0173\u0177\7%\2\2\u0174\u0176\n\7\2\2\u0175"+
- "\u0174\3\2\2\2\u0176\u0179\3\2\2\2\u0177\u0175\3\2\2\2\u0177\u0178\3\2"+
- "\2\2\u0178\u017a\3\2\2\2\u0179\u0177\3\2\2\2\u017a\u017b\b\60\2\2\u017b"+
- "`\3\2\2\2\u017c\u0181\5o8\2\u017d\u0181\5k\66\2\u017e\u0181\5i\65\2\u017f"+
- "\u0181\5m\67\2\u0180\u017c\3\2\2\2\u0180\u017d\3\2\2\2\u0180\u017e\3\2"+
- "\2\2\u0180\u017f\3\2\2\2\u0181\u0182\3\2\2\2\u0182\u0183\b\61\3\2\u0183"+
- "b\3\2\2\2\u0184\u0187\7^\2\2\u0185\u0188\t\b\2\2\u0186\u0188\5e\63\2\u0187"+
- "\u0185\3\2\2\2\u0187\u0186\3\2\2\2\u0188d\3\2\2\2\u0189\u018a\7w\2\2\u018a"+
- "\u018b\5g\64\2\u018b\u018c\5g\64\2\u018c\u018d\5g\64\2\u018d\u018e\5g"+
- "\64\2\u018ef\3\2\2\2\u018f\u0190\t\t\2\2\u0190h\3\2\2\2\u0191\u0192\t"+
- "\7\2\2\u0192j\3\2\2\2\u0193\u0194\t\n\2\2\u0194l\3\2\2\2\u0195\u0196\7"+
- ".\2\2\u0196n\3\2\2\2\u0197\u0198\t\13\2\2\u0198p\3\2\2\2\26\2\u00a7\u0121"+
- "\u0125\u012a\u0131\u0133\u0136\u0140\u0142\u0148\u014d\u0154\u0156\u0160"+
- "\u0168\u016a\u0177\u0180\u0187\4\2\4\2\b\2\2";
+ "%I&K\'M(O)Q*S+U,W-Y.[\2]\2_\2a/c\60e\2g\2i\2k\2m\2o\2q\2\3\2\f\5\2C\\"+
+ "aac|\6\2\62;C\\aac|\4\2GGgg\7\2\f\f\17\17$$^^\u202a\u202b\5\2\13\f\17"+
+ "\17\"\1\5\2\f\f\17\17\u202a\u202b\n\2$$\61\61^^ddhhppttvv\5\2\62;CHch"+
+ "\4\2\13\13\"\"\3\2\uff01\uff01\2\u01a9\2\3\3\2\2\2\2\5\3\2\2\2\2\7\3\2"+
+ "\2\2\2\t\3\2\2\2\2\13\3\2\2\2\2\r\3\2\2\2\2\17\3\2\2\2\2\21\3\2\2\2\2"+
+ "\23\3\2\2\2\2\25\3\2\2\2\2\27\3\2\2\2\2\31\3\2\2\2\2\33\3\2\2\2\2\35\3"+
+ "\2\2\2\2\37\3\2\2\2\2!\3\2\2\2\2#\3\2\2\2\2%\3\2\2\2\2\'\3\2\2\2\2)\3"+
+ "\2\2\2\2+\3\2\2\2\2-\3\2\2\2\2/\3\2\2\2\2\61\3\2\2\2\2\63\3\2\2\2\2\65"+
+ "\3\2\2\2\2\67\3\2\2\2\29\3\2\2\2\2;\3\2\2\2\2=\3\2\2\2\2?\3\2\2\2\2A\3"+
+ "\2\2\2\2C\3\2\2\2\2E\3\2\2\2\2G\3\2\2\2\2I\3\2\2\2\2K\3\2\2\2\2M\3\2\2"+
+ "\2\2O\3\2\2\2\2Q\3\2\2\2\2S\3\2\2\2\2U\3\2\2\2\2W\3\2\2\2\2Y\3\2\2\2\2"+
+ "a\3\2\2\2\2c\3\2\2\2\3s\3\2\2\2\5{\3\2\2\2\7}\3\2\2\2\t\177\3\2\2\2\13"+
+ "\u0083\3\2\2\2\r\u0085\3\2\2\2\17\u0087\3\2\2\2\21\u0089\3\2\2\2\23\u008b"+
+ "\3\2\2\2\25\u008d\3\2\2\2\27\u0091\3\2\2\2\31\u0094\3\2\2\2\33\u0096\3"+
+ "\2\2\2\35\u0098\3\2\2\2\37\u009a\3\2\2\2!\u009c\3\2\2\2#\u009e\3\2\2\2"+
+ "%\u00a1\3\2\2\2\'\u00ac\3\2\2\2)\u00ae\3\2\2\2+\u00b3\3\2\2\2-\u00bc\3"+
+ "\2\2\2/\u00c2\3\2\2\2\61\u00cb\3\2\2\2\63\u00d8\3\2\2\2\65\u00df\3\2\2"+
+ "\2\67\u00e6\3\2\2\29\u00eb\3\2\2\2;\u00f5\3\2\2\2=\u0100\3\2\2\2?\u0105"+
+ "\3\2\2\2A\u010b\3\2\2\2C\u0111\3\2\2\2E\u0118\3\2\2\2G\u0122\3\2\2\2I"+
+ "\u012a\3\2\2\2K\u012f\3\2\2\2M\u013d\3\2\2\2O\u0147\3\2\2\2Q\u0149\3\2"+
+ "\2\2S\u014b\3\2\2\2U\u0154\3\2\2\2W\u0156\3\2\2\2Y\u0160\3\2\2\2[\u016d"+
+ "\3\2\2\2]\u0171\3\2\2\2_\u0176\3\2\2\2a\u0178\3\2\2\2c\u0185\3\2\2\2e"+
+ "\u0189\3\2\2\2g\u018e\3\2\2\2i\u0194\3\2\2\2k\u0196\3\2\2\2m\u0198\3\2"+
+ "\2\2o\u019a\3\2\2\2q\u019c\3\2\2\2st\7u\2\2tu\7g\2\2uv\7t\2\2vw\7x\2\2"+
+ "wx\7k\2\2xy\7e\2\2yz\7g\2\2z\4\3\2\2\2{|\7}\2\2|\6\3\2\2\2}~\7\177\2\2"+
+ "~\b\3\2\2\2\177\u0080\7w\2\2\u0080\u0081\7t\2\2\u0081\u0082\7n\2\2\u0082"+
+ "\n\3\2\2\2\u0083\u0084\7<\2\2\u0084\f\3\2\2\2\u0085\u0086\7*\2\2\u0086"+
+ "\16\3\2\2\2\u0087\u0088\7+\2\2\u0088\20\3\2\2\2\u0089\u008a\7&\2\2\u008a"+
+ "\22\3\2\2\2\u008b\u008c\7?\2\2\u008c\24\3\2\2\2\u008d\u008e\7\60\2\2\u008e"+
+ "\u008f\7\60\2\2\u008f\u0090\7\60\2\2\u0090\26\3\2\2\2\u0091\u0092\7q\2"+
+ "\2\u0092\u0093\7p\2\2\u0093\30\3\2\2\2\u0094\u0095\7]\2\2\u0095\32\3\2"+
+ "\2\2\u0096\u0097\7_\2\2\u0097\34\3\2\2\2\u0098\u0099\7B\2\2\u0099\36\3"+
+ "\2\2\2\u009a\u009b\7#\2\2\u009b \3\2\2\2\u009c\u009d\7(\2\2\u009d\"\3"+
+ "\2\2\2\u009e\u009f\7?\2\2\u009f\u00a0\7@\2\2\u00a0$\3\2\2\2\u00a1\u00a2"+
+ "\7~\2\2\u00a2&\3\2\2\2\u00a3\u00a4\7v\2\2\u00a4\u00a5\7t\2\2\u00a5\u00a6"+
+ "\7w\2\2\u00a6\u00ad\7g\2\2\u00a7\u00a8\7h\2\2\u00a8\u00a9\7c\2\2\u00a9"+
+ "\u00aa\7n\2\2\u00aa\u00ab\7u\2\2\u00ab\u00ad\7g\2\2\u00ac\u00a3\3\2\2"+
+ "\2\u00ac\u00a7\3\2\2\2\u00ad(\3\2\2\2\u00ae\u00af\7p\2\2\u00af\u00b0\7"+
+ "w\2\2\u00b0\u00b1\7n\2\2\u00b1\u00b2\7n\2\2\u00b2*\3\2\2\2\u00b3\u00b4"+
+ "\7h\2\2\u00b4\u00b5\7t\2\2\u00b5\u00b6\7c\2\2\u00b6\u00b7\7i\2\2\u00b7"+
+ "\u00b8\7o\2\2\u00b8\u00b9\7g\2\2\u00b9\u00ba\7p\2\2\u00ba\u00bb\7v\2\2"+
+ "\u00bb,\3\2\2\2\u00bc\u00bd\7s\2\2\u00bd\u00be\7w\2\2\u00be\u00bf\7g\2"+
+ "\2\u00bf\u00c0\7t\2\2\u00c0\u00c1\7{\2\2\u00c1.\3\2\2\2\u00c2\u00c3\7"+
+ "o\2\2\u00c3\u00c4\7w\2\2\u00c4\u00c5\7v\2\2\u00c5\u00c6\7c\2\2\u00c6\u00c7"+
+ "\7v\2\2\u00c7\u00c8\7k\2\2\u00c8\u00c9\7q\2\2\u00c9\u00ca\7p\2\2\u00ca"+
+ "\60\3\2\2\2\u00cb\u00cc\7u\2\2\u00cc\u00cd\7w\2\2\u00cd\u00ce\7d\2\2\u00ce"+
+ "\u00cf\7u\2\2\u00cf\u00d0\7e\2\2\u00d0\u00d1\7t\2\2\u00d1\u00d2\7k\2\2"+
+ "\u00d2\u00d3\7r\2\2\u00d3\u00d4\7v\2\2\u00d4\u00d5\7k\2\2\u00d5\u00d6"+
+ "\7q\2\2\u00d6\u00d7\7p\2\2\u00d7\62\3\2\2\2\u00d8\u00d9\7u\2\2\u00d9\u00da"+
+ "\7e\2\2\u00da\u00db\7j\2\2\u00db\u00dc\7g\2\2\u00dc\u00dd\7o\2\2\u00dd"+
+ "\u00de\7c\2\2\u00de\64\3\2\2\2\u00df\u00e0\7u\2\2\u00e0\u00e1\7e\2\2\u00e1"+
+ "\u00e2\7c\2\2\u00e2\u00e3\7n\2\2\u00e3\u00e4\7c\2\2\u00e4\u00e5\7t\2\2"+
+ "\u00e5\66\3\2\2\2\u00e6\u00e7\7v\2\2\u00e7\u00e8\7{\2\2\u00e8\u00e9\7"+
+ "r\2\2\u00e9\u00ea\7g\2\2\u00ea8\3\2\2\2\u00eb\u00ec\7k\2\2\u00ec\u00ed"+
+ "\7p\2\2\u00ed\u00ee\7v\2\2\u00ee\u00ef\7g\2\2\u00ef\u00f0\7t\2\2\u00f0"+
+ "\u00f1\7h\2\2\u00f1\u00f2\7c\2\2\u00f2\u00f3\7e\2\2\u00f3\u00f4\7g\2\2"+
+ "\u00f4:\3\2\2\2\u00f5\u00f6\7k\2\2\u00f6\u00f7\7o\2\2\u00f7\u00f8\7r\2"+
+ "\2\u00f8\u00f9\7n\2\2\u00f9\u00fa\7g\2\2\u00fa\u00fb\7o\2\2\u00fb\u00fc"+
+ "\7g\2\2\u00fc\u00fd\7p\2\2\u00fd\u00fe\7v\2\2\u00fe\u00ff\7u\2\2\u00ff"+
+ "<\3\2\2\2\u0100\u0101\7g\2\2\u0101\u0102\7p\2\2\u0102\u0103\7w\2\2\u0103"+
+ "\u0104\7o\2\2\u0104>\3\2\2\2\u0105\u0106\7w\2\2\u0106\u0107\7p\2\2\u0107"+
+ "\u0108\7k\2\2\u0108\u0109\7q\2\2\u0109\u010a\7p\2\2\u010a@\3\2\2\2\u010b"+
+ "\u010c\7k\2\2\u010c\u010d\7p\2\2\u010d\u010e\7r\2\2\u010e\u010f\7w\2\2"+
+ "\u010f\u0110\7v\2\2\u0110B\3\2\2\2\u0111\u0112\7g\2\2\u0112\u0113\7z\2"+
+ "\2\u0113\u0114\7v\2\2\u0114\u0115\7g\2\2\u0115\u0116\7p\2\2\u0116\u0117"+
+ "\7f\2\2\u0117D\3\2\2\2\u0118\u0119\7f\2\2\u0119\u011a\7k\2\2\u011a\u011b"+
+ "\7t\2\2\u011b\u011c\7g\2\2\u011c\u011d\7e\2\2\u011d\u011e\7v\2\2\u011e"+
+ "\u011f\7k\2\2\u011f\u0120\7x\2\2\u0120\u0121\7g\2\2\u0121F\3\2\2\2\u0122"+
+ "\u0126\t\2\2\2\u0123\u0125\t\3\2\2\u0124\u0123\3\2\2\2\u0125\u0128\3\2"+
+ "\2\2\u0126\u0124\3\2\2\2\u0126\u0127\3\2\2\2\u0127H\3\2\2\2\u0128\u0126"+
+ "\3\2\2\2\u0129\u012b\5M\'\2\u012a\u0129\3\2\2\2\u012a\u012b\3\2\2\2\u012b"+
+ "\u012c\3\2\2\2\u012c\u012d\5O(\2\u012dJ\3\2\2\2\u012e\u0130\5M\'\2\u012f"+
+ "\u012e\3\2\2\2\u012f\u0130\3\2\2\2\u0130\u0131\3\2\2\2\u0131\u0138\5O"+
+ "(\2\u0132\u0134\7\60\2\2\u0133\u0135\5U+\2\u0134\u0133\3\2\2\2\u0135\u0136"+
+ "\3\2\2\2\u0136\u0134\3\2\2\2\u0136\u0137\3\2\2\2\u0137\u0139\3\2\2\2\u0138"+
+ "\u0132\3\2\2\2\u0138\u0139\3\2\2\2\u0139\u013b\3\2\2\2\u013a\u013c\5S"+
+ "*\2\u013b\u013a\3\2\2\2\u013b\u013c\3\2\2\2\u013cL\3\2\2\2\u013d\u013e"+
+ "\7/\2\2\u013eN\3\2\2\2\u013f\u0148\7\62\2\2\u0140\u0148\5Q)\2\u0141\u0143"+
+ "\5Q)\2\u0142\u0144\5U+\2\u0143\u0142\3\2\2\2\u0144\u0145\3\2\2\2\u0145"+
+ "\u0143\3\2\2\2\u0145\u0146\3\2\2\2\u0146\u0148\3\2\2\2\u0147\u013f\3\2"+
+ "\2\2\u0147\u0140\3\2\2\2\u0147\u0141\3\2\2\2\u0148P\3\2\2\2\u0149\u014a"+
+ "\4\63;\2\u014aR\3\2\2\2\u014b\u014d\t\4\2\2\u014c\u014e\5M\'\2\u014d\u014c"+
+ "\3\2\2\2\u014d\u014e\3\2\2\2\u014e\u0150\3\2\2\2\u014f\u0151\5U+\2\u0150"+
+ "\u014f\3\2\2\2\u0151\u0152\3\2\2\2\u0152\u0150\3\2\2\2\u0152\u0153\3\2"+
+ "\2\2\u0153T\3\2\2\2\u0154\u0155\4\62;\2\u0155V\3\2\2\2\u0156\u015b\7$"+
+ "\2\2\u0157\u015a\n\5\2\2\u0158\u015a\5e\63\2\u0159\u0157\3\2\2\2\u0159"+
+ "\u0158\3\2\2\2\u015a\u015d\3\2\2\2\u015b\u0159\3\2\2\2\u015b\u015c\3\2"+
+ "\2\2\u015c\u015e\3\2\2\2\u015d\u015b\3\2\2\2\u015e\u015f\7$\2\2\u015f"+
+ "X\3\2\2\2\u0160\u0161\7$\2\2\u0161\u0162\7$\2\2\u0162\u0163\7$\2\2\u0163"+
+ "\u0165\3\2\2\2\u0164\u0166\5[.\2\u0165\u0164\3\2\2\2\u0165\u0166\3\2\2"+
+ "\2\u0166\u0167\3\2\2\2\u0167\u0168\7$\2\2\u0168\u0169\7$\2\2\u0169\u016a"+
+ "\7$\2\2\u016aZ\3\2\2\2\u016b\u016e\5]/\2\u016c\u016e\5_\60\2\u016d\u016b"+
+ "\3\2\2\2\u016d\u016c\3\2\2\2\u016e\u016f\3\2\2\2\u016f\u0170\3\2\2\2\u016f"+
+ "\u016d\3\2\2\2\u0170\\\3\2\2\2\u0171\u0172\7^\2\2\u0172\u0173\7$\2\2\u0173"+
+ "\u0174\7$\2\2\u0174\u0175\7$\2\2\u0175^\3\2\2\2\u0176\u0177\t\6\2\2\u0177"+
+ "`\3\2\2\2\u0178\u017c\7%\2\2\u0179\u017b\n\7\2\2\u017a\u0179\3\2\2\2\u017b"+
+ "\u017e\3\2\2\2\u017c\u017a\3\2\2\2\u017c\u017d\3\2\2\2\u017d\u017f\3\2"+
+ "\2\2\u017e\u017c\3\2\2\2\u017f\u0180\b\61\2\2\u0180b\3\2\2\2\u0181\u0186"+
+ "\5q9\2\u0182\u0186\5m\67\2\u0183\u0186\5k\66\2\u0184\u0186\5o8\2\u0185"+
+ "\u0181\3\2\2\2\u0185\u0182\3\2\2\2\u0185\u0183\3\2\2\2\u0185\u0184\3\2"+
+ "\2\2\u0186\u0187\3\2\2\2\u0187\u0188\b\62\3\2\u0188d\3\2\2\2\u0189\u018c"+
+ "\7^\2\2\u018a\u018d\t\b\2\2\u018b\u018d\5g\64\2\u018c\u018a\3\2\2\2\u018c"+
+ "\u018b\3\2\2\2\u018df\3\2\2\2\u018e\u018f\7w\2\2\u018f\u0190\5i\65\2\u0190"+
+ "\u0191\5i\65\2\u0191\u0192\5i\65\2\u0192\u0193\5i\65\2\u0193h\3\2\2\2"+
+ "\u0194\u0195\t\t\2\2\u0195j\3\2\2\2\u0196\u0197\t\7\2\2\u0197l\3\2\2\2"+
+ "\u0198\u0199\t\n\2\2\u0199n\3\2\2\2\u019a\u019b\7.\2\2\u019bp\3\2\2\2"+
+ "\u019c\u019d\t\13\2\2\u019dr\3\2\2\2\26\2\u00ac\u0126\u012a\u012f\u0136"+
+ "\u0138\u013b\u0145\u0147\u014d\u0152\u0159\u015b\u0165\u016d\u016f\u017c"+
+ "\u0185\u018c\4\2\4\2\b\2\2";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/gen/GraphqlLexer.tokens b/src/main/gen/GraphqlLexer.tokens
index 1975f9ed99..e3f3cb9238 100644
--- a/src/main/gen/GraphqlLexer.tokens
+++ b/src/main/gen/GraphqlLexer.tokens
@@ -15,34 +15,35 @@ T__13=14
T__14=15
T__15=16
T__16=17
-BooleanValue=18
-NullValue=19
-FRAGMENT=20
-QUERY=21
-MUTATION=22
-SUBSCRIPTION=23
-SCHEMA=24
-SCALAR=25
-TYPE=26
-INTERFACE=27
-IMPLEMENTS=28
-ENUM=29
-UNION=30
-INPUT=31
-EXTEND=32
-DIRECTIVE=33
-NAME=34
-IntValue=35
-FloatValue=36
-Sign=37
-IntegerPart=38
-NonZeroDigit=39
-ExponentPart=40
-Digit=41
-StringValue=42
-TripleQuotedStringValue=43
-Comment=44
-Ignored=45
+T__17=18
+BooleanValue=19
+NullValue=20
+FRAGMENT=21
+QUERY=22
+MUTATION=23
+SUBSCRIPTION=24
+SCHEMA=25
+SCALAR=26
+TYPE=27
+INTERFACE=28
+IMPLEMENTS=29
+ENUM=30
+UNION=31
+INPUT=32
+EXTEND=33
+DIRECTIVE=34
+NAME=35
+IntValue=36
+FloatValue=37
+Sign=38
+IntegerPart=39
+NonZeroDigit=40
+ExponentPart=41
+Digit=42
+StringValue=43
+TripleQuotedStringValue=44
+Comment=45
+Ignored=46
'service'=1
'{'=2
'}'=3
@@ -59,20 +60,21 @@ Ignored=45
'@'=14
'!'=15
'&'=16
-'|'=17
-'null'=19
-'fragment'=20
-'query'=21
-'mutation'=22
-'subscription'=23
-'schema'=24
-'scalar'=25
-'type'=26
-'interface'=27
-'implements'=28
-'enum'=29
-'union'=30
-'input'=31
-'extend'=32
-'directive'=33
-'-'=37
+'=>'=17
+'|'=18
+'null'=20
+'fragment'=21
+'query'=22
+'mutation'=23
+'subscription'=24
+'schema'=25
+'scalar'=26
+'type'=27
+'interface'=28
+'implements'=29
+'enum'=30
+'union'=31
+'input'=32
+'extend'=33
+'directive'=34
+'-'=38
diff --git a/src/main/gen/GraphqlListener.java b/src/main/gen/GraphqlListener.java
index 2cd5aa58c2..22764d1f07 100644
--- a/src/main/gen/GraphqlListener.java
+++ b/src/main/gen/GraphqlListener.java
@@ -489,6 +489,26 @@ public interface GraphqlListener extends ParseTreeListener {
* @param ctx the parse tree
*/
void exitFieldDefinition(GraphqlParser.FieldDefinitionContext ctx);
+ /**
+ * Enter a parse tree produced by {@link GraphqlParser#fieldTransformation}.
+ * @param ctx the parse tree
+ */
+ void enterFieldTransformation(GraphqlParser.FieldTransformationContext ctx);
+ /**
+ * Exit a parse tree produced by {@link GraphqlParser#fieldTransformation}.
+ * @param ctx the parse tree
+ */
+ void exitFieldTransformation(GraphqlParser.FieldTransformationContext ctx);
+ /**
+ * Enter a parse tree produced by {@link GraphqlParser#targetFieldDefinition}.
+ * @param ctx the parse tree
+ */
+ void enterTargetFieldDefinition(GraphqlParser.TargetFieldDefinitionContext ctx);
+ /**
+ * Exit a parse tree produced by {@link GraphqlParser#targetFieldDefinition}.
+ * @param ctx the parse tree
+ */
+ void exitTargetFieldDefinition(GraphqlParser.TargetFieldDefinitionContext ctx);
/**
* Enter a parse tree produced by {@link GraphqlParser#argumentsDefinition}.
* @param ctx the parse tree
diff --git a/src/main/gen/GraphqlParser.java b/src/main/gen/GraphqlParser.java
index 7a38ed6010..121d76bd1a 100644
--- a/src/main/gen/GraphqlParser.java
+++ b/src/main/gen/GraphqlParser.java
@@ -21,11 +21,11 @@ public class GraphqlParser extends Parser {
public static final int
T__0=1, T__1=2, T__2=3, T__3=4, T__4=5, T__5=6, T__6=7, T__7=8, T__8=9,
T__9=10, T__10=11, T__11=12, T__12=13, T__13=14, T__14=15, T__15=16, T__16=17,
- BooleanValue=18, NullValue=19, FRAGMENT=20, QUERY=21, MUTATION=22, SUBSCRIPTION=23,
- SCHEMA=24, SCALAR=25, TYPE=26, INTERFACE=27, IMPLEMENTS=28, ENUM=29, UNION=30,
- INPUT=31, EXTEND=32, DIRECTIVE=33, NAME=34, IntValue=35, FloatValue=36,
- Sign=37, IntegerPart=38, NonZeroDigit=39, ExponentPart=40, Digit=41, StringValue=42,
- TripleQuotedStringValue=43, Comment=44, Ignored=45;
+ T__17=18, BooleanValue=19, NullValue=20, FRAGMENT=21, QUERY=22, MUTATION=23,
+ SUBSCRIPTION=24, SCHEMA=25, SCALAR=26, TYPE=27, INTERFACE=28, IMPLEMENTS=29,
+ ENUM=30, UNION=31, INPUT=32, EXTEND=33, DIRECTIVE=34, NAME=35, IntValue=36,
+ FloatValue=37, Sign=38, IntegerPart=39, NonZeroDigit=40, ExponentPart=41,
+ Digit=42, StringValue=43, TripleQuotedStringValue=44, Comment=45, Ignored=46;
public static final int
RULE_document = 0, RULE_definition = 1, RULE_serviceDefinition = 2, RULE_serviceUrl = 3,
RULE_operationDefinition = 4, RULE_operationType = 5, RULE_variableDefinitions = 6,
@@ -41,10 +41,11 @@ public class GraphqlParser extends Parser {
RULE_typeSystemDefinition = 39, RULE_schemaDefinition = 40, RULE_operationTypeDefinition = 41,
RULE_typeDefinition = 42, RULE_scalarTypeDefinition = 43, RULE_objectTypeDefinition = 44,
RULE_implementsInterfaces = 45, RULE_fieldsDefinition = 46, RULE_fieldDefinition = 47,
- RULE_argumentsDefinition = 48, RULE_inputValueDefinition = 49, RULE_interfaceTypeDefinition = 50,
- RULE_unionTypeDefinition = 51, RULE_unionMembers = 52, RULE_enumTypeDefinition = 53,
- RULE_enumValueDefinition = 54, RULE_inputObjectTypeDefinition = 55, RULE_typeExtensionDefinition = 56,
- RULE_directiveDefinition = 57, RULE_directiveLocation = 58, RULE_directiveLocations = 59;
+ RULE_fieldTransformation = 48, RULE_targetFieldDefinition = 49, RULE_argumentsDefinition = 50,
+ RULE_inputValueDefinition = 51, RULE_interfaceTypeDefinition = 52, RULE_unionTypeDefinition = 53,
+ RULE_unionMembers = 54, RULE_enumTypeDefinition = 55, RULE_enumValueDefinition = 56,
+ RULE_inputObjectTypeDefinition = 57, RULE_typeExtensionDefinition = 58,
+ RULE_directiveDefinition = 59, RULE_directiveLocation = 60, RULE_directiveLocations = 61;
public static final String[] ruleNames = {
"document", "definition", "serviceDefinition", "serviceUrl", "operationDefinition",
"operationType", "variableDefinitions", "variableDefinition", "variable",
@@ -56,26 +57,28 @@ public class GraphqlParser extends Parser {
"directives", "directive", "type", "typeName", "listType", "nonNullType",
"typeSystemDefinition", "schemaDefinition", "operationTypeDefinition",
"typeDefinition", "scalarTypeDefinition", "objectTypeDefinition", "implementsInterfaces",
- "fieldsDefinition", "fieldDefinition", "argumentsDefinition", "inputValueDefinition",
- "interfaceTypeDefinition", "unionTypeDefinition", "unionMembers", "enumTypeDefinition",
- "enumValueDefinition", "inputObjectTypeDefinition", "typeExtensionDefinition",
- "directiveDefinition", "directiveLocation", "directiveLocations"
+ "fieldsDefinition", "fieldDefinition", "fieldTransformation", "targetFieldDefinition",
+ "argumentsDefinition", "inputValueDefinition", "interfaceTypeDefinition",
+ "unionTypeDefinition", "unionMembers", "enumTypeDefinition", "enumValueDefinition",
+ "inputObjectTypeDefinition", "typeExtensionDefinition", "directiveDefinition",
+ "directiveLocation", "directiveLocations"
};
private static final String[] _LITERAL_NAMES = {
null, "'service'", "'{'", "'}'", "'url'", "':'", "'('", "')'", "'$'",
- "'='", "'...'", "'on'", "'['", "']'", "'@'", "'!'", "'&'", "'|'", null,
- "'null'", "'fragment'", "'query'", "'mutation'", "'subscription'", "'schema'",
- "'scalar'", "'type'", "'interface'", "'implements'", "'enum'", "'union'",
- "'input'", "'extend'", "'directive'", null, null, null, "'-'"
+ "'='", "'...'", "'on'", "'['", "']'", "'@'", "'!'", "'&'", "'=>'", "'|'",
+ null, "'null'", "'fragment'", "'query'", "'mutation'", "'subscription'",
+ "'schema'", "'scalar'", "'type'", "'interface'", "'implements'", "'enum'",
+ "'union'", "'input'", "'extend'", "'directive'", null, null, null, "'-'"
};
private static final String[] _SYMBOLIC_NAMES = {
null, null, null, null, null, null, null, null, null, null, null, null,
- null, null, null, null, null, null, "BooleanValue", "NullValue", "FRAGMENT",
- "QUERY", "MUTATION", "SUBSCRIPTION", "SCHEMA", "SCALAR", "TYPE", "INTERFACE",
- "IMPLEMENTS", "ENUM", "UNION", "INPUT", "EXTEND", "DIRECTIVE", "NAME",
- "IntValue", "FloatValue", "Sign", "IntegerPart", "NonZeroDigit", "ExponentPart",
- "Digit", "StringValue", "TripleQuotedStringValue", "Comment", "Ignored"
+ null, null, null, null, null, null, null, "BooleanValue", "NullValue",
+ "FRAGMENT", "QUERY", "MUTATION", "SUBSCRIPTION", "SCHEMA", "SCALAR", "TYPE",
+ "INTERFACE", "IMPLEMENTS", "ENUM", "UNION", "INPUT", "EXTEND", "DIRECTIVE",
+ "NAME", "IntValue", "FloatValue", "Sign", "IntegerPart", "NonZeroDigit",
+ "ExponentPart", "Digit", "StringValue", "TripleQuotedStringValue", "Comment",
+ "Ignored"
};
public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES);
@@ -159,17 +162,17 @@ public final DocumentContext document() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(121);
+ setState(125);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(120);
+ setState(124);
definition();
}
}
- setState(123);
+ setState(127);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__0) | (1L << T__1) | (1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
@@ -222,7 +225,7 @@ public final DefinitionContext definition() throws RecognitionException {
DefinitionContext _localctx = new DefinitionContext(_ctx, getState());
enterRule(_localctx, 2, RULE_definition);
try {
- setState(129);
+ setState(133);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__1:
@@ -231,14 +234,14 @@ public final DefinitionContext definition() throws RecognitionException {
case SUBSCRIPTION:
enterOuterAlt(_localctx, 1);
{
- setState(125);
+ setState(129);
operationDefinition();
}
break;
case FRAGMENT:
enterOuterAlt(_localctx, 2);
{
- setState(126);
+ setState(130);
fragmentDefinition();
}
break;
@@ -255,14 +258,14 @@ public final DefinitionContext definition() throws RecognitionException {
case TripleQuotedStringValue:
enterOuterAlt(_localctx, 3);
{
- setState(127);
+ setState(131);
typeSystemDefinition();
}
break;
case T__0:
enterOuterAlt(_localctx, 4);
{
- setState(128);
+ setState(132);
serviceDefinition();
}
break;
@@ -320,29 +323,29 @@ public final ServiceDefinitionContext serviceDefinition() throws RecognitionExce
try {
enterOuterAlt(_localctx, 1);
{
- setState(131);
+ setState(135);
match(T__0);
- setState(132);
+ setState(136);
name();
- setState(133);
+ setState(137);
match(T__1);
- setState(134);
- serviceUrl();
setState(138);
+ serviceUrl();
+ setState(142);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0)) {
{
{
- setState(135);
+ setState(139);
typeSystemDefinition();
}
}
- setState(140);
+ setState(144);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(141);
+ setState(145);
match(T__2);
}
}
@@ -386,11 +389,11 @@ public final ServiceUrlContext serviceUrl() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(143);
+ setState(147);
match(T__3);
- setState(144);
+ setState(148);
match(T__4);
- setState(145);
+ setState(149);
stringValue();
}
}
@@ -445,13 +448,13 @@ public final OperationDefinitionContext operationDefinition() throws Recognition
enterRule(_localctx, 8, RULE_operationDefinition);
int _la;
try {
- setState(160);
+ setState(164);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__1:
enterOuterAlt(_localctx, 1);
{
- setState(147);
+ setState(151);
selectionSet();
}
break;
@@ -460,39 +463,39 @@ public final OperationDefinitionContext operationDefinition() throws Recognition
case SUBSCRIPTION:
enterOuterAlt(_localctx, 2);
{
- setState(148);
+ setState(152);
operationType();
- setState(150);
+ setState(154);
_errHandler.sync(this);
_la = _input.LA(1);
if ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0)) {
{
- setState(149);
+ setState(153);
name();
}
}
- setState(153);
+ setState(157);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(152);
+ setState(156);
variableDefinitions();
}
}
- setState(156);
+ setState(160);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(155);
+ setState(159);
directives();
}
}
- setState(158);
+ setState(162);
selectionSet();
}
break;
@@ -541,7 +544,7 @@ public final OperationTypeContext operationType() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(162);
+ setState(166);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -597,23 +600,23 @@ public final VariableDefinitionsContext variableDefinitions() throws Recognition
try {
enterOuterAlt(_localctx, 1);
{
- setState(164);
+ setState(168);
match(T__5);
- setState(166);
+ setState(170);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(165);
+ setState(169);
variableDefinition();
}
}
- setState(168);
+ setState(172);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==T__7 );
- setState(170);
+ setState(174);
match(T__6);
}
}
@@ -664,18 +667,18 @@ public final VariableDefinitionContext variableDefinition() throws RecognitionEx
try {
enterOuterAlt(_localctx, 1);
{
- setState(172);
+ setState(176);
variable();
- setState(173);
+ setState(177);
match(T__4);
- setState(174);
+ setState(178);
type();
- setState(176);
+ setState(180);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__8) {
{
- setState(175);
+ setState(179);
defaultValue();
}
}
@@ -722,9 +725,9 @@ public final VariableContext variable() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(178);
+ setState(182);
match(T__7);
- setState(179);
+ setState(183);
name();
}
}
@@ -768,9 +771,9 @@ public final DefaultValueContext defaultValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(181);
+ setState(185);
match(T__8);
- setState(182);
+ setState(186);
value();
}
}
@@ -818,23 +821,23 @@ public final SelectionSetContext selectionSet() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(184);
+ setState(188);
match(T__1);
- setState(186);
+ setState(190);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(185);
+ setState(189);
selection();
}
}
- setState(188);
+ setState(192);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__9) | (1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0) );
- setState(190);
+ setState(194);
match(T__2);
}
}
@@ -882,27 +885,27 @@ public final SelectionContext selection() throws RecognitionException {
SelectionContext _localctx = new SelectionContext(_ctx, getState());
enterRule(_localctx, 22, RULE_selection);
try {
- setState(195);
+ setState(199);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(192);
+ setState(196);
field();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(193);
+ setState(197);
fragmentSpread();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(194);
+ setState(198);
inlineFragment();
}
break;
@@ -961,44 +964,44 @@ public final FieldContext field() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(198);
+ setState(202);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) {
case 1:
{
- setState(197);
+ setState(201);
alias();
}
break;
}
- setState(200);
+ setState(204);
name();
- setState(202);
+ setState(206);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(201);
+ setState(205);
arguments();
}
}
- setState(205);
+ setState(209);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(204);
+ setState(208);
directives();
}
}
- setState(208);
+ setState(212);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__1) {
{
- setState(207);
+ setState(211);
selectionSet();
}
}
@@ -1045,9 +1048,9 @@ public final AliasContext alias() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(210);
+ setState(214);
name();
- setState(211);
+ setState(215);
match(T__4);
}
}
@@ -1095,23 +1098,23 @@ public final ArgumentsContext arguments() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(213);
+ setState(217);
match(T__5);
- setState(215);
+ setState(219);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(214);
+ setState(218);
argument();
}
}
- setState(217);
+ setState(221);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0) );
- setState(219);
+ setState(223);
match(T__6);
}
}
@@ -1158,11 +1161,11 @@ public final ArgumentContext argument() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(221);
+ setState(225);
name();
- setState(222);
+ setState(226);
match(T__4);
- setState(223);
+ setState(227);
valueWithVariable();
}
}
@@ -1210,16 +1213,16 @@ public final FragmentSpreadContext fragmentSpread() throws RecognitionException
try {
enterOuterAlt(_localctx, 1);
{
- setState(225);
+ setState(229);
match(T__9);
- setState(226);
+ setState(230);
fragmentName();
- setState(228);
+ setState(232);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(227);
+ setState(231);
directives();
}
}
@@ -1273,29 +1276,29 @@ public final InlineFragmentContext inlineFragment() throws RecognitionException
try {
enterOuterAlt(_localctx, 1);
{
- setState(230);
+ setState(234);
match(T__9);
- setState(232);
+ setState(236);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__10) {
{
- setState(231);
+ setState(235);
typeCondition();
}
}
- setState(235);
+ setState(239);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(234);
+ setState(238);
directives();
}
}
- setState(237);
+ setState(241);
selectionSet();
}
}
@@ -1349,23 +1352,23 @@ public final FragmentDefinitionContext fragmentDefinition() throws RecognitionEx
try {
enterOuterAlt(_localctx, 1);
{
- setState(239);
+ setState(243);
match(FRAGMENT);
- setState(240);
+ setState(244);
fragmentName();
- setState(241);
+ setState(245);
typeCondition();
- setState(243);
+ setState(247);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(242);
+ setState(246);
directives();
}
}
- setState(245);
+ setState(249);
selectionSet();
}
}
@@ -1409,7 +1412,7 @@ public final FragmentNameContext fragmentName() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(247);
+ setState(251);
name();
}
}
@@ -1453,9 +1456,9 @@ public final TypeConditionContext typeCondition() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(249);
+ setState(253);
match(T__10);
- setState(250);
+ setState(254);
typeName();
}
}
@@ -1512,7 +1515,7 @@ public final NameContext name() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(252);
+ setState(256);
_la = _input.LA(1);
if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0)) ) {
_errHandler.recoverInline(this);
@@ -1575,42 +1578,42 @@ public final ValueContext value() throws RecognitionException {
ValueContext _localctx = new ValueContext(_ctx, getState());
enterRule(_localctx, 44, RULE_value);
try {
- setState(262);
+ setState(266);
_errHandler.sync(this);
switch (_input.LA(1)) {
case StringValue:
case TripleQuotedStringValue:
enterOuterAlt(_localctx, 1);
{
- setState(254);
+ setState(258);
stringValue();
}
break;
case IntValue:
enterOuterAlt(_localctx, 2);
{
- setState(255);
+ setState(259);
match(IntValue);
}
break;
case FloatValue:
enterOuterAlt(_localctx, 3);
{
- setState(256);
+ setState(260);
match(FloatValue);
}
break;
case BooleanValue:
enterOuterAlt(_localctx, 4);
{
- setState(257);
+ setState(261);
match(BooleanValue);
}
break;
case NullValue:
enterOuterAlt(_localctx, 5);
{
- setState(258);
+ setState(262);
match(NullValue);
}
break;
@@ -1631,21 +1634,21 @@ public final ValueContext value() throws RecognitionException {
case NAME:
enterOuterAlt(_localctx, 6);
{
- setState(259);
+ setState(263);
enumValue();
}
break;
case T__11:
enterOuterAlt(_localctx, 7);
{
- setState(260);
+ setState(264);
arrayValue();
}
break;
case T__1:
enterOuterAlt(_localctx, 8);
{
- setState(261);
+ setState(265);
objectValue();
}
break;
@@ -1707,13 +1710,13 @@ public final ValueWithVariableContext valueWithVariable() throws RecognitionExce
ValueWithVariableContext _localctx = new ValueWithVariableContext(_ctx, getState());
enterRule(_localctx, 46, RULE_valueWithVariable);
try {
- setState(273);
+ setState(277);
_errHandler.sync(this);
switch (_input.LA(1)) {
case T__7:
enterOuterAlt(_localctx, 1);
{
- setState(264);
+ setState(268);
variable();
}
break;
@@ -1721,35 +1724,35 @@ public final ValueWithVariableContext valueWithVariable() throws RecognitionExce
case TripleQuotedStringValue:
enterOuterAlt(_localctx, 2);
{
- setState(265);
+ setState(269);
stringValue();
}
break;
case IntValue:
enterOuterAlt(_localctx, 3);
{
- setState(266);
+ setState(270);
match(IntValue);
}
break;
case FloatValue:
enterOuterAlt(_localctx, 4);
{
- setState(267);
+ setState(271);
match(FloatValue);
}
break;
case BooleanValue:
enterOuterAlt(_localctx, 5);
{
- setState(268);
+ setState(272);
match(BooleanValue);
}
break;
case NullValue:
enterOuterAlt(_localctx, 6);
{
- setState(269);
+ setState(273);
match(NullValue);
}
break;
@@ -1770,21 +1773,21 @@ public final ValueWithVariableContext valueWithVariable() throws RecognitionExce
case NAME:
enterOuterAlt(_localctx, 7);
{
- setState(270);
+ setState(274);
enumValue();
}
break;
case T__11:
enterOuterAlt(_localctx, 8);
{
- setState(271);
+ setState(275);
arrayValueWithVariable();
}
break;
case T__1:
enterOuterAlt(_localctx, 9);
{
- setState(272);
+ setState(276);
objectValueWithVariable();
}
break;
@@ -1832,7 +1835,7 @@ public final StringValueContext stringValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(275);
+ setState(279);
_la = _input.LA(1);
if ( !(_la==StringValue || _la==TripleQuotedStringValue) ) {
_errHandler.recoverInline(this);
@@ -1884,7 +1887,7 @@ public final DescriptionContext description() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(277);
+ setState(281);
stringValue();
}
}
@@ -1928,7 +1931,7 @@ public final EnumValueContext enumValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(279);
+ setState(283);
name();
}
}
@@ -1976,23 +1979,23 @@ public final ArrayValueContext arrayValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(281);
- match(T__11);
setState(285);
+ match(T__11);
+ setState(289);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__11) | (1L << BooleanValue) | (1L << NullValue) | (1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << IntValue) | (1L << FloatValue) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0)) {
{
{
- setState(282);
+ setState(286);
value();
}
}
- setState(287);
+ setState(291);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(288);
+ setState(292);
match(T__12);
}
}
@@ -2040,23 +2043,23 @@ public final ArrayValueWithVariableContext arrayValueWithVariable() throws Recog
try {
enterOuterAlt(_localctx, 1);
{
- setState(290);
- match(T__11);
setState(294);
+ match(T__11);
+ setState(298);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << T__1) | (1L << T__7) | (1L << T__11) | (1L << BooleanValue) | (1L << NullValue) | (1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << IntValue) | (1L << FloatValue) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0)) {
{
{
- setState(291);
+ setState(295);
valueWithVariable();
}
}
- setState(296);
+ setState(300);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(297);
+ setState(301);
match(T__12);
}
}
@@ -2104,23 +2107,23 @@ public final ObjectValueContext objectValue() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(299);
- match(T__1);
setState(303);
+ match(T__1);
+ setState(307);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0)) {
{
{
- setState(300);
+ setState(304);
objectField();
}
}
- setState(305);
+ setState(309);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(306);
+ setState(310);
match(T__2);
}
}
@@ -2168,23 +2171,23 @@ public final ObjectValueWithVariableContext objectValueWithVariable() throws Rec
try {
enterOuterAlt(_localctx, 1);
{
- setState(308);
- match(T__1);
setState(312);
+ match(T__1);
+ setState(316);
_errHandler.sync(this);
_la = _input.LA(1);
while ((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME))) != 0)) {
{
{
- setState(309);
+ setState(313);
objectFieldWithVariable();
}
}
- setState(314);
+ setState(318);
_errHandler.sync(this);
_la = _input.LA(1);
}
- setState(315);
+ setState(319);
match(T__2);
}
}
@@ -2231,11 +2234,11 @@ public final ObjectFieldContext objectField() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(317);
+ setState(321);
name();
- setState(318);
+ setState(322);
match(T__4);
- setState(319);
+ setState(323);
value();
}
}
@@ -2282,11 +2285,11 @@ public final ObjectFieldWithVariableContext objectFieldWithVariable() throws Rec
try {
enterOuterAlt(_localctx, 1);
{
- setState(321);
+ setState(325);
name();
- setState(322);
+ setState(326);
match(T__4);
- setState(323);
+ setState(327);
valueWithVariable();
}
}
@@ -2334,17 +2337,17 @@ public final DirectivesContext directives() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(326);
+ setState(330);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(325);
+ setState(329);
directive();
}
}
- setState(328);
+ setState(332);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( _la==T__13 );
@@ -2394,16 +2397,16 @@ public final DirectiveContext directive() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(330);
+ setState(334);
match(T__13);
- setState(331);
+ setState(335);
name();
- setState(333);
+ setState(337);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(332);
+ setState(336);
arguments();
}
}
@@ -2454,27 +2457,27 @@ public final TypeContext type() throws RecognitionException {
TypeContext _localctx = new TypeContext(_ctx, getState());
enterRule(_localctx, 70, RULE_type);
try {
- setState(338);
+ setState(342);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(335);
+ setState(339);
typeName();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(336);
+ setState(340);
listType();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(337);
+ setState(341);
nonNullType();
}
break;
@@ -2520,7 +2523,7 @@ public final TypeNameContext typeName() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(340);
+ setState(344);
name();
}
}
@@ -2564,11 +2567,11 @@ public final ListTypeContext listType() throws RecognitionException {
try {
enterOuterAlt(_localctx, 1);
{
- setState(342);
+ setState(346);
match(T__11);
- setState(343);
+ setState(347);
type();
- setState(344);
+ setState(348);
match(T__12);
}
}
@@ -2613,7 +2616,7 @@ public final NonNullTypeContext nonNullType() throws RecognitionException {
NonNullTypeContext _localctx = new NonNullTypeContext(_ctx, getState());
enterRule(_localctx, 76, RULE_nonNullType);
try {
- setState(352);
+ setState(356);
_errHandler.sync(this);
switch (_input.LA(1)) {
case FRAGMENT:
@@ -2633,18 +2636,18 @@ public final NonNullTypeContext nonNullType() throws RecognitionException {
case NAME:
enterOuterAlt(_localctx, 1);
{
- setState(346);
+ setState(350);
typeName();
- setState(347);
+ setState(351);
match(T__14);
}
break;
case T__11:
enterOuterAlt(_localctx, 2);
{
- setState(349);
+ setState(353);
listType();
- setState(350);
+ setState(354);
match(T__14);
}
break;
@@ -2702,44 +2705,44 @@ public final TypeSystemDefinitionContext typeSystemDefinition() throws Recogniti
TypeSystemDefinitionContext _localctx = new TypeSystemDefinitionContext(_ctx, getState());
enterRule(_localctx, 78, RULE_typeSystemDefinition);
try {
- setState(361);
+ setState(365);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,31,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(355);
+ setState(359);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) {
case 1:
{
- setState(354);
+ setState(358);
description();
}
break;
}
- setState(357);
+ setState(361);
schemaDefinition();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(358);
+ setState(362);
typeDefinition();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(359);
+ setState(363);
typeExtensionDefinition();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(360);
+ setState(364);
directiveDefinition();
}
break;
@@ -2796,45 +2799,45 @@ public final SchemaDefinitionContext schemaDefinition() throws RecognitionExcept
try {
enterOuterAlt(_localctx, 1);
{
- setState(364);
+ setState(368);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(363);
+ setState(367);
description();
}
}
- setState(366);
+ setState(370);
match(SCHEMA);
- setState(368);
+ setState(372);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(367);
+ setState(371);
directives();
}
}
- setState(370);
+ setState(374);
match(T__1);
- setState(372);
+ setState(376);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(371);
+ setState(375);
operationTypeDefinition();
}
}
- setState(374);
+ setState(378);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(376);
+ setState(380);
match(T__2);
}
}
@@ -2885,21 +2888,21 @@ public final OperationTypeDefinitionContext operationTypeDefinition() throws Rec
try {
enterOuterAlt(_localctx, 1);
{
- setState(379);
+ setState(383);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(378);
+ setState(382);
description();
}
}
- setState(381);
+ setState(385);
operationType();
- setState(382);
+ setState(386);
match(T__4);
- setState(383);
+ setState(387);
typeName();
}
}
@@ -2956,48 +2959,48 @@ public final TypeDefinitionContext typeDefinition() throws RecognitionException
TypeDefinitionContext _localctx = new TypeDefinitionContext(_ctx, getState());
enterRule(_localctx, 84, RULE_typeDefinition);
try {
- setState(391);
+ setState(395);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) {
case 1:
enterOuterAlt(_localctx, 1);
{
- setState(385);
+ setState(389);
scalarTypeDefinition();
}
break;
case 2:
enterOuterAlt(_localctx, 2);
{
- setState(386);
+ setState(390);
objectTypeDefinition();
}
break;
case 3:
enterOuterAlt(_localctx, 3);
{
- setState(387);
+ setState(391);
interfaceTypeDefinition();
}
break;
case 4:
enterOuterAlt(_localctx, 4);
{
- setState(388);
+ setState(392);
unionTypeDefinition();
}
break;
case 5:
enterOuterAlt(_localctx, 5);
{
- setState(389);
+ setState(393);
enumTypeDefinition();
}
break;
case 6:
enterOuterAlt(_localctx, 6);
{
- setState(390);
+ setState(394);
inputObjectTypeDefinition();
}
break;
@@ -3051,26 +3054,26 @@ public final ScalarTypeDefinitionContext scalarTypeDefinition() throws Recogniti
try {
enterOuterAlt(_localctx, 1);
{
- setState(394);
+ setState(398);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(393);
+ setState(397);
description();
}
}
- setState(396);
+ setState(400);
match(SCALAR);
- setState(397);
+ setState(401);
name();
- setState(399);
+ setState(403);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(398);
+ setState(402);
directives();
}
}
@@ -3131,46 +3134,46 @@ public final ObjectTypeDefinitionContext objectTypeDefinition() throws Recogniti
try {
enterOuterAlt(_localctx, 1);
{
- setState(402);
+ setState(406);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(401);
+ setState(405);
description();
}
}
- setState(404);
+ setState(408);
match(TYPE);
- setState(405);
+ setState(409);
name();
- setState(407);
+ setState(411);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==IMPLEMENTS) {
{
- setState(406);
+ setState(410);
implementsInterfaces(0);
}
}
- setState(410);
+ setState(414);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(409);
+ setState(413);
directives();
}
}
- setState(413);
+ setState(417);
_errHandler.sync(this);
switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) {
case 1:
{
- setState(412);
+ setState(416);
fieldsDefinition();
}
break;
@@ -3235,19 +3238,19 @@ private ImplementsInterfacesContext implementsInterfaces(int _p) throws Recognit
enterOuterAlt(_localctx, 1);
{
{
- setState(416);
+ setState(420);
match(IMPLEMENTS);
- setState(418);
+ setState(422);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__15) {
{
- setState(417);
+ setState(421);
match(T__15);
}
}
- setState(421);
+ setState(425);
_errHandler.sync(this);
_alt = 1;
do {
@@ -3255,7 +3258,7 @@ private ImplementsInterfacesContext implementsInterfaces(int _p) throws Recognit
case 1:
{
{
- setState(420);
+ setState(424);
typeName();
}
}
@@ -3263,13 +3266,13 @@ private ImplementsInterfacesContext implementsInterfaces(int _p) throws Recognit
default:
throw new NoViableAltException(this);
}
- setState(423);
+ setState(427);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,44,_ctx);
} while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER );
}
_ctx.stop = _input.LT(-1);
- setState(430);
+ setState(434);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,45,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
@@ -3280,16 +3283,16 @@ private ImplementsInterfacesContext implementsInterfaces(int _p) throws Recognit
{
_localctx = new ImplementsInterfacesContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_implementsInterfaces);
- setState(425);
+ setState(429);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(426);
+ setState(430);
match(T__15);
- setState(427);
+ setState(431);
typeName();
}
}
}
- setState(432);
+ setState(436);
_errHandler.sync(this);
_alt = getInterpreter().adaptivePredict(_input,45,_ctx);
}
@@ -3339,23 +3342,23 @@ public final FieldsDefinitionContext fieldsDefinition() throws RecognitionExcept
try {
enterOuterAlt(_localctx, 1);
{
- setState(433);
+ setState(437);
match(T__1);
- setState(435);
+ setState(439);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(434);
+ setState(438);
fieldDefinition();
}
}
- setState(437);
+ setState(441);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(439);
+ setState(443);
match(T__2);
}
}
@@ -3383,6 +3386,9 @@ public DescriptionContext description() {
public ArgumentsDefinitionContext argumentsDefinition() {
return getRuleContext(ArgumentsDefinitionContext.class,0);
}
+ public FieldTransformationContext fieldTransformation() {
+ return getRuleContext(FieldTransformationContext.class,0);
+ }
public DirectivesContext directives() {
return getRuleContext(DirectivesContext.class,0);
}
@@ -3412,38 +3418,48 @@ public final FieldDefinitionContext fieldDefinition() throws RecognitionExceptio
try {
enterOuterAlt(_localctx, 1);
{
- setState(442);
+ setState(446);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(441);
+ setState(445);
description();
}
}
- setState(444);
+ setState(448);
name();
- setState(446);
+ setState(450);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(445);
+ setState(449);
argumentsDefinition();
}
}
- setState(448);
+ setState(452);
match(T__4);
- setState(449);
+ setState(453);
type();
- setState(451);
+ setState(455);
+ _errHandler.sync(this);
+ _la = _input.LA(1);
+ if (_la==T__16) {
+ {
+ setState(454);
+ fieldTransformation();
+ }
+ }
+
+ setState(458);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(450);
+ setState(457);
directives();
}
}
@@ -3461,6 +3477,103 @@ public final FieldDefinitionContext fieldDefinition() throws RecognitionExceptio
return _localctx;
}
+ public static class FieldTransformationContext extends ParserRuleContext {
+ public TargetFieldDefinitionContext targetFieldDefinition() {
+ return getRuleContext(TargetFieldDefinitionContext.class,0);
+ }
+ public FieldTransformationContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_fieldTransformation; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterFieldTransformation(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFieldTransformation(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitFieldTransformation(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final FieldTransformationContext fieldTransformation() throws RecognitionException {
+ FieldTransformationContext _localctx = new FieldTransformationContext(_ctx, getState());
+ enterRule(_localctx, 96, RULE_fieldTransformation);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(460);
+ match(T__16);
+ setState(461);
+ targetFieldDefinition();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
+ public static class TargetFieldDefinitionContext extends ParserRuleContext {
+ public NameContext name() {
+ return getRuleContext(NameContext.class,0);
+ }
+ public TypeContext type() {
+ return getRuleContext(TypeContext.class,0);
+ }
+ public TargetFieldDefinitionContext(ParserRuleContext parent, int invokingState) {
+ super(parent, invokingState);
+ }
+ @Override public int getRuleIndex() { return RULE_targetFieldDefinition; }
+ @Override
+ public void enterRule(ParseTreeListener listener) {
+ if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterTargetFieldDefinition(this);
+ }
+ @Override
+ public void exitRule(ParseTreeListener listener) {
+ if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTargetFieldDefinition(this);
+ }
+ @Override
+ public T accept(ParseTreeVisitor extends T> visitor) {
+ if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor extends T>)visitor).visitTargetFieldDefinition(this);
+ else return visitor.visitChildren(this);
+ }
+ }
+
+ public final TargetFieldDefinitionContext targetFieldDefinition() throws RecognitionException {
+ TargetFieldDefinitionContext _localctx = new TargetFieldDefinitionContext(_ctx, getState());
+ enterRule(_localctx, 98, RULE_targetFieldDefinition);
+ try {
+ enterOuterAlt(_localctx, 1);
+ {
+ setState(463);
+ name();
+ setState(464);
+ match(T__4);
+ setState(465);
+ type();
+ }
+ }
+ catch (RecognitionException re) {
+ _localctx.exception = re;
+ _errHandler.reportError(this, re);
+ _errHandler.recover(this, re);
+ }
+ finally {
+ exitRule();
+ }
+ return _localctx;
+ }
+
public static class ArgumentsDefinitionContext extends ParserRuleContext {
public List inputValueDefinition() {
return getRuleContexts(InputValueDefinitionContext.class);
@@ -3489,28 +3602,28 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final ArgumentsDefinitionContext argumentsDefinition() throws RecognitionException {
ArgumentsDefinitionContext _localctx = new ArgumentsDefinitionContext(_ctx, getState());
- enterRule(_localctx, 96, RULE_argumentsDefinition);
+ enterRule(_localctx, 100, RULE_argumentsDefinition);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(453);
+ setState(467);
match(T__5);
- setState(455);
+ setState(469);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(454);
+ setState(468);
inputValueDefinition();
}
}
- setState(457);
+ setState(471);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(459);
+ setState(473);
match(T__6);
}
}
@@ -3562,43 +3675,43 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final InputValueDefinitionContext inputValueDefinition() throws RecognitionException {
InputValueDefinitionContext _localctx = new InputValueDefinitionContext(_ctx, getState());
- enterRule(_localctx, 98, RULE_inputValueDefinition);
+ enterRule(_localctx, 102, RULE_inputValueDefinition);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(462);
+ setState(476);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(461);
+ setState(475);
description();
}
}
- setState(464);
+ setState(478);
name();
- setState(465);
+ setState(479);
match(T__4);
- setState(466);
+ setState(480);
type();
- setState(468);
+ setState(482);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__8) {
{
- setState(467);
+ setState(481);
defaultValue();
}
}
- setState(471);
+ setState(485);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(470);
+ setState(484);
directives();
}
}
@@ -3654,52 +3767,52 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final InterfaceTypeDefinitionContext interfaceTypeDefinition() throws RecognitionException {
InterfaceTypeDefinitionContext _localctx = new InterfaceTypeDefinitionContext(_ctx, getState());
- enterRule(_localctx, 100, RULE_interfaceTypeDefinition);
+ enterRule(_localctx, 104, RULE_interfaceTypeDefinition);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(474);
+ setState(488);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(473);
+ setState(487);
description();
}
}
- setState(476);
+ setState(490);
match(INTERFACE);
- setState(477);
+ setState(491);
name();
- setState(479);
+ setState(493);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(478);
+ setState(492);
directives();
}
}
- setState(481);
+ setState(495);
match(T__1);
- setState(483);
+ setState(497);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(482);
+ setState(496);
fieldDefinition();
}
}
- setState(485);
+ setState(499);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(487);
+ setState(501);
match(T__2);
}
}
@@ -3749,38 +3862,38 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final UnionTypeDefinitionContext unionTypeDefinition() throws RecognitionException {
UnionTypeDefinitionContext _localctx = new UnionTypeDefinitionContext(_ctx, getState());
- enterRule(_localctx, 102, RULE_unionTypeDefinition);
+ enterRule(_localctx, 106, RULE_unionTypeDefinition);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(490);
+ setState(504);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(489);
+ setState(503);
description();
}
}
- setState(492);
+ setState(506);
match(UNION);
- setState(493);
+ setState(507);
name();
- setState(495);
+ setState(509);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(494);
+ setState(508);
directives();
}
}
- setState(497);
+ setState(511);
match(T__8);
- setState(498);
+ setState(512);
unionMembers(0);
}
}
@@ -3830,20 +3943,20 @@ private UnionMembersContext unionMembers(int _p) throws RecognitionException {
int _parentState = getState();
UnionMembersContext _localctx = new UnionMembersContext(_ctx, _parentState);
UnionMembersContext _prevctx = _localctx;
- int _startState = 104;
- enterRecursionRule(_localctx, 104, RULE_unionMembers, _p);
+ int _startState = 108;
+ enterRecursionRule(_localctx, 108, RULE_unionMembers, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(501);
+ setState(515);
typeName();
}
_ctx.stop = _input.LT(-1);
- setState(508);
+ setState(522);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,59,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,60,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -3852,18 +3965,18 @@ private UnionMembersContext unionMembers(int _p) throws RecognitionException {
{
_localctx = new UnionMembersContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_unionMembers);
- setState(503);
+ setState(517);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(504);
- match(T__16);
- setState(505);
+ setState(518);
+ match(T__17);
+ setState(519);
typeName();
}
}
}
- setState(510);
+ setState(524);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,59,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,60,_ctx);
}
}
}
@@ -3916,52 +4029,52 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final EnumTypeDefinitionContext enumTypeDefinition() throws RecognitionException {
EnumTypeDefinitionContext _localctx = new EnumTypeDefinitionContext(_ctx, getState());
- enterRule(_localctx, 106, RULE_enumTypeDefinition);
+ enterRule(_localctx, 110, RULE_enumTypeDefinition);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(512);
+ setState(526);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(511);
+ setState(525);
description();
}
}
- setState(514);
+ setState(528);
match(ENUM);
- setState(515);
+ setState(529);
name();
- setState(517);
+ setState(531);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(516);
+ setState(530);
directives();
}
}
- setState(519);
+ setState(533);
match(T__1);
- setState(521);
+ setState(535);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(520);
+ setState(534);
enumValueDefinition();
}
}
- setState(523);
+ setState(537);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(525);
+ setState(539);
match(T__2);
}
}
@@ -4007,29 +4120,29 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final EnumValueDefinitionContext enumValueDefinition() throws RecognitionException {
EnumValueDefinitionContext _localctx = new EnumValueDefinitionContext(_ctx, getState());
- enterRule(_localctx, 108, RULE_enumValueDefinition);
+ enterRule(_localctx, 112, RULE_enumValueDefinition);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(528);
+ setState(542);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(527);
+ setState(541);
description();
}
}
- setState(530);
+ setState(544);
enumValue();
- setState(532);
+ setState(546);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(531);
+ setState(545);
directives();
}
}
@@ -4085,52 +4198,52 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final InputObjectTypeDefinitionContext inputObjectTypeDefinition() throws RecognitionException {
InputObjectTypeDefinitionContext _localctx = new InputObjectTypeDefinitionContext(_ctx, getState());
- enterRule(_localctx, 110, RULE_inputObjectTypeDefinition);
+ enterRule(_localctx, 114, RULE_inputObjectTypeDefinition);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(535);
+ setState(549);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(534);
+ setState(548);
description();
}
}
- setState(537);
+ setState(551);
match(INPUT);
- setState(538);
+ setState(552);
name();
- setState(540);
+ setState(554);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__13) {
{
- setState(539);
+ setState(553);
directives();
}
}
- setState(542);
+ setState(556);
match(T__1);
- setState(544);
+ setState(558);
_errHandler.sync(this);
_la = _input.LA(1);
do {
{
{
- setState(543);
+ setState(557);
inputValueDefinition();
}
}
- setState(546);
+ setState(560);
_errHandler.sync(this);
_la = _input.LA(1);
} while ( (((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << FRAGMENT) | (1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION) | (1L << SCHEMA) | (1L << SCALAR) | (1L << TYPE) | (1L << INTERFACE) | (1L << IMPLEMENTS) | (1L << ENUM) | (1L << UNION) | (1L << INPUT) | (1L << EXTEND) | (1L << DIRECTIVE) | (1L << NAME) | (1L << StringValue) | (1L << TripleQuotedStringValue))) != 0) );
- setState(548);
+ setState(562);
match(T__2);
}
}
@@ -4171,13 +4284,13 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final TypeExtensionDefinitionContext typeExtensionDefinition() throws RecognitionException {
TypeExtensionDefinitionContext _localctx = new TypeExtensionDefinitionContext(_ctx, getState());
- enterRule(_localctx, 112, RULE_typeExtensionDefinition);
+ enterRule(_localctx, 116, RULE_typeExtensionDefinition);
try {
enterOuterAlt(_localctx, 1);
{
- setState(550);
+ setState(564);
match(EXTEND);
- setState(551);
+ setState(565);
objectTypeDefinition();
}
}
@@ -4227,40 +4340,40 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final DirectiveDefinitionContext directiveDefinition() throws RecognitionException {
DirectiveDefinitionContext _localctx = new DirectiveDefinitionContext(_ctx, getState());
- enterRule(_localctx, 114, RULE_directiveDefinition);
+ enterRule(_localctx, 118, RULE_directiveDefinition);
int _la;
try {
enterOuterAlt(_localctx, 1);
{
- setState(554);
+ setState(568);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==StringValue || _la==TripleQuotedStringValue) {
{
- setState(553);
+ setState(567);
description();
}
}
- setState(556);
+ setState(570);
match(DIRECTIVE);
- setState(557);
+ setState(571);
match(T__13);
- setState(558);
+ setState(572);
name();
- setState(560);
+ setState(574);
_errHandler.sync(this);
_la = _input.LA(1);
if (_la==T__5) {
{
- setState(559);
+ setState(573);
argumentsDefinition();
}
}
- setState(562);
+ setState(576);
match(T__10);
- setState(563);
+ setState(577);
directiveLocations(0);
}
}
@@ -4300,11 +4413,11 @@ public T accept(ParseTreeVisitor extends T> visitor) {
public final DirectiveLocationContext directiveLocation() throws RecognitionException {
DirectiveLocationContext _localctx = new DirectiveLocationContext(_ctx, getState());
- enterRule(_localctx, 116, RULE_directiveLocation);
+ enterRule(_localctx, 120, RULE_directiveLocation);
try {
enterOuterAlt(_localctx, 1);
{
- setState(565);
+ setState(579);
name();
}
}
@@ -4354,20 +4467,20 @@ private DirectiveLocationsContext directiveLocations(int _p) throws RecognitionE
int _parentState = getState();
DirectiveLocationsContext _localctx = new DirectiveLocationsContext(_ctx, _parentState);
DirectiveLocationsContext _prevctx = _localctx;
- int _startState = 118;
- enterRecursionRule(_localctx, 118, RULE_directiveLocations, _p);
+ int _startState = 122;
+ enterRecursionRule(_localctx, 122, RULE_directiveLocations, _p);
try {
int _alt;
enterOuterAlt(_localctx, 1);
{
{
- setState(568);
+ setState(582);
directiveLocation();
}
_ctx.stop = _input.LT(-1);
- setState(575);
+ setState(589);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,70,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,71,_ctx);
while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) {
if ( _alt==1 ) {
if ( _parseListeners!=null ) triggerExitRuleEvent();
@@ -4376,18 +4489,18 @@ private DirectiveLocationsContext directiveLocations(int _p) throws RecognitionE
{
_localctx = new DirectiveLocationsContext(_parentctx, _parentState);
pushNewRecursionContext(_localctx, _startState, RULE_directiveLocations);
- setState(570);
+ setState(584);
if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)");
- setState(571);
- match(T__16);
- setState(572);
+ setState(585);
+ match(T__17);
+ setState(586);
directiveLocation();
}
}
}
- setState(577);
+ setState(591);
_errHandler.sync(this);
- _alt = getInterpreter().adaptivePredict(_input,70,_ctx);
+ _alt = getInterpreter().adaptivePredict(_input,71,_ctx);
}
}
}
@@ -4406,9 +4519,9 @@ public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) {
switch (ruleIndex) {
case 45:
return implementsInterfaces_sempred((ImplementsInterfacesContext)_localctx, predIndex);
- case 52:
+ case 54:
return unionMembers_sempred((UnionMembersContext)_localctx, predIndex);
- case 59:
+ case 61:
return directiveLocations_sempred((DirectiveLocationsContext)_localctx, predIndex);
}
return true;
@@ -4436,222 +4549,226 @@ private boolean directiveLocations_sempred(DirectiveLocationsContext _localctx,
}
public static final String _serializedATN =
- "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3/\u0245\4\2\t\2\4"+
- "\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13\t"+
- "\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
+ "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3\60\u0253\4\2\t\2"+
+ "\4\3\t\3\4\4\t\4\4\5\t\5\4\6\t\6\4\7\t\7\4\b\t\b\4\t\t\t\4\n\t\n\4\13"+
+ "\t\13\4\f\t\f\4\r\t\r\4\16\t\16\4\17\t\17\4\20\t\20\4\21\t\21\4\22\t\22"+
"\4\23\t\23\4\24\t\24\4\25\t\25\4\26\t\26\4\27\t\27\4\30\t\30\4\31\t\31"+
"\4\32\t\32\4\33\t\33\4\34\t\34\4\35\t\35\4\36\t\36\4\37\t\37\4 \t \4!"+
"\t!\4\"\t\"\4#\t#\4$\t$\4%\t%\4&\t&\4\'\t\'\4(\t(\4)\t)\4*\t*\4+\t+\4"+
",\t,\4-\t-\4.\t.\4/\t/\4\60\t\60\4\61\t\61\4\62\t\62\4\63\t\63\4\64\t"+
"\64\4\65\t\65\4\66\t\66\4\67\t\67\48\t8\49\t9\4:\t:\4;\t;\4<\t<\4=\t="+
- "\3\2\6\2|\n\2\r\2\16\2}\3\3\3\3\3\3\3\3\5\3\u0084\n\3\3\4\3\4\3\4\3\4"+
- "\3\4\7\4\u008b\n\4\f\4\16\4\u008e\13\4\3\4\3\4\3\5\3\5\3\5\3\5\3\6\3\6"+
- "\3\6\5\6\u0099\n\6\3\6\5\6\u009c\n\6\3\6\5\6\u009f\n\6\3\6\3\6\5\6\u00a3"+
- "\n\6\3\7\3\7\3\b\3\b\6\b\u00a9\n\b\r\b\16\b\u00aa\3\b\3\b\3\t\3\t\3\t"+
- "\3\t\5\t\u00b3\n\t\3\n\3\n\3\n\3\13\3\13\3\13\3\f\3\f\6\f\u00bd\n\f\r"+
- "\f\16\f\u00be\3\f\3\f\3\r\3\r\3\r\5\r\u00c6\n\r\3\16\5\16\u00c9\n\16\3"+
- "\16\3\16\5\16\u00cd\n\16\3\16\5\16\u00d0\n\16\3\16\5\16\u00d3\n\16\3\17"+
- "\3\17\3\17\3\20\3\20\6\20\u00da\n\20\r\20\16\20\u00db\3\20\3\20\3\21\3"+
- "\21\3\21\3\21\3\22\3\22\3\22\5\22\u00e7\n\22\3\23\3\23\5\23\u00eb\n\23"+
- "\3\23\5\23\u00ee\n\23\3\23\3\23\3\24\3\24\3\24\3\24\5\24\u00f6\n\24\3"+
- "\24\3\24\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30\3\30\3\30\3\30\3"+
- "\30\3\30\3\30\5\30\u0109\n\30\3\31\3\31\3\31\3\31\3\31\3\31\3\31\3\31"+
- "\3\31\5\31\u0114\n\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35\3\35\7\35\u011e"+
- "\n\35\f\35\16\35\u0121\13\35\3\35\3\35\3\36\3\36\7\36\u0127\n\36\f\36"+
- "\16\36\u012a\13\36\3\36\3\36\3\37\3\37\7\37\u0130\n\37\f\37\16\37\u0133"+
- "\13\37\3\37\3\37\3 \3 \7 \u0139\n \f \16 \u013c\13 \3 \3 \3!\3!\3!\3!"+
- "\3\"\3\"\3\"\3\"\3#\6#\u0149\n#\r#\16#\u014a\3$\3$\3$\5$\u0150\n$\3%\3"+
- "%\3%\5%\u0155\n%\3&\3&\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3(\3(\5(\u0163\n(\3"+
- ")\5)\u0166\n)\3)\3)\3)\3)\5)\u016c\n)\3*\5*\u016f\n*\3*\3*\5*\u0173\n"+
- "*\3*\3*\6*\u0177\n*\r*\16*\u0178\3*\3*\3+\5+\u017e\n+\3+\3+\3+\3+\3,\3"+
- ",\3,\3,\3,\3,\5,\u018a\n,\3-\5-\u018d\n-\3-\3-\3-\5-\u0192\n-\3.\5.\u0195"+
- "\n.\3.\3.\3.\5.\u019a\n.\3.\5.\u019d\n.\3.\5.\u01a0\n.\3/\3/\3/\5/\u01a5"+
- "\n/\3/\6/\u01a8\n/\r/\16/\u01a9\3/\3/\3/\7/\u01af\n/\f/\16/\u01b2\13/"+
- "\3\60\3\60\6\60\u01b6\n\60\r\60\16\60\u01b7\3\60\3\60\3\61\5\61\u01bd"+
- "\n\61\3\61\3\61\5\61\u01c1\n\61\3\61\3\61\3\61\5\61\u01c6\n\61\3\62\3"+
- "\62\6\62\u01ca\n\62\r\62\16\62\u01cb\3\62\3\62\3\63\5\63\u01d1\n\63\3"+
- "\63\3\63\3\63\3\63\5\63\u01d7\n\63\3\63\5\63\u01da\n\63\3\64\5\64\u01dd"+
- "\n\64\3\64\3\64\3\64\5\64\u01e2\n\64\3\64\3\64\6\64\u01e6\n\64\r\64\16"+
- "\64\u01e7\3\64\3\64\3\65\5\65\u01ed\n\65\3\65\3\65\3\65\5\65\u01f2\n\65"+
- "\3\65\3\65\3\65\3\66\3\66\3\66\3\66\3\66\3\66\7\66\u01fd\n\66\f\66\16"+
- "\66\u0200\13\66\3\67\5\67\u0203\n\67\3\67\3\67\3\67\5\67\u0208\n\67\3"+
- "\67\3\67\6\67\u020c\n\67\r\67\16\67\u020d\3\67\3\67\38\58\u0213\n8\38"+
- "\38\58\u0217\n8\39\59\u021a\n9\39\39\39\59\u021f\n9\39\39\69\u0223\n9"+
- "\r9\169\u0224\39\39\3:\3:\3:\3;\5;\u022d\n;\3;\3;\3;\3;\5;\u0233\n;\3"+
- ";\3;\3;\3<\3<\3=\3=\3=\3=\3=\3=\7=\u0240\n=\f=\16=\u0243\13=\3=\2\5\\"+
- "jx>\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62\64\668:<>@B"+
- "DFHJLNPRTVXZ\\^`bdfhjlnprtvx\2\5\3\2\27\31\3\2\26$\3\2,-\2\u0266\2{\3"+
- "\2\2\2\4\u0083\3\2\2\2\6\u0085\3\2\2\2\b\u0091\3\2\2\2\n\u00a2\3\2\2\2"+
- "\f\u00a4\3\2\2\2\16\u00a6\3\2\2\2\20\u00ae\3\2\2\2\22\u00b4\3\2\2\2\24"+
- "\u00b7\3\2\2\2\26\u00ba\3\2\2\2\30\u00c5\3\2\2\2\32\u00c8\3\2\2\2\34\u00d4"+
- "\3\2\2\2\36\u00d7\3\2\2\2 \u00df\3\2\2\2\"\u00e3\3\2\2\2$\u00e8\3\2\2"+
- "\2&\u00f1\3\2\2\2(\u00f9\3\2\2\2*\u00fb\3\2\2\2,\u00fe\3\2\2\2.\u0108"+
- "\3\2\2\2\60\u0113\3\2\2\2\62\u0115\3\2\2\2\64\u0117\3\2\2\2\66\u0119\3"+
- "\2\2\28\u011b\3\2\2\2:\u0124\3\2\2\2<\u012d\3\2\2\2>\u0136\3\2\2\2@\u013f"+
- "\3\2\2\2B\u0143\3\2\2\2D\u0148\3\2\2\2F\u014c\3\2\2\2H\u0154\3\2\2\2J"+
- "\u0156\3\2\2\2L\u0158\3\2\2\2N\u0162\3\2\2\2P\u016b\3\2\2\2R\u016e\3\2"+
- "\2\2T\u017d\3\2\2\2V\u0189\3\2\2\2X\u018c\3\2\2\2Z\u0194\3\2\2\2\\\u01a1"+
- "\3\2\2\2^\u01b3\3\2\2\2`\u01bc\3\2\2\2b\u01c7\3\2\2\2d\u01d0\3\2\2\2f"+
- "\u01dc\3\2\2\2h\u01ec\3\2\2\2j\u01f6\3\2\2\2l\u0202\3\2\2\2n\u0212\3\2"+
- "\2\2p\u0219\3\2\2\2r\u0228\3\2\2\2t\u022c\3\2\2\2v\u0237\3\2\2\2x\u0239"+
- "\3\2\2\2z|\5\4\3\2{z\3\2\2\2|}\3\2\2\2}{\3\2\2\2}~\3\2\2\2~\3\3\2\2\2"+
- "\177\u0084\5\n\6\2\u0080\u0084\5&\24\2\u0081\u0084\5P)\2\u0082\u0084\5"+
- "\6\4\2\u0083\177\3\2\2\2\u0083\u0080\3\2\2\2\u0083\u0081\3\2\2\2\u0083"+
- "\u0082\3\2\2\2\u0084\5\3\2\2\2\u0085\u0086\7\3\2\2\u0086\u0087\5,\27\2"+
- "\u0087\u0088\7\4\2\2\u0088\u008c\5\b\5\2\u0089\u008b\5P)\2\u008a\u0089"+
- "\3\2\2\2\u008b\u008e\3\2\2\2\u008c\u008a\3\2\2\2\u008c\u008d\3\2\2\2\u008d"+
- "\u008f\3\2\2\2\u008e\u008c\3\2\2\2\u008f\u0090\7\5\2\2\u0090\7\3\2\2\2"+
- "\u0091\u0092\7\6\2\2\u0092\u0093\7\7\2\2\u0093\u0094\5\62\32\2\u0094\t"+
- "\3\2\2\2\u0095\u00a3\5\26\f\2\u0096\u0098\5\f\7\2\u0097\u0099\5,\27\2"+
- "\u0098\u0097\3\2\2\2\u0098\u0099\3\2\2\2\u0099\u009b\3\2\2\2\u009a\u009c"+
- "\5\16\b\2\u009b\u009a\3\2\2\2\u009b\u009c\3\2\2\2\u009c\u009e\3\2\2\2"+
- "\u009d\u009f\5D#\2\u009e\u009d\3\2\2\2\u009e\u009f\3\2\2\2\u009f\u00a0"+
- "\3\2\2\2\u00a0\u00a1\5\26\f\2\u00a1\u00a3\3\2\2\2\u00a2\u0095\3\2\2\2"+
- "\u00a2\u0096\3\2\2\2\u00a3\13\3\2\2\2\u00a4\u00a5\t\2\2\2\u00a5\r\3\2"+
- "\2\2\u00a6\u00a8\7\b\2\2\u00a7\u00a9\5\20\t\2\u00a8\u00a7\3\2\2\2\u00a9"+
- "\u00aa\3\2\2\2\u00aa\u00a8\3\2\2\2\u00aa\u00ab\3\2\2\2\u00ab\u00ac\3\2"+
- "\2\2\u00ac\u00ad\7\t\2\2\u00ad\17\3\2\2\2\u00ae\u00af\5\22\n\2\u00af\u00b0"+
- "\7\7\2\2\u00b0\u00b2\5H%\2\u00b1\u00b3\5\24\13\2\u00b2\u00b1\3\2\2\2\u00b2"+
- "\u00b3\3\2\2\2\u00b3\21\3\2\2\2\u00b4\u00b5\7\n\2\2\u00b5\u00b6\5,\27"+
- "\2\u00b6\23\3\2\2\2\u00b7\u00b8\7\13\2\2\u00b8\u00b9\5.\30\2\u00b9\25"+
- "\3\2\2\2\u00ba\u00bc\7\4\2\2\u00bb\u00bd\5\30\r\2\u00bc\u00bb\3\2\2\2"+
- "\u00bd\u00be\3\2\2\2\u00be\u00bc\3\2\2\2\u00be\u00bf\3\2\2\2\u00bf\u00c0"+
- "\3\2\2\2\u00c0\u00c1\7\5\2\2\u00c1\27\3\2\2\2\u00c2\u00c6\5\32\16\2\u00c3"+
- "\u00c6\5\"\22\2\u00c4\u00c6\5$\23\2\u00c5\u00c2\3\2\2\2\u00c5\u00c3\3"+
- "\2\2\2\u00c5\u00c4\3\2\2\2\u00c6\31\3\2\2\2\u00c7\u00c9\5\34\17\2\u00c8"+
- "\u00c7\3\2\2\2\u00c8\u00c9\3\2\2\2\u00c9\u00ca\3\2\2\2\u00ca\u00cc\5,"+
- "\27\2\u00cb\u00cd\5\36\20\2\u00cc\u00cb\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd"+
- "\u00cf\3\2\2\2\u00ce\u00d0\5D#\2\u00cf\u00ce\3\2\2\2\u00cf\u00d0\3\2\2"+
- "\2\u00d0\u00d2\3\2\2\2\u00d1\u00d3\5\26\f\2\u00d2\u00d1\3\2\2\2\u00d2"+
- "\u00d3\3\2\2\2\u00d3\33\3\2\2\2\u00d4\u00d5\5,\27\2\u00d5\u00d6\7\7\2"+
- "\2\u00d6\35\3\2\2\2\u00d7\u00d9\7\b\2\2\u00d8\u00da\5 \21\2\u00d9\u00d8"+
- "\3\2\2\2\u00da\u00db\3\2\2\2\u00db\u00d9\3\2\2\2\u00db\u00dc\3\2\2\2\u00dc"+
- "\u00dd\3\2\2\2\u00dd\u00de\7\t\2\2\u00de\37\3\2\2\2\u00df\u00e0\5,\27"+
- "\2\u00e0\u00e1\7\7\2\2\u00e1\u00e2\5\60\31\2\u00e2!\3\2\2\2\u00e3\u00e4"+
- "\7\f\2\2\u00e4\u00e6\5(\25\2\u00e5\u00e7\5D#\2\u00e6\u00e5\3\2\2\2\u00e6"+
- "\u00e7\3\2\2\2\u00e7#\3\2\2\2\u00e8\u00ea\7\f\2\2\u00e9\u00eb\5*\26\2"+
- "\u00ea\u00e9\3\2\2\2\u00ea\u00eb\3\2\2\2\u00eb\u00ed\3\2\2\2\u00ec\u00ee"+
- "\5D#\2\u00ed\u00ec\3\2\2\2\u00ed\u00ee\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef"+
- "\u00f0\5\26\f\2\u00f0%\3\2\2\2\u00f1\u00f2\7\26\2\2\u00f2\u00f3\5(\25"+
- "\2\u00f3\u00f5\5*\26\2\u00f4\u00f6\5D#\2\u00f5\u00f4\3\2\2\2\u00f5\u00f6"+
- "\3\2\2\2\u00f6\u00f7\3\2\2\2\u00f7\u00f8\5\26\f\2\u00f8\'\3\2\2\2\u00f9"+
- "\u00fa\5,\27\2\u00fa)\3\2\2\2\u00fb\u00fc\7\r\2\2\u00fc\u00fd\5J&\2\u00fd"+
- "+\3\2\2\2\u00fe\u00ff\t\3\2\2\u00ff-\3\2\2\2\u0100\u0109\5\62\32\2\u0101"+
- "\u0109\7%\2\2\u0102\u0109\7&\2\2\u0103\u0109\7\24\2\2\u0104\u0109\7\25"+
- "\2\2\u0105\u0109\5\66\34\2\u0106\u0109\58\35\2\u0107\u0109\5<\37\2\u0108"+
- "\u0100\3\2\2\2\u0108\u0101\3\2\2\2\u0108\u0102\3\2\2\2\u0108\u0103\3\2"+
- "\2\2\u0108\u0104\3\2\2\2\u0108\u0105\3\2\2\2\u0108\u0106\3\2\2\2\u0108"+
- "\u0107\3\2\2\2\u0109/\3\2\2\2\u010a\u0114\5\22\n\2\u010b\u0114\5\62\32"+
- "\2\u010c\u0114\7%\2\2\u010d\u0114\7&\2\2\u010e\u0114\7\24\2\2\u010f\u0114"+
- "\7\25\2\2\u0110\u0114\5\66\34\2\u0111\u0114\5:\36\2\u0112\u0114\5> \2"+
- "\u0113\u010a\3\2\2\2\u0113\u010b\3\2\2\2\u0113\u010c\3\2\2\2\u0113\u010d"+
- "\3\2\2\2\u0113\u010e\3\2\2\2\u0113\u010f\3\2\2\2\u0113\u0110\3\2\2\2\u0113"+
- "\u0111\3\2\2\2\u0113\u0112\3\2\2\2\u0114\61\3\2\2\2\u0115\u0116\t\4\2"+
- "\2\u0116\63\3\2\2\2\u0117\u0118\5\62\32\2\u0118\65\3\2\2\2\u0119\u011a"+
- "\5,\27\2\u011a\67\3\2\2\2\u011b\u011f\7\16\2\2\u011c\u011e\5.\30\2\u011d"+
- "\u011c\3\2\2\2\u011e\u0121\3\2\2\2\u011f\u011d\3\2\2\2\u011f\u0120\3\2"+
- "\2\2\u0120\u0122\3\2\2\2\u0121\u011f\3\2\2\2\u0122\u0123\7\17\2\2\u0123"+
- "9\3\2\2\2\u0124\u0128\7\16\2\2\u0125\u0127\5\60\31\2\u0126\u0125\3\2\2"+
- "\2\u0127\u012a\3\2\2\2\u0128\u0126\3\2\2\2\u0128\u0129\3\2\2\2\u0129\u012b"+
- "\3\2\2\2\u012a\u0128\3\2\2\2\u012b\u012c\7\17\2\2\u012c;\3\2\2\2\u012d"+
- "\u0131\7\4\2\2\u012e\u0130\5@!\2\u012f\u012e\3\2\2\2\u0130\u0133\3\2\2"+
- "\2\u0131\u012f\3\2\2\2\u0131\u0132\3\2\2\2\u0132\u0134\3\2\2\2\u0133\u0131"+
- "\3\2\2\2\u0134\u0135\7\5\2\2\u0135=\3\2\2\2\u0136\u013a\7\4\2\2\u0137"+
- "\u0139\5B\"\2\u0138\u0137\3\2\2\2\u0139\u013c\3\2\2\2\u013a\u0138\3\2"+
- "\2\2\u013a\u013b\3\2\2\2\u013b\u013d\3\2\2\2\u013c\u013a\3\2\2\2\u013d"+
- "\u013e\7\5\2\2\u013e?\3\2\2\2\u013f\u0140\5,\27\2\u0140\u0141\7\7\2\2"+
- "\u0141\u0142\5.\30\2\u0142A\3\2\2\2\u0143\u0144\5,\27\2\u0144\u0145\7"+
- "\7\2\2\u0145\u0146\5\60\31\2\u0146C\3\2\2\2\u0147\u0149\5F$\2\u0148\u0147"+
- "\3\2\2\2\u0149\u014a\3\2\2\2\u014a\u0148\3\2\2\2\u014a\u014b\3\2\2\2\u014b"+
- "E\3\2\2\2\u014c\u014d\7\20\2\2\u014d\u014f\5,\27\2\u014e\u0150\5\36\20"+
- "\2\u014f\u014e\3\2\2\2\u014f\u0150\3\2\2\2\u0150G\3\2\2\2\u0151\u0155"+
- "\5J&\2\u0152\u0155\5L\'\2\u0153\u0155\5N(\2\u0154\u0151\3\2\2\2\u0154"+
- "\u0152\3\2\2\2\u0154\u0153\3\2\2\2\u0155I\3\2\2\2\u0156\u0157\5,\27\2"+
- "\u0157K\3\2\2\2\u0158\u0159\7\16\2\2\u0159\u015a\5H%\2\u015a\u015b\7\17"+
- "\2\2\u015bM\3\2\2\2\u015c\u015d\5J&\2\u015d\u015e\7\21\2\2\u015e\u0163"+
- "\3\2\2\2\u015f\u0160\5L\'\2\u0160\u0161\7\21\2\2\u0161\u0163\3\2\2\2\u0162"+
- "\u015c\3\2\2\2\u0162\u015f\3\2\2\2\u0163O\3\2\2\2\u0164\u0166\5\64\33"+
- "\2\u0165\u0164\3\2\2\2\u0165\u0166\3\2\2\2\u0166\u0167\3\2\2\2\u0167\u016c"+
- "\5R*\2\u0168\u016c\5V,\2\u0169\u016c\5r:\2\u016a\u016c\5t;\2\u016b\u0165"+
- "\3\2\2\2\u016b\u0168\3\2\2\2\u016b\u0169\3\2\2\2\u016b\u016a\3\2\2\2\u016c"+
- "Q\3\2\2\2\u016d\u016f\5\64\33\2\u016e\u016d\3\2\2\2\u016e\u016f\3\2\2"+
- "\2\u016f\u0170\3\2\2\2\u0170\u0172\7\32\2\2\u0171\u0173\5D#\2\u0172\u0171"+
- "\3\2\2\2\u0172\u0173\3\2\2\2\u0173\u0174\3\2\2\2\u0174\u0176\7\4\2\2\u0175"+
- "\u0177\5T+\2\u0176\u0175\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u0176\3\2\2"+
- "\2\u0178\u0179\3\2\2\2\u0179\u017a\3\2\2\2\u017a\u017b\7\5\2\2\u017bS"+
- "\3\2\2\2\u017c\u017e\5\64\33\2\u017d\u017c\3\2\2\2\u017d\u017e\3\2\2\2"+
- "\u017e\u017f\3\2\2\2\u017f\u0180\5\f\7\2\u0180\u0181\7\7\2\2\u0181\u0182"+
- "\5J&\2\u0182U\3\2\2\2\u0183\u018a\5X-\2\u0184\u018a\5Z.\2\u0185\u018a"+
- "\5f\64\2\u0186\u018a\5h\65\2\u0187\u018a\5l\67\2\u0188\u018a\5p9\2\u0189"+
- "\u0183\3\2\2\2\u0189\u0184\3\2\2\2\u0189\u0185\3\2\2\2\u0189\u0186\3\2"+
- "\2\2\u0189\u0187\3\2\2\2\u0189\u0188\3\2\2\2\u018aW\3\2\2\2\u018b\u018d"+
- "\5\64\33\2\u018c\u018b\3\2\2\2\u018c\u018d\3\2\2\2\u018d\u018e\3\2\2\2"+
- "\u018e\u018f\7\33\2\2\u018f\u0191\5,\27\2\u0190\u0192\5D#\2\u0191\u0190"+
- "\3\2\2\2\u0191\u0192\3\2\2\2\u0192Y\3\2\2\2\u0193\u0195\5\64\33\2\u0194"+
- "\u0193\3\2\2\2\u0194\u0195\3\2\2\2\u0195\u0196\3\2\2\2\u0196\u0197\7\34"+
- "\2\2\u0197\u0199\5,\27\2\u0198\u019a\5\\/\2\u0199\u0198\3\2\2\2\u0199"+
- "\u019a\3\2\2\2\u019a\u019c\3\2\2\2\u019b\u019d\5D#\2\u019c\u019b\3\2\2"+
- "\2\u019c\u019d\3\2\2\2\u019d\u019f\3\2\2\2\u019e\u01a0\5^\60\2\u019f\u019e"+
- "\3\2\2\2\u019f\u01a0\3\2\2\2\u01a0[\3\2\2\2\u01a1\u01a2\b/\1\2\u01a2\u01a4"+
- "\7\36\2\2\u01a3\u01a5\7\22\2\2\u01a4\u01a3\3\2\2\2\u01a4\u01a5\3\2\2\2"+
- "\u01a5\u01a7\3\2\2\2\u01a6\u01a8\5J&\2\u01a7\u01a6\3\2\2\2\u01a8\u01a9"+
- "\3\2\2\2\u01a9\u01a7\3\2\2\2\u01a9\u01aa\3\2\2\2\u01aa\u01b0\3\2\2\2\u01ab"+
- "\u01ac\f\3\2\2\u01ac\u01ad\7\22\2\2\u01ad\u01af\5J&\2\u01ae\u01ab\3\2"+
- "\2\2\u01af\u01b2\3\2\2\2\u01b0\u01ae\3\2\2\2\u01b0\u01b1\3\2\2\2\u01b1"+
- "]\3\2\2\2\u01b2\u01b0\3\2\2\2\u01b3\u01b5\7\4\2\2\u01b4\u01b6\5`\61\2"+
- "\u01b5\u01b4\3\2\2\2\u01b6\u01b7\3\2\2\2\u01b7\u01b5\3\2\2\2\u01b7\u01b8"+
- "\3\2\2\2\u01b8\u01b9\3\2\2\2\u01b9\u01ba\7\5\2\2\u01ba_\3\2\2\2\u01bb"+
- "\u01bd\5\64\33\2\u01bc\u01bb\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01be\3"+
- "\2\2\2\u01be\u01c0\5,\27\2\u01bf\u01c1\5b\62\2\u01c0\u01bf\3\2\2\2\u01c0"+
- "\u01c1\3\2\2\2\u01c1\u01c2\3\2\2\2\u01c2\u01c3\7\7\2\2\u01c3\u01c5\5H"+
- "%\2\u01c4\u01c6\5D#\2\u01c5\u01c4\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6a\3"+
- "\2\2\2\u01c7\u01c9\7\b\2\2\u01c8\u01ca\5d\63\2\u01c9\u01c8\3\2\2\2\u01ca"+
- "\u01cb\3\2\2\2\u01cb\u01c9\3\2\2\2\u01cb\u01cc\3\2\2\2\u01cc\u01cd\3\2"+
- "\2\2\u01cd\u01ce\7\t\2\2\u01cec\3\2\2\2\u01cf\u01d1\5\64\33\2\u01d0\u01cf"+
- "\3\2\2\2\u01d0\u01d1\3\2\2\2\u01d1\u01d2\3\2\2\2\u01d2\u01d3\5,\27\2\u01d3"+
- "\u01d4\7\7\2\2\u01d4\u01d6\5H%\2\u01d5\u01d7\5\24\13\2\u01d6\u01d5\3\2"+
- "\2\2\u01d6\u01d7\3\2\2\2\u01d7\u01d9\3\2\2\2\u01d8\u01da\5D#\2\u01d9\u01d8"+
- "\3\2\2\2\u01d9\u01da\3\2\2\2\u01dae\3\2\2\2\u01db\u01dd\5\64\33\2\u01dc"+
- "\u01db\3\2\2\2\u01dc\u01dd\3\2\2\2\u01dd\u01de\3\2\2\2\u01de\u01df\7\35"+
- "\2\2\u01df\u01e1\5,\27\2\u01e0\u01e2\5D#\2\u01e1\u01e0\3\2\2\2\u01e1\u01e2"+
- "\3\2\2\2\u01e2\u01e3\3\2\2\2\u01e3\u01e5\7\4\2\2\u01e4\u01e6\5`\61\2\u01e5"+
- "\u01e4\3\2\2\2\u01e6\u01e7\3\2\2\2\u01e7\u01e5\3\2\2\2\u01e7\u01e8\3\2"+
- "\2\2\u01e8\u01e9\3\2\2\2\u01e9\u01ea\7\5\2\2\u01eag\3\2\2\2\u01eb\u01ed"+
- "\5\64\33\2\u01ec\u01eb\3\2\2\2\u01ec\u01ed\3\2\2\2\u01ed\u01ee\3\2\2\2"+
- "\u01ee\u01ef\7 \2\2\u01ef\u01f1\5,\27\2\u01f0\u01f2\5D#\2\u01f1\u01f0"+
- "\3\2\2\2\u01f1\u01f2\3\2\2\2\u01f2\u01f3\3\2\2\2\u01f3\u01f4\7\13\2\2"+
- "\u01f4\u01f5\5j\66\2\u01f5i\3\2\2\2\u01f6\u01f7\b\66\1\2\u01f7\u01f8\5"+
- "J&\2\u01f8\u01fe\3\2\2\2\u01f9\u01fa\f\3\2\2\u01fa\u01fb\7\23\2\2\u01fb"+
- "\u01fd\5J&\2\u01fc\u01f9\3\2\2\2\u01fd\u0200\3\2\2\2\u01fe\u01fc\3\2\2"+
- "\2\u01fe\u01ff\3\2\2\2\u01ffk\3\2\2\2\u0200\u01fe\3\2\2\2\u0201\u0203"+
- "\5\64\33\2\u0202\u0201\3\2\2\2\u0202\u0203\3\2\2\2\u0203\u0204\3\2\2\2"+
- "\u0204\u0205\7\37\2\2\u0205\u0207\5,\27\2\u0206\u0208\5D#\2\u0207\u0206"+
- "\3\2\2\2\u0207\u0208\3\2\2\2\u0208\u0209\3\2\2\2\u0209\u020b\7\4\2\2\u020a"+
- "\u020c\5n8\2\u020b\u020a\3\2\2\2\u020c\u020d\3\2\2\2\u020d\u020b\3\2\2"+
- "\2\u020d\u020e\3\2\2\2\u020e\u020f\3\2\2\2\u020f\u0210\7\5\2\2\u0210m"+
- "\3\2\2\2\u0211\u0213\5\64\33\2\u0212\u0211\3\2\2\2\u0212\u0213\3\2\2\2"+
- "\u0213\u0214\3\2\2\2\u0214\u0216\5\66\34\2\u0215\u0217\5D#\2\u0216\u0215"+
- "\3\2\2\2\u0216\u0217\3\2\2\2\u0217o\3\2\2\2\u0218\u021a\5\64\33\2\u0219"+
- "\u0218\3\2\2\2\u0219\u021a\3\2\2\2\u021a\u021b\3\2\2\2\u021b\u021c\7!"+
- "\2\2\u021c\u021e\5,\27\2\u021d\u021f\5D#\2\u021e\u021d\3\2\2\2\u021e\u021f"+
- "\3\2\2\2\u021f\u0220\3\2\2\2\u0220\u0222\7\4\2\2\u0221\u0223\5d\63\2\u0222"+
- "\u0221\3\2\2\2\u0223\u0224\3\2\2\2\u0224\u0222\3\2\2\2\u0224\u0225\3\2"+
- "\2\2\u0225\u0226\3\2\2\2\u0226\u0227\7\5\2\2\u0227q\3\2\2\2\u0228\u0229"+
- "\7\"\2\2\u0229\u022a\5Z.\2\u022as\3\2\2\2\u022b\u022d\5\64\33\2\u022c"+
- "\u022b\3\2\2\2\u022c\u022d\3\2\2\2\u022d\u022e\3\2\2\2\u022e\u022f\7#"+
- "\2\2\u022f\u0230\7\20\2\2\u0230\u0232\5,\27\2\u0231\u0233\5b\62\2\u0232"+
- "\u0231\3\2\2\2\u0232\u0233\3\2\2\2\u0233\u0234\3\2\2\2\u0234\u0235\7\r"+
- "\2\2\u0235\u0236\5x=\2\u0236u\3\2\2\2\u0237\u0238\5,\27\2\u0238w\3\2\2"+
- "\2\u0239\u023a\b=\1\2\u023a\u023b\5v<\2\u023b\u0241\3\2\2\2\u023c\u023d"+
- "\f\3\2\2\u023d\u023e\7\23\2\2\u023e\u0240\5v<\2\u023f\u023c\3\2\2\2\u0240"+
- "\u0243\3\2\2\2\u0241\u023f\3\2\2\2\u0241\u0242\3\2\2\2\u0242y\3\2\2\2"+
- "\u0243\u0241\3\2\2\2I}\u0083\u008c\u0098\u009b\u009e\u00a2\u00aa\u00b2"+
- "\u00be\u00c5\u00c8\u00cc\u00cf\u00d2\u00db\u00e6\u00ea\u00ed\u00f5\u0108"+
- "\u0113\u011f\u0128\u0131\u013a\u014a\u014f\u0154\u0162\u0165\u016b\u016e"+
- "\u0172\u0178\u017d\u0189\u018c\u0191\u0194\u0199\u019c\u019f\u01a4\u01a9"+
- "\u01b0\u01b7\u01bc\u01c0\u01c5\u01cb\u01d0\u01d6\u01d9\u01dc\u01e1\u01e7"+
- "\u01ec\u01f1\u01fe\u0202\u0207\u020d\u0212\u0216\u0219\u021e\u0224\u022c"+
- "\u0232\u0241";
+ "\4>\t>\4?\t?\3\2\6\2\u0080\n\2\r\2\16\2\u0081\3\3\3\3\3\3\3\3\5\3\u0088"+
+ "\n\3\3\4\3\4\3\4\3\4\3\4\7\4\u008f\n\4\f\4\16\4\u0092\13\4\3\4\3\4\3\5"+
+ "\3\5\3\5\3\5\3\6\3\6\3\6\5\6\u009d\n\6\3\6\5\6\u00a0\n\6\3\6\5\6\u00a3"+
+ "\n\6\3\6\3\6\5\6\u00a7\n\6\3\7\3\7\3\b\3\b\6\b\u00ad\n\b\r\b\16\b\u00ae"+
+ "\3\b\3\b\3\t\3\t\3\t\3\t\5\t\u00b7\n\t\3\n\3\n\3\n\3\13\3\13\3\13\3\f"+
+ "\3\f\6\f\u00c1\n\f\r\f\16\f\u00c2\3\f\3\f\3\r\3\r\3\r\5\r\u00ca\n\r\3"+
+ "\16\5\16\u00cd\n\16\3\16\3\16\5\16\u00d1\n\16\3\16\5\16\u00d4\n\16\3\16"+
+ "\5\16\u00d7\n\16\3\17\3\17\3\17\3\20\3\20\6\20\u00de\n\20\r\20\16\20\u00df"+
+ "\3\20\3\20\3\21\3\21\3\21\3\21\3\22\3\22\3\22\5\22\u00eb\n\22\3\23\3\23"+
+ "\5\23\u00ef\n\23\3\23\5\23\u00f2\n\23\3\23\3\23\3\24\3\24\3\24\3\24\5"+
+ "\24\u00fa\n\24\3\24\3\24\3\25\3\25\3\26\3\26\3\26\3\27\3\27\3\30\3\30"+
+ "\3\30\3\30\3\30\3\30\3\30\3\30\5\30\u010d\n\30\3\31\3\31\3\31\3\31\3\31"+
+ "\3\31\3\31\3\31\3\31\5\31\u0118\n\31\3\32\3\32\3\33\3\33\3\34\3\34\3\35"+
+ "\3\35\7\35\u0122\n\35\f\35\16\35\u0125\13\35\3\35\3\35\3\36\3\36\7\36"+
+ "\u012b\n\36\f\36\16\36\u012e\13\36\3\36\3\36\3\37\3\37\7\37\u0134\n\37"+
+ "\f\37\16\37\u0137\13\37\3\37\3\37\3 \3 \7 \u013d\n \f \16 \u0140\13 \3"+
+ " \3 \3!\3!\3!\3!\3\"\3\"\3\"\3\"\3#\6#\u014d\n#\r#\16#\u014e\3$\3$\3$"+
+ "\5$\u0154\n$\3%\3%\3%\5%\u0159\n%\3&\3&\3\'\3\'\3\'\3\'\3(\3(\3(\3(\3"+
+ "(\3(\5(\u0167\n(\3)\5)\u016a\n)\3)\3)\3)\3)\5)\u0170\n)\3*\5*\u0173\n"+
+ "*\3*\3*\5*\u0177\n*\3*\3*\6*\u017b\n*\r*\16*\u017c\3*\3*\3+\5+\u0182\n"+
+ "+\3+\3+\3+\3+\3,\3,\3,\3,\3,\3,\5,\u018e\n,\3-\5-\u0191\n-\3-\3-\3-\5"+
+ "-\u0196\n-\3.\5.\u0199\n.\3.\3.\3.\5.\u019e\n.\3.\5.\u01a1\n.\3.\5.\u01a4"+
+ "\n.\3/\3/\3/\5/\u01a9\n/\3/\6/\u01ac\n/\r/\16/\u01ad\3/\3/\3/\7/\u01b3"+
+ "\n/\f/\16/\u01b6\13/\3\60\3\60\6\60\u01ba\n\60\r\60\16\60\u01bb\3\60\3"+
+ "\60\3\61\5\61\u01c1\n\61\3\61\3\61\5\61\u01c5\n\61\3\61\3\61\3\61\5\61"+
+ "\u01ca\n\61\3\61\5\61\u01cd\n\61\3\62\3\62\3\62\3\63\3\63\3\63\3\63\3"+
+ "\64\3\64\6\64\u01d8\n\64\r\64\16\64\u01d9\3\64\3\64\3\65\5\65\u01df\n"+
+ "\65\3\65\3\65\3\65\3\65\5\65\u01e5\n\65\3\65\5\65\u01e8\n\65\3\66\5\66"+
+ "\u01eb\n\66\3\66\3\66\3\66\5\66\u01f0\n\66\3\66\3\66\6\66\u01f4\n\66\r"+
+ "\66\16\66\u01f5\3\66\3\66\3\67\5\67\u01fb\n\67\3\67\3\67\3\67\5\67\u0200"+
+ "\n\67\3\67\3\67\3\67\38\38\38\38\38\38\78\u020b\n8\f8\168\u020e\138\3"+
+ "9\59\u0211\n9\39\39\39\59\u0216\n9\39\39\69\u021a\n9\r9\169\u021b\39\3"+
+ "9\3:\5:\u0221\n:\3:\3:\5:\u0225\n:\3;\5;\u0228\n;\3;\3;\3;\5;\u022d\n"+
+ ";\3;\3;\6;\u0231\n;\r;\16;\u0232\3;\3;\3<\3<\3<\3=\5=\u023b\n=\3=\3=\3"+
+ "=\3=\5=\u0241\n=\3=\3=\3=\3>\3>\3?\3?\3?\3?\3?\3?\7?\u024e\n?\f?\16?\u0251"+
+ "\13?\3?\2\5\\n|@\2\4\6\b\n\f\16\20\22\24\26\30\32\34\36 \"$&(*,.\60\62"+
+ "\64\668:<>@BDFHJLNPRTVXZ\\^`bdfhjlnprtvxz|\2\5\3\2\30\32\3\2\27%\3\2-"+
+ ".\2\u0273\2\177\3\2\2\2\4\u0087\3\2\2\2\6\u0089\3\2\2\2\b\u0095\3\2\2"+
+ "\2\n\u00a6\3\2\2\2\f\u00a8\3\2\2\2\16\u00aa\3\2\2\2\20\u00b2\3\2\2\2\22"+
+ "\u00b8\3\2\2\2\24\u00bb\3\2\2\2\26\u00be\3\2\2\2\30\u00c9\3\2\2\2\32\u00cc"+
+ "\3\2\2\2\34\u00d8\3\2\2\2\36\u00db\3\2\2\2 \u00e3\3\2\2\2\"\u00e7\3\2"+
+ "\2\2$\u00ec\3\2\2\2&\u00f5\3\2\2\2(\u00fd\3\2\2\2*\u00ff\3\2\2\2,\u0102"+
+ "\3\2\2\2.\u010c\3\2\2\2\60\u0117\3\2\2\2\62\u0119\3\2\2\2\64\u011b\3\2"+
+ "\2\2\66\u011d\3\2\2\28\u011f\3\2\2\2:\u0128\3\2\2\2<\u0131\3\2\2\2>\u013a"+
+ "\3\2\2\2@\u0143\3\2\2\2B\u0147\3\2\2\2D\u014c\3\2\2\2F\u0150\3\2\2\2H"+
+ "\u0158\3\2\2\2J\u015a\3\2\2\2L\u015c\3\2\2\2N\u0166\3\2\2\2P\u016f\3\2"+
+ "\2\2R\u0172\3\2\2\2T\u0181\3\2\2\2V\u018d\3\2\2\2X\u0190\3\2\2\2Z\u0198"+
+ "\3\2\2\2\\\u01a5\3\2\2\2^\u01b7\3\2\2\2`\u01c0\3\2\2\2b\u01ce\3\2\2\2"+
+ "d\u01d1\3\2\2\2f\u01d5\3\2\2\2h\u01de\3\2\2\2j\u01ea\3\2\2\2l\u01fa\3"+
+ "\2\2\2n\u0204\3\2\2\2p\u0210\3\2\2\2r\u0220\3\2\2\2t\u0227\3\2\2\2v\u0236"+
+ "\3\2\2\2x\u023a\3\2\2\2z\u0245\3\2\2\2|\u0247\3\2\2\2~\u0080\5\4\3\2\177"+
+ "~\3\2\2\2\u0080\u0081\3\2\2\2\u0081\177\3\2\2\2\u0081\u0082\3\2\2\2\u0082"+
+ "\3\3\2\2\2\u0083\u0088\5\n\6\2\u0084\u0088\5&\24\2\u0085\u0088\5P)\2\u0086"+
+ "\u0088\5\6\4\2\u0087\u0083\3\2\2\2\u0087\u0084\3\2\2\2\u0087\u0085\3\2"+
+ "\2\2\u0087\u0086\3\2\2\2\u0088\5\3\2\2\2\u0089\u008a\7\3\2\2\u008a\u008b"+
+ "\5,\27\2\u008b\u008c\7\4\2\2\u008c\u0090\5\b\5\2\u008d\u008f\5P)\2\u008e"+
+ "\u008d\3\2\2\2\u008f\u0092\3\2\2\2\u0090\u008e\3\2\2\2\u0090\u0091\3\2"+
+ "\2\2\u0091\u0093\3\2\2\2\u0092\u0090\3\2\2\2\u0093\u0094\7\5\2\2\u0094"+
+ "\7\3\2\2\2\u0095\u0096\7\6\2\2\u0096\u0097\7\7\2\2\u0097\u0098\5\62\32"+
+ "\2\u0098\t\3\2\2\2\u0099\u00a7\5\26\f\2\u009a\u009c\5\f\7\2\u009b\u009d"+
+ "\5,\27\2\u009c\u009b\3\2\2\2\u009c\u009d\3\2\2\2\u009d\u009f\3\2\2\2\u009e"+
+ "\u00a0\5\16\b\2\u009f\u009e\3\2\2\2\u009f\u00a0\3\2\2\2\u00a0\u00a2\3"+
+ "\2\2\2\u00a1\u00a3\5D#\2\u00a2\u00a1\3\2\2\2\u00a2\u00a3\3\2\2\2\u00a3"+
+ "\u00a4\3\2\2\2\u00a4\u00a5\5\26\f\2\u00a5\u00a7\3\2\2\2\u00a6\u0099\3"+
+ "\2\2\2\u00a6\u009a\3\2\2\2\u00a7\13\3\2\2\2\u00a8\u00a9\t\2\2\2\u00a9"+
+ "\r\3\2\2\2\u00aa\u00ac\7\b\2\2\u00ab\u00ad\5\20\t\2\u00ac\u00ab\3\2\2"+
+ "\2\u00ad\u00ae\3\2\2\2\u00ae\u00ac\3\2\2\2\u00ae\u00af\3\2\2\2\u00af\u00b0"+
+ "\3\2\2\2\u00b0\u00b1\7\t\2\2\u00b1\17\3\2\2\2\u00b2\u00b3\5\22\n\2\u00b3"+
+ "\u00b4\7\7\2\2\u00b4\u00b6\5H%\2\u00b5\u00b7\5\24\13\2\u00b6\u00b5\3\2"+
+ "\2\2\u00b6\u00b7\3\2\2\2\u00b7\21\3\2\2\2\u00b8\u00b9\7\n\2\2\u00b9\u00ba"+
+ "\5,\27\2\u00ba\23\3\2\2\2\u00bb\u00bc\7\13\2\2\u00bc\u00bd\5.\30\2\u00bd"+
+ "\25\3\2\2\2\u00be\u00c0\7\4\2\2\u00bf\u00c1\5\30\r\2\u00c0\u00bf\3\2\2"+
+ "\2\u00c1\u00c2\3\2\2\2\u00c2\u00c0\3\2\2\2\u00c2\u00c3\3\2\2\2\u00c3\u00c4"+
+ "\3\2\2\2\u00c4\u00c5\7\5\2\2\u00c5\27\3\2\2\2\u00c6\u00ca\5\32\16\2\u00c7"+
+ "\u00ca\5\"\22\2\u00c8\u00ca\5$\23\2\u00c9\u00c6\3\2\2\2\u00c9\u00c7\3"+
+ "\2\2\2\u00c9\u00c8\3\2\2\2\u00ca\31\3\2\2\2\u00cb\u00cd\5\34\17\2\u00cc"+
+ "\u00cb\3\2\2\2\u00cc\u00cd\3\2\2\2\u00cd\u00ce\3\2\2\2\u00ce\u00d0\5,"+
+ "\27\2\u00cf\u00d1\5\36\20\2\u00d0\u00cf\3\2\2\2\u00d0\u00d1\3\2\2\2\u00d1"+
+ "\u00d3\3\2\2\2\u00d2\u00d4\5D#\2\u00d3\u00d2\3\2\2\2\u00d3\u00d4\3\2\2"+
+ "\2\u00d4\u00d6\3\2\2\2\u00d5\u00d7\5\26\f\2\u00d6\u00d5\3\2\2\2\u00d6"+
+ "\u00d7\3\2\2\2\u00d7\33\3\2\2\2\u00d8\u00d9\5,\27\2\u00d9\u00da\7\7\2"+
+ "\2\u00da\35\3\2\2\2\u00db\u00dd\7\b\2\2\u00dc\u00de\5 \21\2\u00dd\u00dc"+
+ "\3\2\2\2\u00de\u00df\3\2\2\2\u00df\u00dd\3\2\2\2\u00df\u00e0\3\2\2\2\u00e0"+
+ "\u00e1\3\2\2\2\u00e1\u00e2\7\t\2\2\u00e2\37\3\2\2\2\u00e3\u00e4\5,\27"+
+ "\2\u00e4\u00e5\7\7\2\2\u00e5\u00e6\5\60\31\2\u00e6!\3\2\2\2\u00e7\u00e8"+
+ "\7\f\2\2\u00e8\u00ea\5(\25\2\u00e9\u00eb\5D#\2\u00ea\u00e9\3\2\2\2\u00ea"+
+ "\u00eb\3\2\2\2\u00eb#\3\2\2\2\u00ec\u00ee\7\f\2\2\u00ed\u00ef\5*\26\2"+
+ "\u00ee\u00ed\3\2\2\2\u00ee\u00ef\3\2\2\2\u00ef\u00f1\3\2\2\2\u00f0\u00f2"+
+ "\5D#\2\u00f1\u00f0\3\2\2\2\u00f1\u00f2\3\2\2\2\u00f2\u00f3\3\2\2\2\u00f3"+
+ "\u00f4\5\26\f\2\u00f4%\3\2\2\2\u00f5\u00f6\7\27\2\2\u00f6\u00f7\5(\25"+
+ "\2\u00f7\u00f9\5*\26\2\u00f8\u00fa\5D#\2\u00f9\u00f8\3\2\2\2\u00f9\u00fa"+
+ "\3\2\2\2\u00fa\u00fb\3\2\2\2\u00fb\u00fc\5\26\f\2\u00fc\'\3\2\2\2\u00fd"+
+ "\u00fe\5,\27\2\u00fe)\3\2\2\2\u00ff\u0100\7\r\2\2\u0100\u0101\5J&\2\u0101"+
+ "+\3\2\2\2\u0102\u0103\t\3\2\2\u0103-\3\2\2\2\u0104\u010d\5\62\32\2\u0105"+
+ "\u010d\7&\2\2\u0106\u010d\7\'\2\2\u0107\u010d\7\25\2\2\u0108\u010d\7\26"+
+ "\2\2\u0109\u010d\5\66\34\2\u010a\u010d\58\35\2\u010b\u010d\5<\37\2\u010c"+
+ "\u0104\3\2\2\2\u010c\u0105\3\2\2\2\u010c\u0106\3\2\2\2\u010c\u0107\3\2"+
+ "\2\2\u010c\u0108\3\2\2\2\u010c\u0109\3\2\2\2\u010c\u010a\3\2\2\2\u010c"+
+ "\u010b\3\2\2\2\u010d/\3\2\2\2\u010e\u0118\5\22\n\2\u010f\u0118\5\62\32"+
+ "\2\u0110\u0118\7&\2\2\u0111\u0118\7\'\2\2\u0112\u0118\7\25\2\2\u0113\u0118"+
+ "\7\26\2\2\u0114\u0118\5\66\34\2\u0115\u0118\5:\36\2\u0116\u0118\5> \2"+
+ "\u0117\u010e\3\2\2\2\u0117\u010f\3\2\2\2\u0117\u0110\3\2\2\2\u0117\u0111"+
+ "\3\2\2\2\u0117\u0112\3\2\2\2\u0117\u0113\3\2\2\2\u0117\u0114\3\2\2\2\u0117"+
+ "\u0115\3\2\2\2\u0117\u0116\3\2\2\2\u0118\61\3\2\2\2\u0119\u011a\t\4\2"+
+ "\2\u011a\63\3\2\2\2\u011b\u011c\5\62\32\2\u011c\65\3\2\2\2\u011d\u011e"+
+ "\5,\27\2\u011e\67\3\2\2\2\u011f\u0123\7\16\2\2\u0120\u0122\5.\30\2\u0121"+
+ "\u0120\3\2\2\2\u0122\u0125\3\2\2\2\u0123\u0121\3\2\2\2\u0123\u0124\3\2"+
+ "\2\2\u0124\u0126\3\2\2\2\u0125\u0123\3\2\2\2\u0126\u0127\7\17\2\2\u0127"+
+ "9\3\2\2\2\u0128\u012c\7\16\2\2\u0129\u012b\5\60\31\2\u012a\u0129\3\2\2"+
+ "\2\u012b\u012e\3\2\2\2\u012c\u012a\3\2\2\2\u012c\u012d\3\2\2\2\u012d\u012f"+
+ "\3\2\2\2\u012e\u012c\3\2\2\2\u012f\u0130\7\17\2\2\u0130;\3\2\2\2\u0131"+
+ "\u0135\7\4\2\2\u0132\u0134\5@!\2\u0133\u0132\3\2\2\2\u0134\u0137\3\2\2"+
+ "\2\u0135\u0133\3\2\2\2\u0135\u0136\3\2\2\2\u0136\u0138\3\2\2\2\u0137\u0135"+
+ "\3\2\2\2\u0138\u0139\7\5\2\2\u0139=\3\2\2\2\u013a\u013e\7\4\2\2\u013b"+
+ "\u013d\5B\"\2\u013c\u013b\3\2\2\2\u013d\u0140\3\2\2\2\u013e\u013c\3\2"+
+ "\2\2\u013e\u013f\3\2\2\2\u013f\u0141\3\2\2\2\u0140\u013e\3\2\2\2\u0141"+
+ "\u0142\7\5\2\2\u0142?\3\2\2\2\u0143\u0144\5,\27\2\u0144\u0145\7\7\2\2"+
+ "\u0145\u0146\5.\30\2\u0146A\3\2\2\2\u0147\u0148\5,\27\2\u0148\u0149\7"+
+ "\7\2\2\u0149\u014a\5\60\31\2\u014aC\3\2\2\2\u014b\u014d\5F$\2\u014c\u014b"+
+ "\3\2\2\2\u014d\u014e\3\2\2\2\u014e\u014c\3\2\2\2\u014e\u014f\3\2\2\2\u014f"+
+ "E\3\2\2\2\u0150\u0151\7\20\2\2\u0151\u0153\5,\27\2\u0152\u0154\5\36\20"+
+ "\2\u0153\u0152\3\2\2\2\u0153\u0154\3\2\2\2\u0154G\3\2\2\2\u0155\u0159"+
+ "\5J&\2\u0156\u0159\5L\'\2\u0157\u0159\5N(\2\u0158\u0155\3\2\2\2\u0158"+
+ "\u0156\3\2\2\2\u0158\u0157\3\2\2\2\u0159I\3\2\2\2\u015a\u015b\5,\27\2"+
+ "\u015bK\3\2\2\2\u015c\u015d\7\16\2\2\u015d\u015e\5H%\2\u015e\u015f\7\17"+
+ "\2\2\u015fM\3\2\2\2\u0160\u0161\5J&\2\u0161\u0162\7\21\2\2\u0162\u0167"+
+ "\3\2\2\2\u0163\u0164\5L\'\2\u0164\u0165\7\21\2\2\u0165\u0167\3\2\2\2\u0166"+
+ "\u0160\3\2\2\2\u0166\u0163\3\2\2\2\u0167O\3\2\2\2\u0168\u016a\5\64\33"+
+ "\2\u0169\u0168\3\2\2\2\u0169\u016a\3\2\2\2\u016a\u016b\3\2\2\2\u016b\u0170"+
+ "\5R*\2\u016c\u0170\5V,\2\u016d\u0170\5v<\2\u016e\u0170\5x=\2\u016f\u0169"+
+ "\3\2\2\2\u016f\u016c\3\2\2\2\u016f\u016d\3\2\2\2\u016f\u016e\3\2\2\2\u0170"+
+ "Q\3\2\2\2\u0171\u0173\5\64\33\2\u0172\u0171\3\2\2\2\u0172\u0173\3\2\2"+
+ "\2\u0173\u0174\3\2\2\2\u0174\u0176\7\33\2\2\u0175\u0177\5D#\2\u0176\u0175"+
+ "\3\2\2\2\u0176\u0177\3\2\2\2\u0177\u0178\3\2\2\2\u0178\u017a\7\4\2\2\u0179"+
+ "\u017b\5T+\2\u017a\u0179\3\2\2\2\u017b\u017c\3\2\2\2\u017c\u017a\3\2\2"+
+ "\2\u017c\u017d\3\2\2\2\u017d\u017e\3\2\2\2\u017e\u017f\7\5\2\2\u017fS"+
+ "\3\2\2\2\u0180\u0182\5\64\33\2\u0181\u0180\3\2\2\2\u0181\u0182\3\2\2\2"+
+ "\u0182\u0183\3\2\2\2\u0183\u0184\5\f\7\2\u0184\u0185\7\7\2\2\u0185\u0186"+
+ "\5J&\2\u0186U\3\2\2\2\u0187\u018e\5X-\2\u0188\u018e\5Z.\2\u0189\u018e"+
+ "\5j\66\2\u018a\u018e\5l\67\2\u018b\u018e\5p9\2\u018c\u018e\5t;\2\u018d"+
+ "\u0187\3\2\2\2\u018d\u0188\3\2\2\2\u018d\u0189\3\2\2\2\u018d\u018a\3\2"+
+ "\2\2\u018d\u018b\3\2\2\2\u018d\u018c\3\2\2\2\u018eW\3\2\2\2\u018f\u0191"+
+ "\5\64\33\2\u0190\u018f\3\2\2\2\u0190\u0191\3\2\2\2\u0191\u0192\3\2\2\2"+
+ "\u0192\u0193\7\34\2\2\u0193\u0195\5,\27\2\u0194\u0196\5D#\2\u0195\u0194"+
+ "\3\2\2\2\u0195\u0196\3\2\2\2\u0196Y\3\2\2\2\u0197\u0199\5\64\33\2\u0198"+
+ "\u0197\3\2\2\2\u0198\u0199\3\2\2\2\u0199\u019a\3\2\2\2\u019a\u019b\7\35"+
+ "\2\2\u019b\u019d\5,\27\2\u019c\u019e\5\\/\2\u019d\u019c\3\2\2\2\u019d"+
+ "\u019e\3\2\2\2\u019e\u01a0\3\2\2\2\u019f\u01a1\5D#\2\u01a0\u019f\3\2\2"+
+ "\2\u01a0\u01a1\3\2\2\2\u01a1\u01a3\3\2\2\2\u01a2\u01a4\5^\60\2\u01a3\u01a2"+
+ "\3\2\2\2\u01a3\u01a4\3\2\2\2\u01a4[\3\2\2\2\u01a5\u01a6\b/\1\2\u01a6\u01a8"+
+ "\7\37\2\2\u01a7\u01a9\7\22\2\2\u01a8\u01a7\3\2\2\2\u01a8\u01a9\3\2\2\2"+
+ "\u01a9\u01ab\3\2\2\2\u01aa\u01ac\5J&\2\u01ab\u01aa\3\2\2\2\u01ac\u01ad"+
+ "\3\2\2\2\u01ad\u01ab\3\2\2\2\u01ad\u01ae\3\2\2\2\u01ae\u01b4\3\2\2\2\u01af"+
+ "\u01b0\f\3\2\2\u01b0\u01b1\7\22\2\2\u01b1\u01b3\5J&\2\u01b2\u01af\3\2"+
+ "\2\2\u01b3\u01b6\3\2\2\2\u01b4\u01b2\3\2\2\2\u01b4\u01b5\3\2\2\2\u01b5"+
+ "]\3\2\2\2\u01b6\u01b4\3\2\2\2\u01b7\u01b9\7\4\2\2\u01b8\u01ba\5`\61\2"+
+ "\u01b9\u01b8\3\2\2\2\u01ba\u01bb\3\2\2\2\u01bb\u01b9\3\2\2\2\u01bb\u01bc"+
+ "\3\2\2\2\u01bc\u01bd\3\2\2\2\u01bd\u01be\7\5\2\2\u01be_\3\2\2\2\u01bf"+
+ "\u01c1\5\64\33\2\u01c0\u01bf\3\2\2\2\u01c0\u01c1\3\2\2\2\u01c1\u01c2\3"+
+ "\2\2\2\u01c2\u01c4\5,\27\2\u01c3\u01c5\5f\64\2\u01c4\u01c3\3\2\2\2\u01c4"+
+ "\u01c5\3\2\2\2\u01c5\u01c6\3\2\2\2\u01c6\u01c7\7\7\2\2\u01c7\u01c9\5H"+
+ "%\2\u01c8\u01ca\5b\62\2\u01c9\u01c8\3\2\2\2\u01c9\u01ca\3\2\2\2\u01ca"+
+ "\u01cc\3\2\2\2\u01cb\u01cd\5D#\2\u01cc\u01cb\3\2\2\2\u01cc\u01cd\3\2\2"+
+ "\2\u01cda\3\2\2\2\u01ce\u01cf\7\23\2\2\u01cf\u01d0\5d\63\2\u01d0c\3\2"+
+ "\2\2\u01d1\u01d2\5,\27\2\u01d2\u01d3\7\7\2\2\u01d3\u01d4\5H%\2\u01d4e"+
+ "\3\2\2\2\u01d5\u01d7\7\b\2\2\u01d6\u01d8\5h\65\2\u01d7\u01d6\3\2\2\2\u01d8"+
+ "\u01d9\3\2\2\2\u01d9\u01d7\3\2\2\2\u01d9\u01da\3\2\2\2\u01da\u01db\3\2"+
+ "\2\2\u01db\u01dc\7\t\2\2\u01dcg\3\2\2\2\u01dd\u01df\5\64\33\2\u01de\u01dd"+
+ "\3\2\2\2\u01de\u01df\3\2\2\2\u01df\u01e0\3\2\2\2\u01e0\u01e1\5,\27\2\u01e1"+
+ "\u01e2\7\7\2\2\u01e2\u01e4\5H%\2\u01e3\u01e5\5\24\13\2\u01e4\u01e3\3\2"+
+ "\2\2\u01e4\u01e5\3\2\2\2\u01e5\u01e7\3\2\2\2\u01e6\u01e8\5D#\2\u01e7\u01e6"+
+ "\3\2\2\2\u01e7\u01e8\3\2\2\2\u01e8i\3\2\2\2\u01e9\u01eb\5\64\33\2\u01ea"+
+ "\u01e9\3\2\2\2\u01ea\u01eb\3\2\2\2\u01eb\u01ec\3\2\2\2\u01ec\u01ed\7\36"+
+ "\2\2\u01ed\u01ef\5,\27\2\u01ee\u01f0\5D#\2\u01ef\u01ee\3\2\2\2\u01ef\u01f0"+
+ "\3\2\2\2\u01f0\u01f1\3\2\2\2\u01f1\u01f3\7\4\2\2\u01f2\u01f4\5`\61\2\u01f3"+
+ "\u01f2\3\2\2\2\u01f4\u01f5\3\2\2\2\u01f5\u01f3\3\2\2\2\u01f5\u01f6\3\2"+
+ "\2\2\u01f6\u01f7\3\2\2\2\u01f7\u01f8\7\5\2\2\u01f8k\3\2\2\2\u01f9\u01fb"+
+ "\5\64\33\2\u01fa\u01f9\3\2\2\2\u01fa\u01fb\3\2\2\2\u01fb\u01fc\3\2\2\2"+
+ "\u01fc\u01fd\7!\2\2\u01fd\u01ff\5,\27\2\u01fe\u0200\5D#\2\u01ff\u01fe"+
+ "\3\2\2\2\u01ff\u0200\3\2\2\2\u0200\u0201\3\2\2\2\u0201\u0202\7\13\2\2"+
+ "\u0202\u0203\5n8\2\u0203m\3\2\2\2\u0204\u0205\b8\1\2\u0205\u0206\5J&\2"+
+ "\u0206\u020c\3\2\2\2\u0207\u0208\f\3\2\2\u0208\u0209\7\24\2\2\u0209\u020b"+
+ "\5J&\2\u020a\u0207\3\2\2\2\u020b\u020e\3\2\2\2\u020c\u020a\3\2\2\2\u020c"+
+ "\u020d\3\2\2\2\u020do\3\2\2\2\u020e\u020c\3\2\2\2\u020f\u0211\5\64\33"+
+ "\2\u0210\u020f\3\2\2\2\u0210\u0211\3\2\2\2\u0211\u0212\3\2\2\2\u0212\u0213"+
+ "\7 \2\2\u0213\u0215\5,\27\2\u0214\u0216\5D#\2\u0215\u0214\3\2\2\2\u0215"+
+ "\u0216\3\2\2\2\u0216\u0217\3\2\2\2\u0217\u0219\7\4\2\2\u0218\u021a\5r"+
+ ":\2\u0219\u0218\3\2\2\2\u021a\u021b\3\2\2\2\u021b\u0219\3\2\2\2\u021b"+
+ "\u021c\3\2\2\2\u021c\u021d\3\2\2\2\u021d\u021e\7\5\2\2\u021eq\3\2\2\2"+
+ "\u021f\u0221\5\64\33\2\u0220\u021f\3\2\2\2\u0220\u0221\3\2\2\2\u0221\u0222"+
+ "\3\2\2\2\u0222\u0224\5\66\34\2\u0223\u0225\5D#\2\u0224\u0223\3\2\2\2\u0224"+
+ "\u0225\3\2\2\2\u0225s\3\2\2\2\u0226\u0228\5\64\33\2\u0227\u0226\3\2\2"+
+ "\2\u0227\u0228\3\2\2\2\u0228\u0229\3\2\2\2\u0229\u022a\7\"\2\2\u022a\u022c"+
+ "\5,\27\2\u022b\u022d\5D#\2\u022c\u022b\3\2\2\2\u022c\u022d\3\2\2\2\u022d"+
+ "\u022e\3\2\2\2\u022e\u0230\7\4\2\2\u022f\u0231\5h\65\2\u0230\u022f\3\2"+
+ "\2\2\u0231\u0232\3\2\2\2\u0232\u0230\3\2\2\2\u0232\u0233\3\2\2\2\u0233"+
+ "\u0234\3\2\2\2\u0234\u0235\7\5\2\2\u0235u\3\2\2\2\u0236\u0237\7#\2\2\u0237"+
+ "\u0238\5Z.\2\u0238w\3\2\2\2\u0239\u023b\5\64\33\2\u023a\u0239\3\2\2\2"+
+ "\u023a\u023b\3\2\2\2\u023b\u023c\3\2\2\2\u023c\u023d\7$\2\2\u023d\u023e"+
+ "\7\20\2\2\u023e\u0240\5,\27\2\u023f\u0241\5f\64\2\u0240\u023f\3\2\2\2"+
+ "\u0240\u0241\3\2\2\2\u0241\u0242\3\2\2\2\u0242\u0243\7\r\2\2\u0243\u0244"+
+ "\5|?\2\u0244y\3\2\2\2\u0245\u0246\5,\27\2\u0246{\3\2\2\2\u0247\u0248\b"+
+ "?\1\2\u0248\u0249\5z>\2\u0249\u024f\3\2\2\2\u024a\u024b\f\3\2\2\u024b"+
+ "\u024c\7\24\2\2\u024c\u024e\5z>\2\u024d\u024a\3\2\2\2\u024e\u0251\3\2"+
+ "\2\2\u024f\u024d\3\2\2\2\u024f\u0250\3\2\2\2\u0250}\3\2\2\2\u0251\u024f"+
+ "\3\2\2\2J\u0081\u0087\u0090\u009c\u009f\u00a2\u00a6\u00ae\u00b6\u00c2"+
+ "\u00c9\u00cc\u00d0\u00d3\u00d6\u00df\u00ea\u00ee\u00f1\u00f9\u010c\u0117"+
+ "\u0123\u012c\u0135\u013e\u014e\u0153\u0158\u0166\u0169\u016f\u0172\u0176"+
+ "\u017c\u0181\u018d\u0190\u0195\u0198\u019d\u01a0\u01a3\u01a8\u01ad\u01b4"+
+ "\u01bb\u01c0\u01c4\u01c9\u01cc\u01d9\u01de\u01e4\u01e7\u01ea\u01ef\u01f5"+
+ "\u01fa\u01ff\u020c\u0210\u0215\u021b\u0220\u0224\u0227\u022c\u0232\u023a"+
+ "\u0240\u024f";
public static final ATN _ATN =
new ATNDeserializer().deserialize(_serializedATN.toCharArray());
static {
diff --git a/src/main/gen/GraphqlVisitor.java b/src/main/gen/GraphqlVisitor.java
index 8c34ec506d..d810b10af8 100644
--- a/src/main/gen/GraphqlVisitor.java
+++ b/src/main/gen/GraphqlVisitor.java
@@ -300,6 +300,18 @@ public interface GraphqlVisitor extends ParseTreeVisitor {
* @return the visitor result
*/
T visitFieldDefinition(GraphqlParser.FieldDefinitionContext ctx);
+ /**
+ * Visit a parse tree produced by {@link GraphqlParser#fieldTransformation}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitFieldTransformation(GraphqlParser.FieldTransformationContext ctx);
+ /**
+ * Visit a parse tree produced by {@link GraphqlParser#targetFieldDefinition}.
+ * @param ctx the parse tree
+ * @return the visitor result
+ */
+ T visitTargetFieldDefinition(GraphqlParser.TargetFieldDefinitionContext ctx);
/**
* Visit a parse tree produced by {@link GraphqlParser#argumentsDefinition}.
* @param ctx the parse tree
diff --git a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java
index 64c29cb876..128d1a2568 100644
--- a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java
+++ b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java
@@ -523,6 +523,14 @@ public Void visitFieldDefinition(GraphqlParser.FieldDefinitionContext ctx) {
break;
}
}
+
+ for (ContextEntry contextEntry : contextStack) {
+ if (contextEntry.contextProperty == ContextProperty.ServiceDefinition) {
+ ServiceDefinition svcDef = (ServiceDefinition) contextEntry.value;
+ def.setServiceDefinition(svcDef);
+ break;
+ }
+ }
addContextProperty(ContextProperty.FieldDefinition, def);
super.visitChildren(ctx);
popContext();
diff --git a/src/test/groovy/graphql/parser/ParserTest.groovy b/src/test/groovy/graphql/parser/ParserTest.groovy
index 8b0498d94b..4bd7ae4a71 100644
--- a/src/test/groovy/graphql/parser/ParserTest.groovy
+++ b/src/test/groovy/graphql/parser/ParserTest.groovy
@@ -41,17 +41,26 @@ class ParserTest extends Specification {
def "parse service definition"() {
given:
def input =
-"""service PostSvc {
+"""
+service PostSvc {
url: "asd"
type Post {
id: ID!
title: String
+ @ConvertTo(type:"User",name:"author",query:"user")
+ authorId: ID => author : User
}
extend type User {
id: ID!
+ @ResolveWith(query:"posts",argument:"authorId")
posts: [Post]
- }
+ }
+
+ type Query {
+ post(id:ID!) : Post
+ posts(authorId:ID) : [Post]
+ }
}
service UserSvc {
@@ -59,7 +68,13 @@ service UserSvc {
type User {
id: ID!
}
-}"""
+
+ type Query {
+ user(id:ID!): User
+ users: [User]
+ }
+}
+"""
when:
Document document = new Parser().parseDocument(input)
then:
From 6af2f589027273d24382742c721532b0adde7d91 Mon Sep 17 00:00:00 2001
From: Andreas Marek
Date: Fri, 9 Feb 2018 11:44:13 +1100
Subject: [PATCH 15/19] first full working example
---
src/main/java/graphql/StitchingDSLExample.java | 14 +++++++-------
stitching-dsl.txt | 13 +++++++++++--
2 files changed, 18 insertions(+), 9 deletions(-)
diff --git a/src/main/java/graphql/StitchingDSLExample.java b/src/main/java/graphql/StitchingDSLExample.java
index eb54305463..76f699cdaf 100644
--- a/src/main/java/graphql/StitchingDSLExample.java
+++ b/src/main/java/graphql/StitchingDSLExample.java
@@ -200,12 +200,11 @@ public static void main(String[] args) throws IOException {
SchemaParser schemaParser = new SchemaParser();
// TODO: comment in the next two lines when ready
-// String schema = Files.readAllLines(Paths.get("./stitching-dsl.txt")).stream().collect(Collectors.joining());
-// schemaParser.parse(schema);
- // TODO: remove when ready
- Document document = buildDocument3();
-
- TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.buildRegistry(document);
+ String schema = Files.readAllLines(Paths.get("./stitching-dsl.txt")).stream().collect(Collectors.joining());
+ TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema);
+// // TODO: remove when ready
+// Document document = buildDocument3();
+// TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.buildRegistry(document);
StitchingRuntimeWiring wiringFactory = new StitchingRuntimeWiring();
RuntimeWiring runtimeWiring = newRuntimeWiring()
@@ -221,7 +220,8 @@ public static void main(String[] args) throws IOException {
GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
//
- ExecutionResult executionResult1 = build.execute("{posts{id, author {id name}}}");
+// ExecutionResult executionResult1 = build.execute("{posts{id, author {id name}}}");
+ ExecutionResult executionResult1 = build.execute("{hello}");
System.out.println(executionResult1.getData().toString());
diff --git a/stitching-dsl.txt b/stitching-dsl.txt
index 84e5842445..5e26480d05 100644
--- a/stitching-dsl.txt
+++ b/stitching-dsl.txt
@@ -1,4 +1,13 @@
-service X {
-
+service Foo1 {
+ url: "https://4r09jwx0k9.lp.gql.zone/graphql"
+ type Query {
+ hello: String
+ }
+}
+service Foo2 {
+ url: "https://4r09jwx0k9.lp.gql.zone/graphql"
+ type Query {
+ hello2: String
+ }
}
\ No newline at end of file
From 95cac44ba2b3e406cde70de08f93402909a1f55c Mon Sep 17 00:00:00 2001
From: Diogo Lucas
Date: Fri, 9 Feb 2018 12:44:22 +1100
Subject: [PATCH 16/19] simple field transformations now supported in grammar
---
.../java/graphql/parser/GraphqlAntlrToLanguage.java | 13 +++++++++++++
1 file changed, 13 insertions(+)
diff --git a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java
index 128d1a2568..ff80e8977b 100644
--- a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java
+++ b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java
@@ -507,6 +507,18 @@ public Void visitObjectTypeDefinition(GraphqlParser.ObjectTypeDefinitionContext
return null;
}
+ @Override
+ public Void visitFieldTransformation(GraphqlParser.FieldTransformationContext ctx) {
+ FieldDefinition fieldDef = (FieldDefinition) contextStack.peek().value;
+ GraphqlParser.TargetFieldDefinitionContext targetDef = ctx.targetFieldDefinition();
+ FieldTransformation trans = new FieldTransformation();
+ FieldDefinition target = new FieldDefinition(
+ targetDef.name().getText(),
+ new TypeName(targetDef.type().getText()));
+ trans.setTargetFieldDefinition(target);
+ fieldDef.setFieldTransformation(trans);
+ return null;
+ }
@Override
public Void visitFieldDefinition(GraphqlParser.FieldDefinitionContext ctx) {
@@ -531,6 +543,7 @@ public Void visitFieldDefinition(GraphqlParser.FieldDefinitionContext ctx) {
break;
}
}
+
addContextProperty(ContextProperty.FieldDefinition, def);
super.visitChildren(ctx);
popContext();
From 9bd8082efccd42a17397f6a5275f13fccf2d0097 Mon Sep 17 00:00:00 2001
From: Diogo Lucas
Date: Fri, 9 Feb 2018 12:52:19 +1100
Subject: [PATCH 17/19] bringing all parser tests back
---
src/test/groovy/graphql/parser/ParserTest.groovy | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/src/test/groovy/graphql/parser/ParserTest.groovy b/src/test/groovy/graphql/parser/ParserTest.groovy
index 4bd7ae4a71..7b634e97b4 100644
--- a/src/test/groovy/graphql/parser/ParserTest.groovy
+++ b/src/test/groovy/graphql/parser/ParserTest.groovy
@@ -80,7 +80,7 @@ service UserSvc {
then:
assert document.definitions.size() > 0
}
-/*
+
def "parse anonymous simple query"() {
given:
def input = "{ me }"
@@ -709,5 +709,4 @@ triple3 : """edge cases \\""" "" " \\"" \\" edge cases"""
}
true
}
- */
}
From 9355a0c9095e8c91fed0b6c228d5db94532cd136 Mon Sep 17 00:00:00 2001
From: Andreas Marek
Date: Fri, 9 Feb 2018 13:17:25 +1100
Subject: [PATCH 18/19] working linking example
---
.../java/graphql/StitchingDSLExample.java | 4 ++--
stitching-dsl.txt | 23 ++++++++++++-------
2 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/src/main/java/graphql/StitchingDSLExample.java b/src/main/java/graphql/StitchingDSLExample.java
index 76f699cdaf..24d3ad8f84 100644
--- a/src/main/java/graphql/StitchingDSLExample.java
+++ b/src/main/java/graphql/StitchingDSLExample.java
@@ -220,8 +220,8 @@ public static void main(String[] args) throws IOException {
GraphQL build = GraphQL.newGraphQL(graphQLSchema).build();
//
-// ExecutionResult executionResult1 = build.execute("{posts{id, author {id name}}}");
- ExecutionResult executionResult1 = build.execute("{hello}");
+ ExecutionResult executionResult1 = build.execute("{posts{id, author {id name}}}");
+// ExecutionResult executionResult1 = build.execute("{hello}");
System.out.println(executionResult1.getData().toString());
diff --git a/stitching-dsl.txt b/stitching-dsl.txt
index 5e26480d05..6141e5b61f 100644
--- a/stitching-dsl.txt
+++ b/stitching-dsl.txt
@@ -1,13 +1,20 @@
-service Foo1 {
- url: "https://4r09jwx0k9.lp.gql.zone/graphql"
+service User {
+ url: "https://r9km4x894n.lp.gql.zone/graphql"
+ type User {
+ id: ID
+ name: String
+ }
type Query {
- hello: String
+ user(id:ID): User
}
}
-
-service Foo2 {
- url: "https://4r09jwx0k9.lp.gql.zone/graphql"
+service Posts {
+ url: "https://p0rm35pkm0.lp.gql.zone/graphql"
+ type Post {
+ id: ID
+ authorId: ID => author: User
+ }
type Query {
- hello2: String
+ posts: [Post]
}
-}
\ No newline at end of file
+}
From 54658d04a9931ea42cb4aaf69398c3d899d38a92 Mon Sep 17 00:00:00 2001
From: Diogo Lucas
Date: Fri, 9 Feb 2018 14:02:53 +1100
Subject: [PATCH 19/19] adds implementation notes (representation alternatives,
lessons learned, etc) in a notes.md file
---
Notes.md | 326 +++++++++++++++++++++++++++++
src/main/antlr/dsl-alternatives.md | 237 ---------------------
2 files changed, 326 insertions(+), 237 deletions(-)
create mode 100644 Notes.md
delete mode 100644 src/main/antlr/dsl-alternatives.md
diff --git a/Notes.md b/Notes.md
new file mode 100644
index 0000000000..ef8bba3b1c
--- /dev/null
+++ b/Notes.md
@@ -0,0 +1,326 @@
+# Lessons learned & conscious constraints
+
+* We defined stitching as the ability to merge multiple underlying GraphQL schemas and resolve queries across them. This carries a number of consequences:
+ - The stitcher is not in the business of complex transformations (limiting itself to simple FK expansions and type enrichments)
+ - The stitcher works over other GraphQL endpoints (meaning no REST->GQL magic is implemented here)
+* Important elements such as tracing and circuit breakers are better left for the underlying structure:
+ - most s2s communication elements can be handled by a service mesh or similar
+ - some elements (eg: circuit breaking fallbacks) are still relevant at the stitching level and have been considered in the design decisions
+* While we expect the underlying elements to provide GraphQL, there is *no* assumption on how it is implemented
+ - a good part of the value in stitching is to allow for team autonomy, and assuming a specific lib or stack is used goes against it
+* A decision was made to not enforce a given structure for things such as pagination and error format
+ - this makes the stitcher simpler and more flexible
+* A decision was made that scalars need to be declared at the stitching level as well
+ - caveat: no effort is made in the stitcher to make sure scalars are rendered consistently (eg: all DateTimes actually have the same format)
+
+# DSL alternatives
+
+Resulting stitched schema:
+
+```
+type Post {
+ id: ID!
+ title: String
+ author: User
+}
+
+type User {
+ id: ID!
+ name: String
+ posts: [Post]
+}
+
+type Query {
+ post(id:ID!) : Post
+ posts(authorId:ID) : [Post]
+ user(id:ID!): User
+ users: [User]
+}
+
+```
+
+Post service internal schema:
+
+```
+type Post {
+ id: ID!
+ title: String
+ authorId: ID
+}
+
+
+type Query {
+ post(id:ID!) : Post
+ posts(authorId:ID) : [Post]
+}
+
+```
+
+User service internal schema:
+
+```
+type User {
+ id: ID!
+ name: String
+}
+
+type Query {
+ user(id:ID!): User
+ users: [User]
+}
+
+```
+
+## Pure SDL
+
+In this approach, no additional input parsing is needed, as the SDL contains all the stitching info.
+
+Pros:
+* Pure SDL makes it simpler to implement (other stacks can easily onboard this approach)
+* No need to learn a new DSL: SDL is a well-known format for GraphQL devs
+* Locality: final types are not scattered across multiple service definitions
+
+Cons:
+* The most verbose option of the list
+* Arguably the least readable solution
+
+### Linking
+
+Simple, convention-driven case:
+```
+type Post {
+ id: ID!
+ title: String
+ # this uses id as the default argument name, can be overridden
+ @ResolveWith(inputField:"authorId")
+ author: User
+}
+```
+
+Full definition example:
+```
+type Post {
+ id: ID!
+ title: String
+ @ResolveWith(service:"UserSvc", inputField:"authorId", query: 'user', queryArgument: 'id')
+ author: User
+}
+```
+
+### Full example
+
+```
+@DefinedBy(service:"PostSvc",allowDynamicSchema:true)
+type Post {
+ id: ID!
+ title: String
+ @ResolveWith(service:"UserSvc",inputField:"authorId")
+ author: User
+}
+
+@DefinedBy(service:"UserSvc",allowDynamicSchema:false)
+type User {
+ id: ID!
+ name: String
+ @ResolveWith(service:"PostSvc",argumentName:"authorId")
+ posts: [Post]
+}
+
+@Service(name:"PostSvc", url:"http://posts/graphql")
+@Service(name:"UserSvc", url:"http://users/graphql")
+type Query {
+ @ImplementedBy(service:"PostSvc")
+ post(id:ID!) : Post
+ @ImplementedBy(service:"PostSvc")
+ posts(authorId:ID) : [Post]
+ @ImplementedBy(service:"UserSvc")
+ user(id:ID!): User
+ @ImplementedBy(service:"UserSvc")
+ users: [User]
+}
+```
+
+## Pure DSL
+
+Pros
+
+* Arguably the cleanest input
+* Most complex implementation for libs parsing it
+
+Cons
+
+* One more language to learn (mitigated by the fact it's mostly SDL)
+
+### Linking
+
+Simple, convention-driven case:
+```
+type Post {
+ id: ID!
+ title: String
+ # Resolution of the 'User' type defaults to a 'user' query
+ authorId: ID => author:User
+}
+
+```
+
+Full definition:
+```
+type Post {
+ id: ID!
+ title: String
+ # Here we are informing that the final field will be called "author", will be of type User and will be resolved by
+ # the query 'user', using authorId as the value for argument 'id'
+ authorId: ID => author:User { user(id) }
+}
+
+```
+
+### Enriching
+
+Simple, convention-driven case:
+
+```
+# Using extend is a good, SDL-standard way of saying we are adding fields to a type that is defined elsewhere
+extend type User {
+ # Common fields must match the core type. At least an id field is expected (for matching)
+ id: ID!
+ # This instructs the stitcher to run the 'posts' service, defaulting the 'authorId' argument value to the 'id'
+ posts : [Post] => { posts(authorId) }
+}
+```
+
+Full definition:
+
+```
+# Using extend is a good, SDL-standard way of saying we are adding fields to a type that is defined elsewhere
+extend type User {
+ # Common fields must match the core type. At least an id field is expected (for matching)
+ id: ID!
+ # This instructs the stitcher to run the 'posts' service, using the 'id' field as the value for the 'authorId' argument
+ posts : [Post] => { posts(authorId: id) }
+}
+```
+
+### Full example
+
+```
+service PostSvc {
+ url: "asd"
+
+ type Post {
+ id: ID!
+ title: String
+ authorId: ID => author:User
+ }
+
+ extend type User {
+ id: ID!
+ posts: [Post] => { posts(authorId) }
+ }
+
+ type Query {
+ post(id:ID!) : Post
+ posts(authorId:ID) : [Post]
+ }
+
+}
+
+service UserSvc {
+ url: "xyz"
+ type User {
+ id: ID!
+ name: String
+ }
+
+ type Query {
+ user(id:ID!): User
+ users: [User]
+ }
+}
+```
+
+## Hybrid
+
+### Linking
+
+Simple, convention-driven case:
+```
+ type Post {
+ id: ID!
+ title: String
+ @ConvertTo(type:"User",fieldName:"author")
+ authorId: ID
+ }
+```
+
+Full definition:
+
+```
+ type Post {
+ id: ID!
+ title: String
+ @ConvertTo(type:"User",fieldName:"author",query:"user",argument:"id")
+ authorId: ID
+ }
+```
+
+### Enriching
+
+Simple, convention-driven case:
+```
+ extend type User {
+ id: ID!
+ @ResolveWith(query:"posts",argument:"authorId")
+ posts: [Post]
+ }
+```
+
+Full definition:
+
+```
+ extend type User {
+ id: ID!
+ @ResolveWith(query:"posts",argument:"authorId",value:"id")
+ posts: [Post]
+ }
+```
+
+### Full example
+
+
+```
+service PostSvc {
+ url: "asd"
+ type Post {
+ id: ID!
+ title: String
+ @ConvertTo(type:"User",fieldName:"author")
+ authorId: ID
+ }
+
+ extend type User {
+ id: ID!
+ @ResolveWith(query:"posts",argument:"authorId")
+ posts: [Post]
+ }
+
+ type Query {
+ post(id:ID!) : Post
+ posts(authorId:ID) : [Post]
+ }
+}
+
+service UserSvc {
+ url: "xyz"
+ type User {
+ id: ID!
+ name: String
+ }
+
+ type Query {
+ user(id:ID!): User
+ users: [User]
+ }
+}
+```
\ No newline at end of file
diff --git a/src/main/antlr/dsl-alternatives.md b/src/main/antlr/dsl-alternatives.md
deleted file mode 100644
index cf1adfe354..0000000000
--- a/src/main/antlr/dsl-alternatives.md
+++ /dev/null
@@ -1,237 +0,0 @@
-# DSL alternatives
-
-Resulting stitched schema:
-
-```
-type Post {
- id: ID!
- title: String
- author: User
-}
-
-type User {
- id: ID!
- name: String
- posts: [Post]
-}
-
-type Query {
- post(id:ID!) : Post
- posts(authorId:ID) : [Post]
- user(id:ID!): User
- users: [User]
-}
-
-```
-
-Post service internal schema:
-
-```
-type Post {
- id: ID!
- title: String
- authorId: ID
-}
-
-
-type Query {
- post(id:ID!) : Post
- posts(authorId:ID) : [Post]
-}
-
-```
-
-User service internal schema:
-
-```
-type User {
- id: ID!
- name: String
-}
-
-type Query {
- user(id:ID!): User
- users: [User]
-}
-
-```
-
-## Pure SDL
-
-In this approach, no additional input parsing is needed, as the SDL contains all the stitching info.
-
-Pros:
-* Pure SDL makes it simpler to implement (other stacks can easily onboard this approach)
-* No need to learn a new DSL: SDL is a well-known format for GraphQL devs
-* Locality: final types are not scattered across multiple service definitions
-
-Cons:
-* The most verbose option of the list
-* Arguably the least readable solution
-
-### Linking
-
-Simple, convention-driven case:
-```
-type Post {
- id: ID!
- title: String
- # this uses id as the default argument name, can be overridden
- @ResolvedWith(service:"UserSvc",inputField:"authorId")
- author: User
-}
-```
-
-Full definition example:
-```
-type Post {
- id: ID!
- title: String
- @ResolvedWith(service:"UserSvc", inputField:"authorId", query: 'User', queryArgument: 'id')
- author: User
-}
-```
-
-### Full example
-
-```
-# Service can allow for both URLs or a service nickname (URLs being passed separately)
-# allowDynamicSchema informs the stitcher to automatically add fields from the service into the final stitched schema
-@DefinedBy(service:"PostSvc",allowDynamicSchema:true)
-type Post {
- id: ID!
- title: String
- @ResolvedWith(service:"UserSvc",inputField:"authorId")
- author: User
-}
-
-@DefinedBy(service:"UserSvc",allowDynamicSchema:false)
-type User {
- id: ID!
- name: String
- # This could have a default in case it's just one input argument, but starts getting into magic realm
- # Input value resolves to 'id' by default, can be overridden
- @ResolvedWith(service:"PostSvc",argumentName:"authorId")
- posts: [Post]
-}
-
-@Service(name:"PostSvc", url:"http://posts/graphql")
-@Service(name:"UserSvc", url:"http://users/graphql")
-type Query {
- @ImplementedBy(service:"PostSvc")
- post(id:ID!) : Post
- @ImplementedBy(service:"PostSvc")
- posts(authorId:ID) : [Post]
- @ImplementedBy(service:"UserSvc")
- user(id:ID!): User
- @ImplementedBy(service:"UserSvc")
- users: [User]
-}
-```
-
-## Pure DSL
-
-### Linking
-
-Simple, convention-driven case:
-```
-type Post {
- id: ID!
- title: String
- # Resolution of the 'User' type defaults to a 'user' query
- authorId: ID => author:User
-}
-
-```
-
-Full definition:
-```
-type Post {
- id: ID!
- title: String
- # Resolution of the 'User' type defaults to a 'user' query
- authorId: ID => author:User { user(id) }
-}
-
-```
-
-
-### Full example
-
-```
-service PostSvc {
- url: "asd"
-
- type Post {
- id: ID!
- title: String
- # Resolution of the 'User' type defaults to a 'user' query
- authorId: ID => author:User
- }
-
- extend type User {
- id: ID!
- # Input value for the authorId argument defaults to the entity's id field
- posts: [Post] => { posts(authorId) }
- }
-
- type Query {
- post(id:ID!) : Post
- posts(authorId:ID) : [Post]
- }
-
-}
-
-service UserSvc {
- url: "xyz"
- type User {
- id: ID!
- name: String
- }
-
- type Query {
- user(id:ID!): User
- users: [User]
- }
-}
-```
-
-## Hybrid
-
-```
-service PostSvc {
- url: "asd"
- type Post {
- id: ID!
- title: String
- # User resolves to the query 'user' and authorId resolves to the 'id' argument by convention
- @ConvertTo(type:"User",name:"author")
- authorId: ID
- }
-
- extend type User {
- id: ID!
- # The argument value defaults to the type id so no need to input it as well
- @ResolveWith(query:"posts",argument:"authorId")
- posts: [Post]
- }
-
- type Query {
- post(id:ID!) : Post
- posts(authorId:ID) : [Post]
- }
-}
-
-service UserSvc {
- url: "xyz"
- type User {
- id: ID!
- name: String
- }
-
- type Query {
- user(id:ID!): User
- users: [User]
- }
-}
-```
\ No newline at end of file