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 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> queryIntrospectionSchema() { + return CompletableFuture.completedFuture(queryForJson(out -> { + try { + out.write(INTROSPECTION_QUERY.getBytes(Charset.forName("UTF-8"))); + } catch (IOException e) { + throw new RuntimeException(e); + } + })); + } + + public CompletableFuture> query(OperationDefinition query) { + return CompletableFuture.completedFuture(queryForJson(out -> { + try { + Map body = new LinkedHashMap<>(); + String queryString = AstPrinter.printAst(query); + body.put("query", queryString); + mapper.writeValue(out, body); + } catch (IOException e) { + throw new RuntimeException(e); + } + })); + } + + private Map queryForJson(Consumer bodyWriter) { + try { + final URLConnection urlConnection = remoteUrl.openConnection(); + if (!(urlConnection instanceof HttpURLConnection)) { + throw new RuntimeException("Expected an HTTP endpoint"); + } + final HttpURLConnection connection = (HttpURLConnection) urlConnection; + try { + connection.setDoInput(true); + connection.setDoOutput(true); + connection.setRequestMethod("POST"); + connection.setRequestProperty("Accept", "application/json"); + connection.setRequestProperty("content-type", "application/json"); + + bodyWriter.accept(connection.getOutputStream()); + if (connection.getResponseCode() != 200) { + throw new IOException("Failed with HTTP error code: " + connection.getResponseCode()); + } + return mapper.readerFor(Map.class).readValue(connection.getInputStream()); + } finally { + connection.disconnect(); + } + } catch (IOException ex) { + throw new RuntimeException(ex); + } + } +} diff --git a/src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java b/src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java new file mode 100644 index 0000000000..d3ecef5c83 --- /dev/null +++ b/src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java @@ -0,0 +1,43 @@ +package graphql.schema; + + +import graphql.PublicApi; +import graphql.language.OperationDefinition; +import graphql.language.SelectionSet; +import graphql.language.ServiceDefinition; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Map; +import java.util.concurrent.ExecutionException; + +@PublicApi +public class RemoteRootQueryDataFetcher implements DataFetcher { + + private final HttpRemoteRetriever remoteRetriever; + private ServiceDefinition serviceDefinition; + + public RemoteRootQueryDataFetcher(ServiceDefinition serviceDefinition) { + this.serviceDefinition = serviceDefinition; + try { + this.remoteRetriever = new HttpRemoteRetriever<>(new URL(serviceDefinition.getUrl())); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } + + @Override + public Object get(DataFetchingEnvironment environment) { + OperationDefinition query = new OperationDefinition(); + query.setOperation(OperationDefinition.Operation.QUERY); + query.setSelectionSet(new SelectionSet(environment.getFields())); + try { + Map result = remoteRetriever.query(query).get(); + return result; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + +} diff --git a/src/main/java/graphql/schema/idl/SchemaGenerator.java b/src/main/java/graphql/schema/idl/SchemaGenerator.java index 2f4852813d..5f6a395ba1 100644 --- a/src/main/java/graphql/schema/idl/SchemaGenerator.java +++ b/src/main/java/graphql/schema/idl/SchemaGenerator.java @@ -185,7 +185,6 @@ private GraphQLSchema makeExecutableSchemaImpl(BuildContext buildCtx) { } } } - query = buildOutputType(buildCtx, new TypeName("Query")); Assert.assertNotEmpty(queries, "queries not found"); GraphQLObjectType queryType = buildQueryType(buildCtx, queries); @@ -236,7 +235,8 @@ private GraphQLSchema makeExecutableSchemaImpl(BuildContext buildCtx) { // } // } - Set additionalTypes = buildAdditionalTypes(buildCtx); +// Set additionalTypes = buildAdditionalTypes(buildCtx); + Set additionalTypes = Collections.emptySet(); schemaBuilder.fieldVisibility(buildCtx.getWiring().getFieldVisibility()); return schemaBuilder.build(additionalTypes); diff --git a/src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java b/src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java index 47ade447fe..0b283452ac 100644 --- a/src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java +++ b/src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java @@ -44,7 +44,7 @@ public TypeDefinitionRegistry merge(TypeDefinitionRegistry typeRegistry) throws List errors = new ArrayList<>(); Map tempTypes = new LinkedHashMap<>(); - typeRegistry.types.values().forEach(newEntry -> define(this.types, tempTypes, newEntry).ifPresent(errors::add)); + typeRegistry.types.values().forEach(newEntry -> this.define(this.types, tempTypes, newEntry).ifPresent(errors::add)); Map tempScalarTypes = new LinkedHashMap<>(); typeRegistry.scalarTypes.values().forEach(newEntry -> define(this.scalarTypes, tempScalarTypes, newEntry).ifPresent(errors::add)); @@ -89,15 +89,15 @@ public Optional add(Definition definition) { } else if (definition instanceof ScalarTypeDefinition) { ScalarTypeDefinition newEntry = (ScalarTypeDefinition) definition; return define(scalarTypes, scalarTypes, newEntry); - } 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); + add(typeDefinition); } + } else if (definition instanceof TypeDefinition) { + TypeDefinition newEntry = (TypeDefinition) definition; + return define(types, types, newEntry); } else if (definition instanceof SchemaDefinition) { SchemaDefinition newSchema = (SchemaDefinition) definition; if (schema != null) { From d3e7467445ea59d2f50727e04077862231ef983b Mon Sep 17 00:00:00 2001 From: Andreas Marek Date: Thu, 8 Feb 2018 20:36:40 +1100 Subject: [PATCH 04/19] make it more clear --- src/main/java/graphql/StitchingDSLExample.java | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/src/main/java/graphql/StitchingDSLExample.java b/src/main/java/graphql/StitchingDSLExample.java index 32e6489fb1..aeefab9ae9 100644 --- a/src/main/java/graphql/StitchingDSLExample.java +++ b/src/main/java/graphql/StitchingDSLExample.java @@ -73,17 +73,16 @@ private static Document buildDocument() { 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 schemaParser = new SchemaParser(); - +// schemaParser.parse(schema); + // TODO: remove when ready Document document = buildDocument(); - StitchingRuntimeWiring wiringFactory = new StitchingRuntimeWiring(); - - SchemaParser schemaParser = new SchemaParser(); TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.buildRegistry(document); + StitchingRuntimeWiring wiringFactory = new StitchingRuntimeWiring(); RuntimeWiring runtimeWiring = newRuntimeWiring() .wiringFactory(wiringFactory) .build(); From 27ce1e63e97a484d232258ebe3db99db74930424 Mon Sep 17 00:00:00 2001 From: Andreas Marek Date: Fri, 9 Feb 2018 06:41:03 +1100 Subject: [PATCH 05/19] testing two different services --- .../java/graphql/StitchingDSLExample.java | 50 +++++++++++++++++-- 1 file changed, 47 insertions(+), 3 deletions(-) diff --git a/src/main/java/graphql/StitchingDSLExample.java b/src/main/java/graphql/StitchingDSLExample.java index aeefab9ae9..5c66a1a36e 100644 --- a/src/main/java/graphql/StitchingDSLExample.java +++ b/src/main/java/graphql/StitchingDSLExample.java @@ -70,6 +70,44 @@ private static Document buildDocument() { return document; } + private static Document buildDocument2() { + /** + * service Foo1 { + * type Query { + * hello: String + * } + * } + * service Foo2 { + * type Query { + * hello2: String + * } + * } + */ + ServiceDefinition serviceDefinition1 = new ServiceDefinition("Foo1", "https://4r09jwx0k9.lp.gql.zone/graphql"); + ServiceDefinition serviceDefinition2 = new ServiceDefinition("Foo2", "https://4r09jwx0k9.lp.gql.zone/graphql"); + + FieldDefinition fieldDefinition1 = new FieldDefinition("hello"); + fieldDefinition1.setType(new TypeName("String")); + fieldDefinition1.setServiceDefinition(serviceDefinition1); + + ObjectTypeDefinition objectTypeDefinition1 = new ObjectTypeDefinition("Query"); + objectTypeDefinition1.getFieldDefinitions().add(fieldDefinition1); + serviceDefinition1.setTypeDefinitions(Collections.singletonList(objectTypeDefinition1)); + + FieldDefinition fieldDefinition2 = new FieldDefinition("hello2"); + fieldDefinition2.setType(new TypeName("String")); + fieldDefinition2.setServiceDefinition(serviceDefinition2); + + ObjectTypeDefinition objectTypeDefinition2 = new ObjectTypeDefinition("Query"); + objectTypeDefinition2.getFieldDefinitions().add(fieldDefinition2); + serviceDefinition2.setTypeDefinitions(Collections.singletonList(objectTypeDefinition2)); + + Document document = new Document(); + document.setDefinitions(Arrays.asList(serviceDefinition1, serviceDefinition2)); + return document; + + } + public static void main(String[] args) throws IOException { @@ -78,7 +116,7 @@ public static void main(String[] args) throws IOException { // String schema = Files.readAllLines(Paths.get("./stitching-dsl.txt")).stream().collect(Collectors.joining()); // schemaParser.parse(schema); // TODO: remove when ready - Document document = buildDocument(); + Document document = buildDocument2(); TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.buildRegistry(document); @@ -95,9 +133,15 @@ public static void main(String[] args) throws IOException { System.out.println("schema:" + printed); GraphQL build = GraphQL.newGraphQL(graphQLSchema).build(); - ExecutionResult executionResult = build.execute("{hello}"); - System.out.println(executionResult.getData().toString()); + ExecutionResult executionResult1 = build.execute("{hello}"); + System.out.println(executionResult1.getData().toString()); + + + ExecutionResult executionResult2 = build.execute("{hello2}"); + System.out.println(executionResult2.getData().toString()); + + } } From 20b2db797c94ea6be705ca59dc4af54d11bb7d29 Mon Sep 17 00:00:00 2001 From: Andreas Marek Date: Fri, 9 Feb 2018 07:00:05 +1100 Subject: [PATCH 06/19] first example with two linked services started --- .../java/graphql/StitchingDSLExample.java | 119 ++++++++++++++++-- 1 file changed, 109 insertions(+), 10 deletions(-) diff --git a/src/main/java/graphql/StitchingDSLExample.java b/src/main/java/graphql/StitchingDSLExample.java index 5c66a1a36e..d68100836e 100644 --- a/src/main/java/graphql/StitchingDSLExample.java +++ b/src/main/java/graphql/StitchingDSLExample.java @@ -2,6 +2,8 @@ import graphql.language.Document; import graphql.language.FieldDefinition; +import graphql.language.InputValueDefinition; +import graphql.language.ListType; import graphql.language.ObjectTypeDefinition; import graphql.language.ServiceDefinition; import graphql.language.TypeDefinition; @@ -108,6 +110,104 @@ private static Document buildDocument2() { } + private static Document buildDocument3() { + /** + * service User { + * type User { + * id: ID + * name: String + * } + * type Query { + * user(id:ID): User + * } + * } + * service Posts { + * type Post { + * id: ID + * authorId: ID => author: User + * } + * type Query { + * posts: [Post] + * } + * } + */ + ServiceDefinition postsService = buildPostsService(); + ServiceDefinition usersService = buildUsersService(); + Document document = new Document(); + document.setDefinitions(Arrays.asList(postsService, usersService)); + return document; + + } + + private static ServiceDefinition buildPostsService() { + /** + * service Posts { + * type Post { + * id: ID + * authorId: ID => author: User + * } + * type Query { + * posts: [Post] + * } + * } + */ + ServiceDefinition serviceDefinition = new ServiceDefinition("Posts", "https://4r09jwx0k9.lp.gql.zone/graphql"); + ObjectTypeDefinition postTypeDefinition = new ObjectTypeDefinition("Post"); + postTypeDefinition.getFieldDefinitions().add(newFieldDefinition(serviceDefinition, "id", "ID")); + postTypeDefinition.getFieldDefinitions().add(newFieldDefinition(serviceDefinition, "authorId", "ID")); + + ObjectTypeDefinition queryTypeDefinition = new ObjectTypeDefinition("Query"); + + FieldDefinition userField = newFieldDefinitionOfListType(serviceDefinition, "posts", "Post"); + queryTypeDefinition.getFieldDefinitions().add(userField); + + serviceDefinition.setTypeDefinitions(Arrays.asList(queryTypeDefinition, postTypeDefinition)); + return serviceDefinition; + } + + private static ServiceDefinition buildUsersService() { + /** + * service User { + * type User { + * id: ID + * name: String + * } + * type Query { + * user(id:ID): User + * } + * } + */ + ServiceDefinition serviceDefinition = new ServiceDefinition("Users", "https://4r09jwx0k9.lp.gql.zone/graphql"); + ObjectTypeDefinition userTypeDefinition = new ObjectTypeDefinition("User"); + userTypeDefinition.getFieldDefinitions().add(newFieldDefinition(serviceDefinition, "id", "ID")); + userTypeDefinition.getFieldDefinitions().add(newFieldDefinition(serviceDefinition, "name", "String")); + + ObjectTypeDefinition queryTypeDefinition = new ObjectTypeDefinition("Query"); + + FieldDefinition userField = newFieldDefinition(serviceDefinition, "user", "User"); + InputValueDefinition userFieldInput = new InputValueDefinition("id"); + userFieldInput.setType(new TypeName("ID")); + userField.getInputValueDefinitions().add(userFieldInput); + queryTypeDefinition.getFieldDefinitions().add(userField); + + + serviceDefinition.setTypeDefinitions(Arrays.asList(queryTypeDefinition, userTypeDefinition)); + return serviceDefinition; + } + + private static FieldDefinition newFieldDefinition(ServiceDefinition serviceDefinition, String name, String type) { + FieldDefinition userField = new FieldDefinition(name); + userField.setServiceDefinition(serviceDefinition); + userField.setType(new TypeName(type)); + return userField; + } + + private static FieldDefinition newFieldDefinitionOfListType(ServiceDefinition serviceDefinition, String name, String type) { + FieldDefinition userField = new FieldDefinition(name); + userField.setServiceDefinition(serviceDefinition); + userField.setType(new ListType(new TypeName(type))); + return userField; + } public static void main(String[] args) throws IOException { @@ -116,7 +216,7 @@ public static void main(String[] args) throws IOException { // String schema = Files.readAllLines(Paths.get("./stitching-dsl.txt")).stream().collect(Collectors.joining()); // schemaParser.parse(schema); // TODO: remove when ready - Document document = buildDocument2(); + Document document = buildDocument3(); TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.buildRegistry(document); @@ -132,15 +232,14 @@ public static void main(String[] args) throws IOException { String printed = schemaPrinter.print(graphQLSchema); System.out.println("schema:" + printed); - GraphQL build = GraphQL.newGraphQL(graphQLSchema).build(); - - ExecutionResult executionResult1 = build.execute("{hello}"); - System.out.println(executionResult1.getData().toString()); - - - ExecutionResult executionResult2 = build.execute("{hello2}"); - System.out.println(executionResult2.getData().toString()); - +// GraphQL build = GraphQL.newGraphQL(graphQLSchema).build(); +// +// ExecutionResult executionResult1 = build.execute("{hello}"); +// System.out.println(executionResult1.getData().toString()); +// +// +// ExecutionResult executionResult2 = build.execute("{hello2}"); +// System.out.println(executionResult2.getData().toString()); } From 2f02b78e783f2ab4147ede3fb3f241547b18212c Mon Sep 17 00:00:00 2001 From: Diogo Lucas Date: Fri, 9 Feb 2018 08:53:12 +1100 Subject: [PATCH 07/19] wip --- src/main/antlr/Graphql.g4 | 7 +- src/main/gen/Graphql.tokens | 78 + src/main/gen/GraphqlBaseListener.java | 761 +++ src/main/gen/GraphqlBaseVisitor.java | 443 ++ src/main/gen/GraphqlLexer.java | 267 + src/main/gen/GraphqlLexer.tokens | 78 + src/main/gen/GraphqlListener.java | 612 +++ src/main/gen/GraphqlParser.java | 4344 +++++++++++++++++ src/main/gen/GraphqlVisitor.java | 381 ++ .../graphql/language/ServiceDefinition.java | 9 +- .../parser/GraphqlAntlrToLanguage.java | 74 +- .../groovy/graphql/parser/ParserTest.groovy | 24 +- 12 files changed, 7018 insertions(+), 60 deletions(-) create mode 100644 src/main/gen/Graphql.tokens create mode 100644 src/main/gen/GraphqlBaseListener.java create mode 100644 src/main/gen/GraphqlBaseVisitor.java create mode 100644 src/main/gen/GraphqlLexer.java create mode 100644 src/main/gen/GraphqlLexer.tokens create mode 100644 src/main/gen/GraphqlListener.java create mode 100644 src/main/gen/GraphqlParser.java create mode 100644 src/main/gen/GraphqlVisitor.java diff --git a/src/main/antlr/Graphql.g4 b/src/main/antlr/Graphql.g4 index c917fddf48..b4c9352709 100644 --- a/src/main/antlr/Graphql.g4 +++ b/src/main/antlr/Graphql.g4 @@ -4,7 +4,7 @@ grammar Graphql; package graphql.parser.antlr; } -// Document +// Document document : definition+; @@ -16,9 +16,8 @@ serviceDefinition ; serviceDefinition: -'service' name '{' serviceUrl '}' ; -serviceUrl: 'url' ':' url; -url: 'someUrl'; +'service' name '{' serviceUrl typeSystemDefinition '}' ; +serviceUrl: 'url' ':' stringValue; operationDefinition: selectionSet | diff --git a/src/main/gen/Graphql.tokens b/src/main/gen/Graphql.tokens new file mode 100644 index 0000000000..1975f9ed99 --- /dev/null +++ b/src/main/gen/Graphql.tokens @@ -0,0 +1,78 @@ +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 +'service'=1 +'{'=2 +'}'=3 +'url'=4 +':'=5 +'('=6 +')'=7 +'$'=8 +'='=9 +'...'=10 +'on'=11 +'['=12 +']'=13 +'@'=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 diff --git a/src/main/gen/GraphqlBaseListener.java b/src/main/gen/GraphqlBaseListener.java new file mode 100644 index 0000000000..e75f336995 --- /dev/null +++ b/src/main/gen/GraphqlBaseListener.java @@ -0,0 +1,761 @@ +// Generated from /Users/dlucas/src/oss/graphql-java/src/main/antlr/Graphql.g4 by ANTLR 4.7 + + package graphql.parser.antlr; + + +import org.antlr.v4.runtime.ParserRuleContext; +import org.antlr.v4.runtime.tree.ErrorNode; +import org.antlr.v4.runtime.tree.TerminalNode; + +/** + * This class provides an empty implementation of {@link GraphqlListener}, + * which can be extended to create a listener which only needs to handle a subset + * of the available methods. + */ +public class GraphqlBaseListener implements GraphqlListener { + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDocument(GraphqlParser.DocumentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDocument(GraphqlParser.DocumentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDefinition(GraphqlParser.DefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDefinition(GraphqlParser.DefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterServiceUrl(GraphqlParser.ServiceUrlContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitServiceUrl(GraphqlParser.ServiceUrlContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOperationDefinition(GraphqlParser.OperationDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOperationDefinition(GraphqlParser.OperationDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOperationType(GraphqlParser.OperationTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOperationType(GraphqlParser.OperationTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVariableDefinitions(GraphqlParser.VariableDefinitionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVariableDefinitions(GraphqlParser.VariableDefinitionsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVariableDefinition(GraphqlParser.VariableDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVariableDefinition(GraphqlParser.VariableDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterVariable(GraphqlParser.VariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitVariable(GraphqlParser.VariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDefaultValue(GraphqlParser.DefaultValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDefaultValue(GraphqlParser.DefaultValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelectionSet(GraphqlParser.SelectionSetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelectionSet(GraphqlParser.SelectionSetContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSelection(GraphqlParser.SelectionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSelection(GraphqlParser.SelectionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterField(GraphqlParser.FieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitField(GraphqlParser.FieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterAlias(GraphqlParser.AliasContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitAlias(GraphqlParser.AliasContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArguments(GraphqlParser.ArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArguments(GraphqlParser.ArgumentsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArgument(GraphqlParser.ArgumentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArgument(GraphqlParser.ArgumentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFragmentSpread(GraphqlParser.FragmentSpreadContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFragmentSpread(GraphqlParser.FragmentSpreadContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInlineFragment(GraphqlParser.InlineFragmentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInlineFragment(GraphqlParser.InlineFragmentContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFragmentDefinition(GraphqlParser.FragmentDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFragmentDefinition(GraphqlParser.FragmentDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFragmentName(GraphqlParser.FragmentNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFragmentName(GraphqlParser.FragmentNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeCondition(GraphqlParser.TypeConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeCondition(GraphqlParser.TypeConditionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterName(GraphqlParser.NameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitName(GraphqlParser.NameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterValue(GraphqlParser.ValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitValue(GraphqlParser.ValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterValueWithVariable(GraphqlParser.ValueWithVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitValueWithVariable(GraphqlParser.ValueWithVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterStringValue(GraphqlParser.StringValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitStringValue(GraphqlParser.StringValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDescription(GraphqlParser.DescriptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDescription(GraphqlParser.DescriptionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEnumValue(GraphqlParser.EnumValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEnumValue(GraphqlParser.EnumValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArrayValue(GraphqlParser.ArrayValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArrayValue(GraphqlParser.ArrayValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArrayValueWithVariable(GraphqlParser.ArrayValueWithVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArrayValueWithVariable(GraphqlParser.ArrayValueWithVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObjectValue(GraphqlParser.ObjectValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObjectValue(GraphqlParser.ObjectValueContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObjectValueWithVariable(GraphqlParser.ObjectValueWithVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObjectValueWithVariable(GraphqlParser.ObjectValueWithVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObjectField(GraphqlParser.ObjectFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObjectField(GraphqlParser.ObjectFieldContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObjectFieldWithVariable(GraphqlParser.ObjectFieldWithVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObjectFieldWithVariable(GraphqlParser.ObjectFieldWithVariableContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDirectives(GraphqlParser.DirectivesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDirectives(GraphqlParser.DirectivesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDirective(GraphqlParser.DirectiveContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDirective(GraphqlParser.DirectiveContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterType(GraphqlParser.TypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitType(GraphqlParser.TypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeName(GraphqlParser.TypeNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeName(GraphqlParser.TypeNameContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterListType(GraphqlParser.ListTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitListType(GraphqlParser.ListTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterNonNullType(GraphqlParser.NonNullTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitNonNullType(GraphqlParser.NonNullTypeContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeSystemDefinition(GraphqlParser.TypeSystemDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeSystemDefinition(GraphqlParser.TypeSystemDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterSchemaDefinition(GraphqlParser.SchemaDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitSchemaDefinition(GraphqlParser.SchemaDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterOperationTypeDefinition(GraphqlParser.OperationTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitOperationTypeDefinition(GraphqlParser.OperationTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeDefinition(GraphqlParser.TypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeDefinition(GraphqlParser.TypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterScalarTypeDefinition(GraphqlParser.ScalarTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitScalarTypeDefinition(GraphqlParser.ScalarTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterObjectTypeDefinition(GraphqlParser.ObjectTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitObjectTypeDefinition(GraphqlParser.ObjectTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterImplementsInterfaces(GraphqlParser.ImplementsInterfacesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitImplementsInterfaces(GraphqlParser.ImplementsInterfacesContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFieldsDefinition(GraphqlParser.FieldsDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFieldsDefinition(GraphqlParser.FieldsDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterFieldDefinition(GraphqlParser.FieldDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitFieldDefinition(GraphqlParser.FieldDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterArgumentsDefinition(GraphqlParser.ArgumentsDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitArgumentsDefinition(GraphqlParser.ArgumentsDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInputValueDefinition(GraphqlParser.InputValueDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInputValueDefinition(GraphqlParser.InputValueDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInterfaceTypeDefinition(GraphqlParser.InterfaceTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInterfaceTypeDefinition(GraphqlParser.InterfaceTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnionTypeDefinition(GraphqlParser.UnionTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnionTypeDefinition(GraphqlParser.UnionTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterUnionMembers(GraphqlParser.UnionMembersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitUnionMembers(GraphqlParser.UnionMembersContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEnumTypeDefinition(GraphqlParser.EnumTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEnumTypeDefinition(GraphqlParser.EnumTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEnumValueDefinition(GraphqlParser.EnumValueDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEnumValueDefinition(GraphqlParser.EnumValueDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterInputObjectTypeDefinition(GraphqlParser.InputObjectTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitInputObjectTypeDefinition(GraphqlParser.InputObjectTypeDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterTypeExtensionDefinition(GraphqlParser.TypeExtensionDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitTypeExtensionDefinition(GraphqlParser.TypeExtensionDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDirectiveDefinition(GraphqlParser.DirectiveDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDirectiveDefinition(GraphqlParser.DirectiveDefinitionContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDirectiveLocation(GraphqlParser.DirectiveLocationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDirectiveLocation(GraphqlParser.DirectiveLocationContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterDirectiveLocations(GraphqlParser.DirectiveLocationsContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitDirectiveLocations(GraphqlParser.DirectiveLocationsContext ctx) { } + + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void enterEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void exitEveryRule(ParserRuleContext ctx) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitTerminal(TerminalNode node) { } + /** + * {@inheritDoc} + * + *

The default implementation does nothing.

+ */ + @Override public void visitErrorNode(ErrorNode node) { } +} \ No newline at end of file diff --git a/src/main/gen/GraphqlBaseVisitor.java b/src/main/gen/GraphqlBaseVisitor.java new file mode 100644 index 0000000000..2e4eec1d01 --- /dev/null +++ b/src/main/gen/GraphqlBaseVisitor.java @@ -0,0 +1,443 @@ +// Generated from /Users/dlucas/src/oss/graphql-java/src/main/antlr/Graphql.g4 by ANTLR 4.7 + + package graphql.parser.antlr; + +import org.antlr.v4.runtime.tree.AbstractParseTreeVisitor; + +/** + * This class provides an empty implementation of {@link GraphqlVisitor}, + * which can be extended to create a visitor which only needs to handle a subset + * of the available methods. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public class GraphqlBaseVisitor extends AbstractParseTreeVisitor implements GraphqlVisitor { + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDocument(GraphqlParser.DocumentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDefinition(GraphqlParser.DefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @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} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOperationDefinition(GraphqlParser.OperationDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOperationType(GraphqlParser.OperationTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVariableDefinitions(GraphqlParser.VariableDefinitionsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVariableDefinition(GraphqlParser.VariableDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitVariable(GraphqlParser.VariableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDefaultValue(GraphqlParser.DefaultValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelectionSet(GraphqlParser.SelectionSetContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSelection(GraphqlParser.SelectionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitField(GraphqlParser.FieldContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitAlias(GraphqlParser.AliasContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitArguments(GraphqlParser.ArgumentsContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitArgument(GraphqlParser.ArgumentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFragmentSpread(GraphqlParser.FragmentSpreadContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInlineFragment(GraphqlParser.InlineFragmentContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFragmentDefinition(GraphqlParser.FragmentDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFragmentName(GraphqlParser.FragmentNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTypeCondition(GraphqlParser.TypeConditionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitName(GraphqlParser.NameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitValue(GraphqlParser.ValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitValueWithVariable(GraphqlParser.ValueWithVariableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitStringValue(GraphqlParser.StringValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDescription(GraphqlParser.DescriptionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEnumValue(GraphqlParser.EnumValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitArrayValue(GraphqlParser.ArrayValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitArrayValueWithVariable(GraphqlParser.ArrayValueWithVariableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitObjectValue(GraphqlParser.ObjectValueContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitObjectValueWithVariable(GraphqlParser.ObjectValueWithVariableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitObjectField(GraphqlParser.ObjectFieldContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitObjectFieldWithVariable(GraphqlParser.ObjectFieldWithVariableContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDirectives(GraphqlParser.DirectivesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDirective(GraphqlParser.DirectiveContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitType(GraphqlParser.TypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTypeName(GraphqlParser.TypeNameContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitListType(GraphqlParser.ListTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitNonNullType(GraphqlParser.NonNullTypeContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTypeSystemDefinition(GraphqlParser.TypeSystemDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitSchemaDefinition(GraphqlParser.SchemaDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitOperationTypeDefinition(GraphqlParser.OperationTypeDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTypeDefinition(GraphqlParser.TypeDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitScalarTypeDefinition(GraphqlParser.ScalarTypeDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitObjectTypeDefinition(GraphqlParser.ObjectTypeDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitImplementsInterfaces(GraphqlParser.ImplementsInterfacesContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitFieldsDefinition(GraphqlParser.FieldsDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@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 visitArgumentsDefinition(GraphqlParser.ArgumentsDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInputValueDefinition(GraphqlParser.InputValueDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInterfaceTypeDefinition(GraphqlParser.InterfaceTypeDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUnionTypeDefinition(GraphqlParser.UnionTypeDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitUnionMembers(GraphqlParser.UnionMembersContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEnumTypeDefinition(GraphqlParser.EnumTypeDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitEnumValueDefinition(GraphqlParser.EnumValueDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitInputObjectTypeDefinition(GraphqlParser.InputObjectTypeDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitTypeExtensionDefinition(GraphqlParser.TypeExtensionDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDirectiveDefinition(GraphqlParser.DirectiveDefinitionContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDirectiveLocation(GraphqlParser.DirectiveLocationContext ctx) { return visitChildren(ctx); } + /** + * {@inheritDoc} + * + *

The default implementation returns the result of calling + * {@link #visitChildren} on {@code ctx}.

+ */ + @Override public T visitDirectiveLocations(GraphqlParser.DirectiveLocationsContext ctx) { return visitChildren(ctx); } +} \ No newline at end of file diff --git a/src/main/gen/GraphqlLexer.java b/src/main/gen/GraphqlLexer.java new file mode 100644 index 0000000000..67c9b7baf9 --- /dev/null +++ b/src/main/gen/GraphqlLexer.java @@ -0,0 +1,267 @@ +// Generated from /Users/dlucas/src/oss/graphql-java/src/main/antlr/Graphql.g4 by ANTLR 4.7 + + package graphql.parser.antlr; + +import org.antlr.v4.runtime.Lexer; +import org.antlr.v4.runtime.CharStream; +import org.antlr.v4.runtime.Token; +import org.antlr.v4.runtime.TokenStream; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.misc.*; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class GraphqlLexer extends Lexer { + static { RuntimeMetaData.checkVersion("4.7", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + 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; + public static String[] channelNames = { + "DEFAULT_TOKEN_CHANNEL", "HIDDEN" + }; + + public static String[] modeNames = { + "DEFAULT_MODE" + }; + + 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", + "TripleQuotedStringValue", "TripleQuotedStringPart", "EscapedTripleQuote", + "SourceCharacter", "Comment", "Ignored", "EscapedChar", "Unicode", "Hex", + "LineTerminator", "Whitespace", "Comma", "UnicodeBOM" + }; + + 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, "'-'" + }; + 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" + }; + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + + public GraphqlLexer(CharStream input) { + super(input); + _interp = new LexerATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + + @Override + public String getGrammarFileName() { return "Graphql.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public String[] getChannelNames() { return channelNames; } + + @Override + public String[] getModeNames() { return modeNames; } + + @Override + 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"+ + "\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"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/src/main/gen/GraphqlLexer.tokens b/src/main/gen/GraphqlLexer.tokens new file mode 100644 index 0000000000..1975f9ed99 --- /dev/null +++ b/src/main/gen/GraphqlLexer.tokens @@ -0,0 +1,78 @@ +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 +'service'=1 +'{'=2 +'}'=3 +'url'=4 +':'=5 +'('=6 +')'=7 +'$'=8 +'='=9 +'...'=10 +'on'=11 +'['=12 +']'=13 +'@'=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 diff --git a/src/main/gen/GraphqlListener.java b/src/main/gen/GraphqlListener.java new file mode 100644 index 0000000000..2cd5aa58c2 --- /dev/null +++ b/src/main/gen/GraphqlListener.java @@ -0,0 +1,612 @@ +// Generated from /Users/dlucas/src/oss/graphql-java/src/main/antlr/Graphql.g4 by ANTLR 4.7 + + package graphql.parser.antlr; + +import org.antlr.v4.runtime.tree.ParseTreeListener; + +/** + * This interface defines a complete listener for a parse tree produced by + * {@link GraphqlParser}. + */ +public interface GraphqlListener extends ParseTreeListener { + /** + * Enter a parse tree produced by {@link GraphqlParser#document}. + * @param ctx the parse tree + */ + void enterDocument(GraphqlParser.DocumentContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#document}. + * @param ctx the parse tree + */ + void exitDocument(GraphqlParser.DocumentContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#definition}. + * @param ctx the parse tree + */ + void enterDefinition(GraphqlParser.DefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#definition}. + * @param ctx the parse tree + */ + void exitDefinition(GraphqlParser.DefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#serviceDefinition}. + * @param ctx the parse tree + */ + void enterServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#serviceDefinition}. + * @param ctx the parse tree + */ + void exitServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#serviceUrl}. + * @param ctx the parse tree + */ + void enterServiceUrl(GraphqlParser.ServiceUrlContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#serviceUrl}. + * @param ctx the parse tree + */ + void exitServiceUrl(GraphqlParser.ServiceUrlContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#operationDefinition}. + * @param ctx the parse tree + */ + void enterOperationDefinition(GraphqlParser.OperationDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#operationDefinition}. + * @param ctx the parse tree + */ + void exitOperationDefinition(GraphqlParser.OperationDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#operationType}. + * @param ctx the parse tree + */ + void enterOperationType(GraphqlParser.OperationTypeContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#operationType}. + * @param ctx the parse tree + */ + void exitOperationType(GraphqlParser.OperationTypeContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#variableDefinitions}. + * @param ctx the parse tree + */ + void enterVariableDefinitions(GraphqlParser.VariableDefinitionsContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#variableDefinitions}. + * @param ctx the parse tree + */ + void exitVariableDefinitions(GraphqlParser.VariableDefinitionsContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#variableDefinition}. + * @param ctx the parse tree + */ + void enterVariableDefinition(GraphqlParser.VariableDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#variableDefinition}. + * @param ctx the parse tree + */ + void exitVariableDefinition(GraphqlParser.VariableDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#variable}. + * @param ctx the parse tree + */ + void enterVariable(GraphqlParser.VariableContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#variable}. + * @param ctx the parse tree + */ + void exitVariable(GraphqlParser.VariableContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#defaultValue}. + * @param ctx the parse tree + */ + void enterDefaultValue(GraphqlParser.DefaultValueContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#defaultValue}. + * @param ctx the parse tree + */ + void exitDefaultValue(GraphqlParser.DefaultValueContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#selectionSet}. + * @param ctx the parse tree + */ + void enterSelectionSet(GraphqlParser.SelectionSetContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#selectionSet}. + * @param ctx the parse tree + */ + void exitSelectionSet(GraphqlParser.SelectionSetContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#selection}. + * @param ctx the parse tree + */ + void enterSelection(GraphqlParser.SelectionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#selection}. + * @param ctx the parse tree + */ + void exitSelection(GraphqlParser.SelectionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#field}. + * @param ctx the parse tree + */ + void enterField(GraphqlParser.FieldContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#field}. + * @param ctx the parse tree + */ + void exitField(GraphqlParser.FieldContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#alias}. + * @param ctx the parse tree + */ + void enterAlias(GraphqlParser.AliasContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#alias}. + * @param ctx the parse tree + */ + void exitAlias(GraphqlParser.AliasContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#arguments}. + * @param ctx the parse tree + */ + void enterArguments(GraphqlParser.ArgumentsContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#arguments}. + * @param ctx the parse tree + */ + void exitArguments(GraphqlParser.ArgumentsContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#argument}. + * @param ctx the parse tree + */ + void enterArgument(GraphqlParser.ArgumentContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#argument}. + * @param ctx the parse tree + */ + void exitArgument(GraphqlParser.ArgumentContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#fragmentSpread}. + * @param ctx the parse tree + */ + void enterFragmentSpread(GraphqlParser.FragmentSpreadContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#fragmentSpread}. + * @param ctx the parse tree + */ + void exitFragmentSpread(GraphqlParser.FragmentSpreadContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#inlineFragment}. + * @param ctx the parse tree + */ + void enterInlineFragment(GraphqlParser.InlineFragmentContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#inlineFragment}. + * @param ctx the parse tree + */ + void exitInlineFragment(GraphqlParser.InlineFragmentContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#fragmentDefinition}. + * @param ctx the parse tree + */ + void enterFragmentDefinition(GraphqlParser.FragmentDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#fragmentDefinition}. + * @param ctx the parse tree + */ + void exitFragmentDefinition(GraphqlParser.FragmentDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#fragmentName}. + * @param ctx the parse tree + */ + void enterFragmentName(GraphqlParser.FragmentNameContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#fragmentName}. + * @param ctx the parse tree + */ + void exitFragmentName(GraphqlParser.FragmentNameContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#typeCondition}. + * @param ctx the parse tree + */ + void enterTypeCondition(GraphqlParser.TypeConditionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#typeCondition}. + * @param ctx the parse tree + */ + void exitTypeCondition(GraphqlParser.TypeConditionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#name}. + * @param ctx the parse tree + */ + void enterName(GraphqlParser.NameContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#name}. + * @param ctx the parse tree + */ + void exitName(GraphqlParser.NameContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#value}. + * @param ctx the parse tree + */ + void enterValue(GraphqlParser.ValueContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#value}. + * @param ctx the parse tree + */ + void exitValue(GraphqlParser.ValueContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#valueWithVariable}. + * @param ctx the parse tree + */ + void enterValueWithVariable(GraphqlParser.ValueWithVariableContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#valueWithVariable}. + * @param ctx the parse tree + */ + void exitValueWithVariable(GraphqlParser.ValueWithVariableContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#stringValue}. + * @param ctx the parse tree + */ + void enterStringValue(GraphqlParser.StringValueContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#stringValue}. + * @param ctx the parse tree + */ + void exitStringValue(GraphqlParser.StringValueContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#description}. + * @param ctx the parse tree + */ + void enterDescription(GraphqlParser.DescriptionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#description}. + * @param ctx the parse tree + */ + void exitDescription(GraphqlParser.DescriptionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#enumValue}. + * @param ctx the parse tree + */ + void enterEnumValue(GraphqlParser.EnumValueContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#enumValue}. + * @param ctx the parse tree + */ + void exitEnumValue(GraphqlParser.EnumValueContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#arrayValue}. + * @param ctx the parse tree + */ + void enterArrayValue(GraphqlParser.ArrayValueContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#arrayValue}. + * @param ctx the parse tree + */ + void exitArrayValue(GraphqlParser.ArrayValueContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#arrayValueWithVariable}. + * @param ctx the parse tree + */ + void enterArrayValueWithVariable(GraphqlParser.ArrayValueWithVariableContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#arrayValueWithVariable}. + * @param ctx the parse tree + */ + void exitArrayValueWithVariable(GraphqlParser.ArrayValueWithVariableContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#objectValue}. + * @param ctx the parse tree + */ + void enterObjectValue(GraphqlParser.ObjectValueContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#objectValue}. + * @param ctx the parse tree + */ + void exitObjectValue(GraphqlParser.ObjectValueContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#objectValueWithVariable}. + * @param ctx the parse tree + */ + void enterObjectValueWithVariable(GraphqlParser.ObjectValueWithVariableContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#objectValueWithVariable}. + * @param ctx the parse tree + */ + void exitObjectValueWithVariable(GraphqlParser.ObjectValueWithVariableContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#objectField}. + * @param ctx the parse tree + */ + void enterObjectField(GraphqlParser.ObjectFieldContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#objectField}. + * @param ctx the parse tree + */ + void exitObjectField(GraphqlParser.ObjectFieldContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#objectFieldWithVariable}. + * @param ctx the parse tree + */ + void enterObjectFieldWithVariable(GraphqlParser.ObjectFieldWithVariableContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#objectFieldWithVariable}. + * @param ctx the parse tree + */ + void exitObjectFieldWithVariable(GraphqlParser.ObjectFieldWithVariableContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#directives}. + * @param ctx the parse tree + */ + void enterDirectives(GraphqlParser.DirectivesContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#directives}. + * @param ctx the parse tree + */ + void exitDirectives(GraphqlParser.DirectivesContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#directive}. + * @param ctx the parse tree + */ + void enterDirective(GraphqlParser.DirectiveContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#directive}. + * @param ctx the parse tree + */ + void exitDirective(GraphqlParser.DirectiveContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#type}. + * @param ctx the parse tree + */ + void enterType(GraphqlParser.TypeContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#type}. + * @param ctx the parse tree + */ + void exitType(GraphqlParser.TypeContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#typeName}. + * @param ctx the parse tree + */ + void enterTypeName(GraphqlParser.TypeNameContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#typeName}. + * @param ctx the parse tree + */ + void exitTypeName(GraphqlParser.TypeNameContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#listType}. + * @param ctx the parse tree + */ + void enterListType(GraphqlParser.ListTypeContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#listType}. + * @param ctx the parse tree + */ + void exitListType(GraphqlParser.ListTypeContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#nonNullType}. + * @param ctx the parse tree + */ + void enterNonNullType(GraphqlParser.NonNullTypeContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#nonNullType}. + * @param ctx the parse tree + */ + void exitNonNullType(GraphqlParser.NonNullTypeContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#typeSystemDefinition}. + * @param ctx the parse tree + */ + void enterTypeSystemDefinition(GraphqlParser.TypeSystemDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#typeSystemDefinition}. + * @param ctx the parse tree + */ + void exitTypeSystemDefinition(GraphqlParser.TypeSystemDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#schemaDefinition}. + * @param ctx the parse tree + */ + void enterSchemaDefinition(GraphqlParser.SchemaDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#schemaDefinition}. + * @param ctx the parse tree + */ + void exitSchemaDefinition(GraphqlParser.SchemaDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#operationTypeDefinition}. + * @param ctx the parse tree + */ + void enterOperationTypeDefinition(GraphqlParser.OperationTypeDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#operationTypeDefinition}. + * @param ctx the parse tree + */ + void exitOperationTypeDefinition(GraphqlParser.OperationTypeDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#typeDefinition}. + * @param ctx the parse tree + */ + void enterTypeDefinition(GraphqlParser.TypeDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#typeDefinition}. + * @param ctx the parse tree + */ + void exitTypeDefinition(GraphqlParser.TypeDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#scalarTypeDefinition}. + * @param ctx the parse tree + */ + void enterScalarTypeDefinition(GraphqlParser.ScalarTypeDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#scalarTypeDefinition}. + * @param ctx the parse tree + */ + void exitScalarTypeDefinition(GraphqlParser.ScalarTypeDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#objectTypeDefinition}. + * @param ctx the parse tree + */ + void enterObjectTypeDefinition(GraphqlParser.ObjectTypeDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#objectTypeDefinition}. + * @param ctx the parse tree + */ + void exitObjectTypeDefinition(GraphqlParser.ObjectTypeDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#implementsInterfaces}. + * @param ctx the parse tree + */ + void enterImplementsInterfaces(GraphqlParser.ImplementsInterfacesContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#implementsInterfaces}. + * @param ctx the parse tree + */ + void exitImplementsInterfaces(GraphqlParser.ImplementsInterfacesContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#fieldsDefinition}. + * @param ctx the parse tree + */ + void enterFieldsDefinition(GraphqlParser.FieldsDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#fieldsDefinition}. + * @param ctx the parse tree + */ + void exitFieldsDefinition(GraphqlParser.FieldsDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#fieldDefinition}. + * @param ctx the parse tree + */ + void enterFieldDefinition(GraphqlParser.FieldDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#fieldDefinition}. + * @param ctx the parse tree + */ + void exitFieldDefinition(GraphqlParser.FieldDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#argumentsDefinition}. + * @param ctx the parse tree + */ + void enterArgumentsDefinition(GraphqlParser.ArgumentsDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#argumentsDefinition}. + * @param ctx the parse tree + */ + void exitArgumentsDefinition(GraphqlParser.ArgumentsDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#inputValueDefinition}. + * @param ctx the parse tree + */ + void enterInputValueDefinition(GraphqlParser.InputValueDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#inputValueDefinition}. + * @param ctx the parse tree + */ + void exitInputValueDefinition(GraphqlParser.InputValueDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#interfaceTypeDefinition}. + * @param ctx the parse tree + */ + void enterInterfaceTypeDefinition(GraphqlParser.InterfaceTypeDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#interfaceTypeDefinition}. + * @param ctx the parse tree + */ + void exitInterfaceTypeDefinition(GraphqlParser.InterfaceTypeDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#unionTypeDefinition}. + * @param ctx the parse tree + */ + void enterUnionTypeDefinition(GraphqlParser.UnionTypeDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#unionTypeDefinition}. + * @param ctx the parse tree + */ + void exitUnionTypeDefinition(GraphqlParser.UnionTypeDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#unionMembers}. + * @param ctx the parse tree + */ + void enterUnionMembers(GraphqlParser.UnionMembersContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#unionMembers}. + * @param ctx the parse tree + */ + void exitUnionMembers(GraphqlParser.UnionMembersContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#enumTypeDefinition}. + * @param ctx the parse tree + */ + void enterEnumTypeDefinition(GraphqlParser.EnumTypeDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#enumTypeDefinition}. + * @param ctx the parse tree + */ + void exitEnumTypeDefinition(GraphqlParser.EnumTypeDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#enumValueDefinition}. + * @param ctx the parse tree + */ + void enterEnumValueDefinition(GraphqlParser.EnumValueDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#enumValueDefinition}. + * @param ctx the parse tree + */ + void exitEnumValueDefinition(GraphqlParser.EnumValueDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#inputObjectTypeDefinition}. + * @param ctx the parse tree + */ + void enterInputObjectTypeDefinition(GraphqlParser.InputObjectTypeDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#inputObjectTypeDefinition}. + * @param ctx the parse tree + */ + void exitInputObjectTypeDefinition(GraphqlParser.InputObjectTypeDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#typeExtensionDefinition}. + * @param ctx the parse tree + */ + void enterTypeExtensionDefinition(GraphqlParser.TypeExtensionDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#typeExtensionDefinition}. + * @param ctx the parse tree + */ + void exitTypeExtensionDefinition(GraphqlParser.TypeExtensionDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#directiveDefinition}. + * @param ctx the parse tree + */ + void enterDirectiveDefinition(GraphqlParser.DirectiveDefinitionContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#directiveDefinition}. + * @param ctx the parse tree + */ + void exitDirectiveDefinition(GraphqlParser.DirectiveDefinitionContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#directiveLocation}. + * @param ctx the parse tree + */ + void enterDirectiveLocation(GraphqlParser.DirectiveLocationContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#directiveLocation}. + * @param ctx the parse tree + */ + void exitDirectiveLocation(GraphqlParser.DirectiveLocationContext ctx); + /** + * Enter a parse tree produced by {@link GraphqlParser#directiveLocations}. + * @param ctx the parse tree + */ + void enterDirectiveLocations(GraphqlParser.DirectiveLocationsContext ctx); + /** + * Exit a parse tree produced by {@link GraphqlParser#directiveLocations}. + * @param ctx the parse tree + */ + void exitDirectiveLocations(GraphqlParser.DirectiveLocationsContext ctx); +} \ No newline at end of file diff --git a/src/main/gen/GraphqlParser.java b/src/main/gen/GraphqlParser.java new file mode 100644 index 0000000000..35657bc3da --- /dev/null +++ b/src/main/gen/GraphqlParser.java @@ -0,0 +1,4344 @@ +// Generated from /Users/dlucas/src/oss/graphql-java/src/main/antlr/Graphql.g4 by ANTLR 4.7 + + package graphql.parser.antlr; + +import org.antlr.v4.runtime.atn.*; +import org.antlr.v4.runtime.dfa.DFA; +import org.antlr.v4.runtime.*; +import org.antlr.v4.runtime.misc.*; +import org.antlr.v4.runtime.tree.*; +import java.util.List; +import java.util.Iterator; +import java.util.ArrayList; + +@SuppressWarnings({"all", "warnings", "unchecked", "unused", "cast"}) +public class GraphqlParser extends Parser { + static { RuntimeMetaData.checkVersion("4.7", RuntimeMetaData.VERSION); } + + protected static final DFA[] _decisionToDFA; + protected static final PredictionContextCache _sharedContextCache = + new PredictionContextCache(); + 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; + 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, + RULE_variableDefinition = 7, RULE_variable = 8, RULE_defaultValue = 9, + RULE_selectionSet = 10, RULE_selection = 11, RULE_field = 12, RULE_alias = 13, + RULE_arguments = 14, RULE_argument = 15, RULE_fragmentSpread = 16, RULE_inlineFragment = 17, + RULE_fragmentDefinition = 18, RULE_fragmentName = 19, RULE_typeCondition = 20, + RULE_name = 21, RULE_value = 22, RULE_valueWithVariable = 23, RULE_stringValue = 24, + RULE_description = 25, RULE_enumValue = 26, RULE_arrayValue = 27, RULE_arrayValueWithVariable = 28, + RULE_objectValue = 29, RULE_objectValueWithVariable = 30, RULE_objectField = 31, + RULE_objectFieldWithVariable = 32, RULE_directives = 33, RULE_directive = 34, + RULE_type = 35, RULE_typeName = 36, RULE_listType = 37, RULE_nonNullType = 38, + 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; + public static final String[] ruleNames = { + "document", "definition", "serviceDefinition", "serviceUrl", "operationDefinition", + "operationType", "variableDefinitions", "variableDefinition", "variable", + "defaultValue", "selectionSet", "selection", "field", "alias", "arguments", + "argument", "fragmentSpread", "inlineFragment", "fragmentDefinition", + "fragmentName", "typeCondition", "name", "value", "valueWithVariable", + "stringValue", "description", "enumValue", "arrayValue", "arrayValueWithVariable", + "objectValue", "objectValueWithVariable", "objectField", "objectFieldWithVariable", + "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" + }; + + 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, "'-'" + }; + 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" + }; + public static final Vocabulary VOCABULARY = new VocabularyImpl(_LITERAL_NAMES, _SYMBOLIC_NAMES); + + /** + * @deprecated Use {@link #VOCABULARY} instead. + */ + @Deprecated + public static final String[] tokenNames; + static { + tokenNames = new String[_SYMBOLIC_NAMES.length]; + for (int i = 0; i < tokenNames.length; i++) { + tokenNames[i] = VOCABULARY.getLiteralName(i); + if (tokenNames[i] == null) { + tokenNames[i] = VOCABULARY.getSymbolicName(i); + } + + if (tokenNames[i] == null) { + tokenNames[i] = ""; + } + } + } + + @Override + @Deprecated + public String[] getTokenNames() { + return tokenNames; + } + + @Override + + public Vocabulary getVocabulary() { + return VOCABULARY; + } + + @Override + public String getGrammarFileName() { return "Graphql.g4"; } + + @Override + public String[] getRuleNames() { return ruleNames; } + + @Override + public String getSerializedATN() { return _serializedATN; } + + @Override + public ATN getATN() { return _ATN; } + + public GraphqlParser(TokenStream input) { + super(input); + _interp = new ParserATNSimulator(this,_ATN,_decisionToDFA,_sharedContextCache); + } + public static class DocumentContext extends ParserRuleContext { + public List definition() { + return getRuleContexts(DefinitionContext.class); + } + public DefinitionContext definition(int i) { + return getRuleContext(DefinitionContext.class,i); + } + public DocumentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_document; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterDocument(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDocument(this); + } + } + + public final DocumentContext document() throws RecognitionException { + DocumentContext _localctx = new DocumentContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_document); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(121); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(120); + definition(); + } + } + setState(123); + _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) ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DefinitionContext extends ParserRuleContext { + public OperationDefinitionContext operationDefinition() { + return getRuleContext(OperationDefinitionContext.class,0); + } + public FragmentDefinitionContext fragmentDefinition() { + return getRuleContext(FragmentDefinitionContext.class,0); + } + public TypeSystemDefinitionContext typeSystemDefinition() { + return getRuleContext(TypeSystemDefinitionContext.class,0); + } + public ServiceDefinitionContext serviceDefinition() { + return getRuleContext(ServiceDefinitionContext.class,0); + } + public DefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_definition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDefinition(this); + } + } + + public final DefinitionContext definition() throws RecognitionException { + DefinitionContext _localctx = new DefinitionContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_definition); + try { + setState(129); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__1: + case QUERY: + case MUTATION: + case SUBSCRIPTION: + enterOuterAlt(_localctx, 1); + { + setState(125); + operationDefinition(); + } + break; + case FRAGMENT: + enterOuterAlt(_localctx, 2); + { + setState(126); + fragmentDefinition(); + } + break; + case SCHEMA: + case SCALAR: + case TYPE: + case INTERFACE: + case ENUM: + case UNION: + case INPUT: + case EXTEND: + case DIRECTIVE: + case StringValue: + case TripleQuotedStringValue: + enterOuterAlt(_localctx, 3); + { + setState(127); + typeSystemDefinition(); + } + break; + case T__0: + enterOuterAlt(_localctx, 4); + { + setState(128); + serviceDefinition(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ServiceDefinitionContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public ServiceUrlContext serviceUrl() { + return getRuleContext(ServiceUrlContext.class,0); + } + public TypeSystemDefinitionContext typeSystemDefinition() { + return getRuleContext(TypeSystemDefinitionContext.class,0); + } + public ServiceDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_serviceDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterServiceDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitServiceDefinition(this); + } + } + + public final ServiceDefinitionContext serviceDefinition() throws RecognitionException { + ServiceDefinitionContext _localctx = new ServiceDefinitionContext(_ctx, getState()); + enterRule(_localctx, 4, RULE_serviceDefinition); + try { + enterOuterAlt(_localctx, 1); + { + setState(131); + match(T__0); + setState(132); + name(); + setState(133); + match(T__1); + setState(134); + serviceUrl(); + setState(135); + typeSystemDefinition(); + setState(136); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ServiceUrlContext extends ParserRuleContext { + public StringValueContext stringValue() { + return getRuleContext(StringValueContext.class,0); + } + public ServiceUrlContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_serviceUrl; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterServiceUrl(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitServiceUrl(this); + } + } + + public final ServiceUrlContext serviceUrl() throws RecognitionException { + ServiceUrlContext _localctx = new ServiceUrlContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_serviceUrl); + try { + enterOuterAlt(_localctx, 1); + { + setState(138); + match(T__3); + setState(139); + match(T__4); + setState(140); + stringValue(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class OperationDefinitionContext extends ParserRuleContext { + public SelectionSetContext selectionSet() { + return getRuleContext(SelectionSetContext.class,0); + } + public OperationTypeContext operationType() { + return getRuleContext(OperationTypeContext.class,0); + } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public VariableDefinitionsContext variableDefinitions() { + return getRuleContext(VariableDefinitionsContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public OperationDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operationDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterOperationDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitOperationDefinition(this); + } + } + + public final OperationDefinitionContext operationDefinition() throws RecognitionException { + OperationDefinitionContext _localctx = new OperationDefinitionContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_operationDefinition); + int _la; + try { + setState(155); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__1: + enterOuterAlt(_localctx, 1); + { + setState(142); + selectionSet(); + } + break; + case QUERY: + case MUTATION: + case SUBSCRIPTION: + enterOuterAlt(_localctx, 2); + { + setState(143); + operationType(); + setState(145); + _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); + name(); + } + } + + setState(148); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__5) { + { + setState(147); + variableDefinitions(); + } + } + + setState(151); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(150); + directives(); + } + } + + setState(153); + selectionSet(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class OperationTypeContext extends ParserRuleContext { + public TerminalNode SUBSCRIPTION() { return getToken(GraphqlParser.SUBSCRIPTION, 0); } + public TerminalNode MUTATION() { return getToken(GraphqlParser.MUTATION, 0); } + public TerminalNode QUERY() { return getToken(GraphqlParser.QUERY, 0); } + public OperationTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operationType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterOperationType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitOperationType(this); + } + } + + public final OperationTypeContext operationType() throws RecognitionException { + OperationTypeContext _localctx = new OperationTypeContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_operationType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(157); + _la = _input.LA(1); + if ( !((((_la) & ~0x3f) == 0 && ((1L << _la) & ((1L << QUERY) | (1L << MUTATION) | (1L << SUBSCRIPTION))) != 0)) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VariableDefinitionsContext extends ParserRuleContext { + public List variableDefinition() { + return getRuleContexts(VariableDefinitionContext.class); + } + public VariableDefinitionContext variableDefinition(int i) { + return getRuleContext(VariableDefinitionContext.class,i); + } + public VariableDefinitionsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variableDefinitions; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterVariableDefinitions(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitVariableDefinitions(this); + } + } + + public final VariableDefinitionsContext variableDefinitions() throws RecognitionException { + VariableDefinitionsContext _localctx = new VariableDefinitionsContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_variableDefinitions); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(159); + match(T__5); + setState(161); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(160); + variableDefinition(); + } + } + setState(163); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==T__7 ); + setState(165); + match(T__6); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VariableDefinitionContext extends ParserRuleContext { + public VariableContext variable() { + return getRuleContext(VariableContext.class,0); + } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public DefaultValueContext defaultValue() { + return getRuleContext(DefaultValueContext.class,0); + } + public VariableDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variableDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterVariableDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitVariableDefinition(this); + } + } + + public final VariableDefinitionContext variableDefinition() throws RecognitionException { + VariableDefinitionContext _localctx = new VariableDefinitionContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_variableDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(167); + variable(); + setState(168); + match(T__4); + setState(169); + type(); + setState(171); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__8) { + { + setState(170); + defaultValue(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class VariableContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public VariableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_variable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterVariable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitVariable(this); + } + } + + public final VariableContext variable() throws RecognitionException { + VariableContext _localctx = new VariableContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_variable); + try { + enterOuterAlt(_localctx, 1); + { + setState(173); + match(T__7); + setState(174); + name(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DefaultValueContext extends ParserRuleContext { + public ValueContext value() { + return getRuleContext(ValueContext.class,0); + } + public DefaultValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_defaultValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterDefaultValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDefaultValue(this); + } + } + + public final DefaultValueContext defaultValue() throws RecognitionException { + DefaultValueContext _localctx = new DefaultValueContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_defaultValue); + try { + enterOuterAlt(_localctx, 1); + { + setState(176); + match(T__8); + setState(177); + value(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SelectionSetContext extends ParserRuleContext { + public List selection() { + return getRuleContexts(SelectionContext.class); + } + public SelectionContext selection(int i) { + return getRuleContext(SelectionContext.class,i); + } + public SelectionSetContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selectionSet; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterSelectionSet(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitSelectionSet(this); + } + } + + public final SelectionSetContext selectionSet() throws RecognitionException { + SelectionSetContext _localctx = new SelectionSetContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_selectionSet); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(179); + match(T__1); + setState(181); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(180); + selection(); + } + } + setState(183); + _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); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SelectionContext extends ParserRuleContext { + public FieldContext field() { + return getRuleContext(FieldContext.class,0); + } + public FragmentSpreadContext fragmentSpread() { + return getRuleContext(FragmentSpreadContext.class,0); + } + public InlineFragmentContext inlineFragment() { + return getRuleContext(InlineFragmentContext.class,0); + } + public SelectionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_selection; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterSelection(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitSelection(this); + } + } + + public final SelectionContext selection() throws RecognitionException { + SelectionContext _localctx = new SelectionContext(_ctx, getState()); + enterRule(_localctx, 22, RULE_selection); + try { + setState(190); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,9,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(187); + field(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(188); + fragmentSpread(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(189); + inlineFragment(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FieldContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public AliasContext alias() { + return getRuleContext(AliasContext.class,0); + } + public ArgumentsContext arguments() { + return getRuleContext(ArgumentsContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public SelectionSetContext selectionSet() { + return getRuleContext(SelectionSetContext.class,0); + } + public FieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_field; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterField(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitField(this); + } + } + + public final FieldContext field() throws RecognitionException { + FieldContext _localctx = new FieldContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_field); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(193); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { + case 1: + { + setState(192); + alias(); + } + break; + } + setState(195); + name(); + setState(197); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__5) { + { + setState(196); + arguments(); + } + } + + setState(200); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(199); + directives(); + } + } + + setState(203); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__1) { + { + setState(202); + selectionSet(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class AliasContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public AliasContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_alias; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterAlias(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitAlias(this); + } + } + + public final AliasContext alias() throws RecognitionException { + AliasContext _localctx = new AliasContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_alias); + try { + enterOuterAlt(_localctx, 1); + { + setState(205); + name(); + setState(206); + match(T__4); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ArgumentsContext extends ParserRuleContext { + public List argument() { + return getRuleContexts(ArgumentContext.class); + } + public ArgumentContext argument(int i) { + return getRuleContext(ArgumentContext.class,i); + } + public ArgumentsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arguments; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterArguments(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitArguments(this); + } + } + + public final ArgumentsContext arguments() throws RecognitionException { + ArgumentsContext _localctx = new ArgumentsContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_arguments); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(208); + match(T__5); + setState(210); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(209); + argument(); + } + } + setState(212); + _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); + match(T__6); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ArgumentContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public ValueWithVariableContext valueWithVariable() { + return getRuleContext(ValueWithVariableContext.class,0); + } + public ArgumentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_argument; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterArgument(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitArgument(this); + } + } + + public final ArgumentContext argument() throws RecognitionException { + ArgumentContext _localctx = new ArgumentContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_argument); + try { + enterOuterAlt(_localctx, 1); + { + setState(216); + name(); + setState(217); + match(T__4); + setState(218); + valueWithVariable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FragmentSpreadContext extends ParserRuleContext { + public FragmentNameContext fragmentName() { + return getRuleContext(FragmentNameContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public FragmentSpreadContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fragmentSpread; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterFragmentSpread(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFragmentSpread(this); + } + } + + public final FragmentSpreadContext fragmentSpread() throws RecognitionException { + FragmentSpreadContext _localctx = new FragmentSpreadContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_fragmentSpread); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(220); + match(T__9); + setState(221); + fragmentName(); + setState(223); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(222); + directives(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InlineFragmentContext extends ParserRuleContext { + public SelectionSetContext selectionSet() { + return getRuleContext(SelectionSetContext.class,0); + } + public TypeConditionContext typeCondition() { + return getRuleContext(TypeConditionContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public InlineFragmentContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_inlineFragment; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterInlineFragment(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitInlineFragment(this); + } + } + + public final InlineFragmentContext inlineFragment() throws RecognitionException { + InlineFragmentContext _localctx = new InlineFragmentContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_inlineFragment); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(225); + match(T__9); + setState(227); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__10) { + { + setState(226); + typeCondition(); + } + } + + setState(230); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(229); + directives(); + } + } + + setState(232); + selectionSet(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FragmentDefinitionContext extends ParserRuleContext { + public FragmentNameContext fragmentName() { + return getRuleContext(FragmentNameContext.class,0); + } + public TypeConditionContext typeCondition() { + return getRuleContext(TypeConditionContext.class,0); + } + public SelectionSetContext selectionSet() { + return getRuleContext(SelectionSetContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public FragmentDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fragmentDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterFragmentDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFragmentDefinition(this); + } + } + + public final FragmentDefinitionContext fragmentDefinition() throws RecognitionException { + FragmentDefinitionContext _localctx = new FragmentDefinitionContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_fragmentDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(234); + match(FRAGMENT); + setState(235); + fragmentName(); + setState(236); + typeCondition(); + setState(238); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(237); + directives(); + } + } + + setState(240); + selectionSet(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FragmentNameContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public FragmentNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fragmentName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterFragmentName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFragmentName(this); + } + } + + public final FragmentNameContext fragmentName() throws RecognitionException { + FragmentNameContext _localctx = new FragmentNameContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_fragmentName); + try { + enterOuterAlt(_localctx, 1); + { + setState(242); + name(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeConditionContext extends ParserRuleContext { + public TypeNameContext typeName() { + return getRuleContext(TypeNameContext.class,0); + } + public TypeConditionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeCondition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterTypeCondition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTypeCondition(this); + } + } + + public final TypeConditionContext typeCondition() throws RecognitionException { + TypeConditionContext _localctx = new TypeConditionContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_typeCondition); + try { + enterOuterAlt(_localctx, 1); + { + setState(244); + match(T__10); + setState(245); + typeName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NameContext extends ParserRuleContext { + public TerminalNode NAME() { return getToken(GraphqlParser.NAME, 0); } + public TerminalNode FRAGMENT() { return getToken(GraphqlParser.FRAGMENT, 0); } + public TerminalNode QUERY() { return getToken(GraphqlParser.QUERY, 0); } + public TerminalNode MUTATION() { return getToken(GraphqlParser.MUTATION, 0); } + public TerminalNode SUBSCRIPTION() { return getToken(GraphqlParser.SUBSCRIPTION, 0); } + public TerminalNode SCHEMA() { return getToken(GraphqlParser.SCHEMA, 0); } + public TerminalNode SCALAR() { return getToken(GraphqlParser.SCALAR, 0); } + public TerminalNode TYPE() { return getToken(GraphqlParser.TYPE, 0); } + public TerminalNode INTERFACE() { return getToken(GraphqlParser.INTERFACE, 0); } + public TerminalNode IMPLEMENTS() { return getToken(GraphqlParser.IMPLEMENTS, 0); } + public TerminalNode ENUM() { return getToken(GraphqlParser.ENUM, 0); } + public TerminalNode UNION() { return getToken(GraphqlParser.UNION, 0); } + public TerminalNode INPUT() { return getToken(GraphqlParser.INPUT, 0); } + public TerminalNode EXTEND() { return getToken(GraphqlParser.EXTEND, 0); } + public TerminalNode DIRECTIVE() { return getToken(GraphqlParser.DIRECTIVE, 0); } + public NameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_name; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitName(this); + } + } + + public final NameContext name() throws RecognitionException { + NameContext _localctx = new NameContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_name); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(247); + _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); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ValueContext extends ParserRuleContext { + public StringValueContext stringValue() { + return getRuleContext(StringValueContext.class,0); + } + public TerminalNode IntValue() { return getToken(GraphqlParser.IntValue, 0); } + public TerminalNode FloatValue() { return getToken(GraphqlParser.FloatValue, 0); } + public TerminalNode BooleanValue() { return getToken(GraphqlParser.BooleanValue, 0); } + public TerminalNode NullValue() { return getToken(GraphqlParser.NullValue, 0); } + public EnumValueContext enumValue() { + return getRuleContext(EnumValueContext.class,0); + } + public ArrayValueContext arrayValue() { + return getRuleContext(ArrayValueContext.class,0); + } + public ObjectValueContext objectValue() { + return getRuleContext(ObjectValueContext.class,0); + } + public ValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_value; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitValue(this); + } + } + + public final ValueContext value() throws RecognitionException { + ValueContext _localctx = new ValueContext(_ctx, getState()); + enterRule(_localctx, 44, RULE_value); + try { + setState(257); + _errHandler.sync(this); + switch (_input.LA(1)) { + case StringValue: + case TripleQuotedStringValue: + enterOuterAlt(_localctx, 1); + { + setState(249); + stringValue(); + } + break; + case IntValue: + enterOuterAlt(_localctx, 2); + { + setState(250); + match(IntValue); + } + break; + case FloatValue: + enterOuterAlt(_localctx, 3); + { + setState(251); + match(FloatValue); + } + break; + case BooleanValue: + enterOuterAlt(_localctx, 4); + { + setState(252); + match(BooleanValue); + } + break; + case NullValue: + enterOuterAlt(_localctx, 5); + { + setState(253); + match(NullValue); + } + break; + case FRAGMENT: + case QUERY: + case MUTATION: + case SUBSCRIPTION: + case SCHEMA: + case SCALAR: + case TYPE: + case INTERFACE: + case IMPLEMENTS: + case ENUM: + case UNION: + case INPUT: + case EXTEND: + case DIRECTIVE: + case NAME: + enterOuterAlt(_localctx, 6); + { + setState(254); + enumValue(); + } + break; + case T__11: + enterOuterAlt(_localctx, 7); + { + setState(255); + arrayValue(); + } + break; + case T__1: + enterOuterAlt(_localctx, 8); + { + setState(256); + objectValue(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ValueWithVariableContext extends ParserRuleContext { + public VariableContext variable() { + return getRuleContext(VariableContext.class,0); + } + public StringValueContext stringValue() { + return getRuleContext(StringValueContext.class,0); + } + public TerminalNode IntValue() { return getToken(GraphqlParser.IntValue, 0); } + public TerminalNode FloatValue() { return getToken(GraphqlParser.FloatValue, 0); } + public TerminalNode BooleanValue() { return getToken(GraphqlParser.BooleanValue, 0); } + public TerminalNode NullValue() { return getToken(GraphqlParser.NullValue, 0); } + public EnumValueContext enumValue() { + return getRuleContext(EnumValueContext.class,0); + } + public ArrayValueWithVariableContext arrayValueWithVariable() { + return getRuleContext(ArrayValueWithVariableContext.class,0); + } + public ObjectValueWithVariableContext objectValueWithVariable() { + return getRuleContext(ObjectValueWithVariableContext.class,0); + } + public ValueWithVariableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_valueWithVariable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterValueWithVariable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitValueWithVariable(this); + } + } + + public final ValueWithVariableContext valueWithVariable() throws RecognitionException { + ValueWithVariableContext _localctx = new ValueWithVariableContext(_ctx, getState()); + enterRule(_localctx, 46, RULE_valueWithVariable); + try { + setState(268); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__7: + enterOuterAlt(_localctx, 1); + { + setState(259); + variable(); + } + break; + case StringValue: + case TripleQuotedStringValue: + enterOuterAlt(_localctx, 2); + { + setState(260); + stringValue(); + } + break; + case IntValue: + enterOuterAlt(_localctx, 3); + { + setState(261); + match(IntValue); + } + break; + case FloatValue: + enterOuterAlt(_localctx, 4); + { + setState(262); + match(FloatValue); + } + break; + case BooleanValue: + enterOuterAlt(_localctx, 5); + { + setState(263); + match(BooleanValue); + } + break; + case NullValue: + enterOuterAlt(_localctx, 6); + { + setState(264); + match(NullValue); + } + break; + case FRAGMENT: + case QUERY: + case MUTATION: + case SUBSCRIPTION: + case SCHEMA: + case SCALAR: + case TYPE: + case INTERFACE: + case IMPLEMENTS: + case ENUM: + case UNION: + case INPUT: + case EXTEND: + case DIRECTIVE: + case NAME: + enterOuterAlt(_localctx, 7); + { + setState(265); + enumValue(); + } + break; + case T__11: + enterOuterAlt(_localctx, 8); + { + setState(266); + arrayValueWithVariable(); + } + break; + case T__1: + enterOuterAlt(_localctx, 9); + { + setState(267); + objectValueWithVariable(); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class StringValueContext extends ParserRuleContext { + public TerminalNode TripleQuotedStringValue() { return getToken(GraphqlParser.TripleQuotedStringValue, 0); } + public TerminalNode StringValue() { return getToken(GraphqlParser.StringValue, 0); } + public StringValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_stringValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterStringValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitStringValue(this); + } + } + + public final StringValueContext stringValue() throws RecognitionException { + StringValueContext _localctx = new StringValueContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_stringValue); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(270); + _la = _input.LA(1); + if ( !(_la==StringValue || _la==TripleQuotedStringValue) ) { + _errHandler.recoverInline(this); + } + else { + if ( _input.LA(1)==Token.EOF ) matchedEOF = true; + _errHandler.reportMatch(this); + consume(); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DescriptionContext extends ParserRuleContext { + public StringValueContext stringValue() { + return getRuleContext(StringValueContext.class,0); + } + public DescriptionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_description; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterDescription(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDescription(this); + } + } + + public final DescriptionContext description() throws RecognitionException { + DescriptionContext _localctx = new DescriptionContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_description); + try { + enterOuterAlt(_localctx, 1); + { + setState(272); + stringValue(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumValueContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public EnumValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterEnumValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitEnumValue(this); + } + } + + public final EnumValueContext enumValue() throws RecognitionException { + EnumValueContext _localctx = new EnumValueContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_enumValue); + try { + enterOuterAlt(_localctx, 1); + { + setState(274); + name(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ArrayValueContext extends ParserRuleContext { + public List value() { + return getRuleContexts(ValueContext.class); + } + public ValueContext value(int i) { + return getRuleContext(ValueContext.class,i); + } + public ArrayValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arrayValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterArrayValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitArrayValue(this); + } + } + + public final ArrayValueContext arrayValue() throws RecognitionException { + ArrayValueContext _localctx = new ArrayValueContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_arrayValue); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(276); + match(T__11); + setState(280); + _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); + value(); + } + } + setState(282); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(283); + match(T__12); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ArrayValueWithVariableContext extends ParserRuleContext { + public List valueWithVariable() { + return getRuleContexts(ValueWithVariableContext.class); + } + public ValueWithVariableContext valueWithVariable(int i) { + return getRuleContext(ValueWithVariableContext.class,i); + } + public ArrayValueWithVariableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_arrayValueWithVariable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterArrayValueWithVariable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitArrayValueWithVariable(this); + } + } + + public final ArrayValueWithVariableContext arrayValueWithVariable() throws RecognitionException { + ArrayValueWithVariableContext _localctx = new ArrayValueWithVariableContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_arrayValueWithVariable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + 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__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); + valueWithVariable(); + } + } + setState(291); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(292); + match(T__12); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ObjectValueContext extends ParserRuleContext { + public List objectField() { + return getRuleContexts(ObjectFieldContext.class); + } + public ObjectFieldContext objectField(int i) { + return getRuleContext(ObjectFieldContext.class,i); + } + public ObjectValueContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_objectValue; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterObjectValue(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitObjectValue(this); + } + } + + public final ObjectValueContext objectValue() throws RecognitionException { + ObjectValueContext _localctx = new ObjectValueContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_objectValue); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(294); + match(T__1); + setState(298); + _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); + objectField(); + } + } + setState(300); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(301); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ObjectValueWithVariableContext extends ParserRuleContext { + public List objectFieldWithVariable() { + return getRuleContexts(ObjectFieldWithVariableContext.class); + } + public ObjectFieldWithVariableContext objectFieldWithVariable(int i) { + return getRuleContext(ObjectFieldWithVariableContext.class,i); + } + public ObjectValueWithVariableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_objectValueWithVariable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterObjectValueWithVariable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitObjectValueWithVariable(this); + } + } + + public final ObjectValueWithVariableContext objectValueWithVariable() throws RecognitionException { + ObjectValueWithVariableContext _localctx = new ObjectValueWithVariableContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_objectValueWithVariable); + int _la; + try { + enterOuterAlt(_localctx, 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(304); + objectFieldWithVariable(); + } + } + setState(309); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(310); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ObjectFieldContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public ValueContext value() { + return getRuleContext(ValueContext.class,0); + } + public ObjectFieldContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_objectField; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterObjectField(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitObjectField(this); + } + } + + public final ObjectFieldContext objectField() throws RecognitionException { + ObjectFieldContext _localctx = new ObjectFieldContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_objectField); + try { + enterOuterAlt(_localctx, 1); + { + setState(312); + name(); + setState(313); + match(T__4); + setState(314); + value(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ObjectFieldWithVariableContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public ValueWithVariableContext valueWithVariable() { + return getRuleContext(ValueWithVariableContext.class,0); + } + public ObjectFieldWithVariableContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_objectFieldWithVariable; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterObjectFieldWithVariable(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitObjectFieldWithVariable(this); + } + } + + public final ObjectFieldWithVariableContext objectFieldWithVariable() throws RecognitionException { + ObjectFieldWithVariableContext _localctx = new ObjectFieldWithVariableContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_objectFieldWithVariable); + try { + enterOuterAlt(_localctx, 1); + { + setState(316); + name(); + setState(317); + match(T__4); + setState(318); + valueWithVariable(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DirectivesContext extends ParserRuleContext { + public List directive() { + return getRuleContexts(DirectiveContext.class); + } + public DirectiveContext directive(int i) { + return getRuleContext(DirectiveContext.class,i); + } + public DirectivesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_directives; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterDirectives(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDirectives(this); + } + } + + public final DirectivesContext directives() throws RecognitionException { + DirectivesContext _localctx = new DirectivesContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_directives); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(321); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(320); + directive(); + } + } + setState(323); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==T__13 ); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DirectiveContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public ArgumentsContext arguments() { + return getRuleContext(ArgumentsContext.class,0); + } + public DirectiveContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_directive; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterDirective(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDirective(this); + } + } + + public final DirectiveContext directive() throws RecognitionException { + DirectiveContext _localctx = new DirectiveContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_directive); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(325); + match(T__13); + setState(326); + name(); + setState(328); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__5) { + { + setState(327); + arguments(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeContext extends ParserRuleContext { + public TypeNameContext typeName() { + return getRuleContext(TypeNameContext.class,0); + } + public ListTypeContext listType() { + return getRuleContext(ListTypeContext.class,0); + } + public NonNullTypeContext nonNullType() { + return getRuleContext(NonNullTypeContext.class,0); + } + public TypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_type; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitType(this); + } + } + + public final TypeContext type() throws RecognitionException { + TypeContext _localctx = new TypeContext(_ctx, getState()); + enterRule(_localctx, 70, RULE_type); + try { + setState(333); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,27,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(330); + typeName(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(331); + listType(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(332); + nonNullType(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeNameContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public TypeNameContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeName; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterTypeName(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTypeName(this); + } + } + + public final TypeNameContext typeName() throws RecognitionException { + TypeNameContext _localctx = new TypeNameContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_typeName); + try { + enterOuterAlt(_localctx, 1); + { + setState(335); + name(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ListTypeContext extends ParserRuleContext { + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public ListTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_listType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterListType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitListType(this); + } + } + + public final ListTypeContext listType() throws RecognitionException { + ListTypeContext _localctx = new ListTypeContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_listType); + try { + enterOuterAlt(_localctx, 1); + { + setState(337); + match(T__11); + setState(338); + type(); + setState(339); + match(T__12); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class NonNullTypeContext extends ParserRuleContext { + public TypeNameContext typeName() { + return getRuleContext(TypeNameContext.class,0); + } + public ListTypeContext listType() { + return getRuleContext(ListTypeContext.class,0); + } + public NonNullTypeContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_nonNullType; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterNonNullType(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitNonNullType(this); + } + } + + public final NonNullTypeContext nonNullType() throws RecognitionException { + NonNullTypeContext _localctx = new NonNullTypeContext(_ctx, getState()); + enterRule(_localctx, 76, RULE_nonNullType); + try { + setState(347); + _errHandler.sync(this); + switch (_input.LA(1)) { + case FRAGMENT: + case QUERY: + case MUTATION: + case SUBSCRIPTION: + case SCHEMA: + case SCALAR: + case TYPE: + case INTERFACE: + case IMPLEMENTS: + case ENUM: + case UNION: + case INPUT: + case EXTEND: + case DIRECTIVE: + case NAME: + enterOuterAlt(_localctx, 1); + { + setState(341); + typeName(); + setState(342); + match(T__14); + } + break; + case T__11: + enterOuterAlt(_localctx, 2); + { + setState(344); + listType(); + setState(345); + match(T__14); + } + break; + default: + throw new NoViableAltException(this); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeSystemDefinitionContext extends ParserRuleContext { + public SchemaDefinitionContext schemaDefinition() { + return getRuleContext(SchemaDefinitionContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public TypeDefinitionContext typeDefinition() { + return getRuleContext(TypeDefinitionContext.class,0); + } + public TypeExtensionDefinitionContext typeExtensionDefinition() { + return getRuleContext(TypeExtensionDefinitionContext.class,0); + } + public DirectiveDefinitionContext directiveDefinition() { + return getRuleContext(DirectiveDefinitionContext.class,0); + } + public TypeSystemDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeSystemDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterTypeSystemDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTypeSystemDefinition(this); + } + } + + public final TypeSystemDefinitionContext typeSystemDefinition() throws RecognitionException { + TypeSystemDefinitionContext _localctx = new TypeSystemDefinitionContext(_ctx, getState()); + enterRule(_localctx, 78, RULE_typeSystemDefinition); + try { + setState(356); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(350); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,29,_ctx) ) { + case 1: + { + setState(349); + description(); + } + break; + } + setState(352); + schemaDefinition(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(353); + typeDefinition(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(354); + typeExtensionDefinition(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(355); + directiveDefinition(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class SchemaDefinitionContext extends ParserRuleContext { + public TerminalNode SCHEMA() { return getToken(GraphqlParser.SCHEMA, 0); } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public List operationTypeDefinition() { + return getRuleContexts(OperationTypeDefinitionContext.class); + } + public OperationTypeDefinitionContext operationTypeDefinition(int i) { + return getRuleContext(OperationTypeDefinitionContext.class,i); + } + public SchemaDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_schemaDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterSchemaDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitSchemaDefinition(this); + } + } + + public final SchemaDefinitionContext schemaDefinition() throws RecognitionException { + SchemaDefinitionContext _localctx = new SchemaDefinitionContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_schemaDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(359); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(358); + description(); + } + } + + setState(361); + match(SCHEMA); + setState(363); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(362); + directives(); + } + } + + setState(365); + match(T__1); + setState(367); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(366); + operationTypeDefinition(); + } + } + setState(369); + _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); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class OperationTypeDefinitionContext extends ParserRuleContext { + public OperationTypeContext operationType() { + return getRuleContext(OperationTypeContext.class,0); + } + public TypeNameContext typeName() { + return getRuleContext(TypeNameContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public OperationTypeDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_operationTypeDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterOperationTypeDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitOperationTypeDefinition(this); + } + } + + public final OperationTypeDefinitionContext operationTypeDefinition() throws RecognitionException { + OperationTypeDefinitionContext _localctx = new OperationTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_operationTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(374); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(373); + description(); + } + } + + setState(376); + operationType(); + setState(377); + match(T__4); + setState(378); + typeName(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeDefinitionContext extends ParserRuleContext { + public ScalarTypeDefinitionContext scalarTypeDefinition() { + return getRuleContext(ScalarTypeDefinitionContext.class,0); + } + public ObjectTypeDefinitionContext objectTypeDefinition() { + return getRuleContext(ObjectTypeDefinitionContext.class,0); + } + public InterfaceTypeDefinitionContext interfaceTypeDefinition() { + return getRuleContext(InterfaceTypeDefinitionContext.class,0); + } + public UnionTypeDefinitionContext unionTypeDefinition() { + return getRuleContext(UnionTypeDefinitionContext.class,0); + } + public EnumTypeDefinitionContext enumTypeDefinition() { + return getRuleContext(EnumTypeDefinitionContext.class,0); + } + public InputObjectTypeDefinitionContext inputObjectTypeDefinition() { + return getRuleContext(InputObjectTypeDefinitionContext.class,0); + } + public TypeDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterTypeDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTypeDefinition(this); + } + } + + public final TypeDefinitionContext typeDefinition() throws RecognitionException { + TypeDefinitionContext _localctx = new TypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 84, RULE_typeDefinition); + try { + setState(386); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,35,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(380); + scalarTypeDefinition(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(381); + objectTypeDefinition(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(382); + interfaceTypeDefinition(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(383); + unionTypeDefinition(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(384); + enumTypeDefinition(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(385); + inputObjectTypeDefinition(); + } + break; + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ScalarTypeDefinitionContext extends ParserRuleContext { + public TerminalNode SCALAR() { return getToken(GraphqlParser.SCALAR, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public ScalarTypeDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_scalarTypeDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterScalarTypeDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitScalarTypeDefinition(this); + } + } + + public final ScalarTypeDefinitionContext scalarTypeDefinition() throws RecognitionException { + ScalarTypeDefinitionContext _localctx = new ScalarTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_scalarTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(389); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(388); + description(); + } + } + + setState(391); + match(SCALAR); + setState(392); + name(); + setState(394); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(393); + directives(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ObjectTypeDefinitionContext extends ParserRuleContext { + public TerminalNode TYPE() { return getToken(GraphqlParser.TYPE, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public ImplementsInterfacesContext implementsInterfaces() { + return getRuleContext(ImplementsInterfacesContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public FieldsDefinitionContext fieldsDefinition() { + return getRuleContext(FieldsDefinitionContext.class,0); + } + public ObjectTypeDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_objectTypeDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterObjectTypeDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitObjectTypeDefinition(this); + } + } + + public final ObjectTypeDefinitionContext objectTypeDefinition() throws RecognitionException { + ObjectTypeDefinitionContext _localctx = new ObjectTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_objectTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(397); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(396); + description(); + } + } + + setState(399); + match(TYPE); + setState(400); + name(); + setState(402); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IMPLEMENTS) { + { + setState(401); + implementsInterfaces(0); + } + } + + setState(405); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(404); + directives(); + } + } + + setState(408); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,41,_ctx) ) { + case 1: + { + setState(407); + fieldsDefinition(); + } + break; + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class ImplementsInterfacesContext extends ParserRuleContext { + public TerminalNode IMPLEMENTS() { return getToken(GraphqlParser.IMPLEMENTS, 0); } + public List typeName() { + return getRuleContexts(TypeNameContext.class); + } + public TypeNameContext typeName(int i) { + return getRuleContext(TypeNameContext.class,i); + } + public ImplementsInterfacesContext implementsInterfaces() { + return getRuleContext(ImplementsInterfacesContext.class,0); + } + public ImplementsInterfacesContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_implementsInterfaces; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterImplementsInterfaces(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitImplementsInterfaces(this); + } + } + + public final ImplementsInterfacesContext implementsInterfaces() throws RecognitionException { + return implementsInterfaces(0); + } + + private ImplementsInterfacesContext implementsInterfaces(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + ImplementsInterfacesContext _localctx = new ImplementsInterfacesContext(_ctx, _parentState); + ImplementsInterfacesContext _prevctx = _localctx; + int _startState = 90; + enterRecursionRule(_localctx, 90, RULE_implementsInterfaces, _p); + int _la; + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(411); + match(IMPLEMENTS); + setState(413); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__15) { + { + setState(412); + match(T__15); + } + } + + setState(416); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(415); + typeName(); + } + } + break; + default: + throw new NoViableAltException(this); + } + setState(418); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,43,_ctx); + } while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ); + } + _ctx.stop = _input.LT(-1); + setState(425); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,44,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new ImplementsInterfacesContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_implementsInterfaces); + setState(420); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(421); + match(T__15); + setState(422); + typeName(); + } + } + } + setState(427); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,44,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class FieldsDefinitionContext extends ParserRuleContext { + public List fieldDefinition() { + return getRuleContexts(FieldDefinitionContext.class); + } + public FieldDefinitionContext fieldDefinition(int i) { + return getRuleContext(FieldDefinitionContext.class,i); + } + public FieldsDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fieldsDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterFieldsDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFieldsDefinition(this); + } + } + + public final FieldsDefinitionContext fieldsDefinition() throws RecognitionException { + FieldsDefinitionContext _localctx = new FieldsDefinitionContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_fieldsDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(428); + match(T__1); + setState(430); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(429); + fieldDefinition(); + } + } + setState(432); + _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); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class FieldDefinitionContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public ArgumentsDefinitionContext argumentsDefinition() { + return getRuleContext(ArgumentsDefinitionContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public FieldDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_fieldDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterFieldDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitFieldDefinition(this); + } + } + + public final FieldDefinitionContext fieldDefinition() throws RecognitionException { + FieldDefinitionContext _localctx = new FieldDefinitionContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_fieldDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(437); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(436); + description(); + } + } + + setState(439); + name(); + setState(441); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__5) { + { + setState(440); + argumentsDefinition(); + } + } + + setState(443); + match(T__4); + setState(444); + type(); + setState(446); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(445); + directives(); + } + } + + } + } + 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); + } + public InputValueDefinitionContext inputValueDefinition(int i) { + return getRuleContext(InputValueDefinitionContext.class,i); + } + public ArgumentsDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_argumentsDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterArgumentsDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitArgumentsDefinition(this); + } + } + + public final ArgumentsDefinitionContext argumentsDefinition() throws RecognitionException { + ArgumentsDefinitionContext _localctx = new ArgumentsDefinitionContext(_ctx, getState()); + enterRule(_localctx, 96, RULE_argumentsDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(448); + match(T__5); + setState(450); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(449); + inputValueDefinition(); + } + } + setState(452); + _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); + match(T__6); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InputValueDefinitionContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public TypeContext type() { + return getRuleContext(TypeContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public DefaultValueContext defaultValue() { + return getRuleContext(DefaultValueContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public InputValueDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_inputValueDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterInputValueDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitInputValueDefinition(this); + } + } + + public final InputValueDefinitionContext inputValueDefinition() throws RecognitionException { + InputValueDefinitionContext _localctx = new InputValueDefinitionContext(_ctx, getState()); + enterRule(_localctx, 98, RULE_inputValueDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(457); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(456); + description(); + } + } + + setState(459); + name(); + setState(460); + match(T__4); + setState(461); + type(); + setState(463); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__8) { + { + setState(462); + defaultValue(); + } + } + + setState(466); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(465); + directives(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InterfaceTypeDefinitionContext extends ParserRuleContext { + public TerminalNode INTERFACE() { return getToken(GraphqlParser.INTERFACE, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public List fieldDefinition() { + return getRuleContexts(FieldDefinitionContext.class); + } + public FieldDefinitionContext fieldDefinition(int i) { + return getRuleContext(FieldDefinitionContext.class,i); + } + public InterfaceTypeDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_interfaceTypeDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterInterfaceTypeDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitInterfaceTypeDefinition(this); + } + } + + public final InterfaceTypeDefinitionContext interfaceTypeDefinition() throws RecognitionException { + InterfaceTypeDefinitionContext _localctx = new InterfaceTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_interfaceTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(469); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(468); + description(); + } + } + + setState(471); + match(INTERFACE); + setState(472); + name(); + setState(474); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(473); + directives(); + } + } + + setState(476); + match(T__1); + setState(478); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(477); + fieldDefinition(); + } + } + setState(480); + _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); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UnionTypeDefinitionContext extends ParserRuleContext { + public TerminalNode UNION() { return getToken(GraphqlParser.UNION, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public UnionMembersContext unionMembers() { + return getRuleContext(UnionMembersContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public UnionTypeDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unionTypeDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterUnionTypeDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitUnionTypeDefinition(this); + } + } + + public final UnionTypeDefinitionContext unionTypeDefinition() throws RecognitionException { + UnionTypeDefinitionContext _localctx = new UnionTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_unionTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(485); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(484); + description(); + } + } + + setState(487); + match(UNION); + setState(488); + name(); + setState(490); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(489); + directives(); + } + } + + setState(492); + match(T__8); + setState(493); + unionMembers(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class UnionMembersContext extends ParserRuleContext { + public TypeNameContext typeName() { + return getRuleContext(TypeNameContext.class,0); + } + public UnionMembersContext unionMembers() { + return getRuleContext(UnionMembersContext.class,0); + } + public UnionMembersContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_unionMembers; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterUnionMembers(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitUnionMembers(this); + } + } + + public final UnionMembersContext unionMembers() throws RecognitionException { + return unionMembers(0); + } + + private UnionMembersContext unionMembers(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + UnionMembersContext _localctx = new UnionMembersContext(_ctx, _parentState); + UnionMembersContext _prevctx = _localctx; + int _startState = 104; + enterRecursionRule(_localctx, 104, RULE_unionMembers, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(496); + typeName(); + } + _ctx.stop = _input.LT(-1); + setState(503); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,58,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new UnionMembersContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_unionMembers); + setState(498); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(499); + match(T__16); + setState(500); + typeName(); + } + } + } + setState(505); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,58,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public static class EnumTypeDefinitionContext extends ParserRuleContext { + public TerminalNode ENUM() { return getToken(GraphqlParser.ENUM, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public List enumValueDefinition() { + return getRuleContexts(EnumValueDefinitionContext.class); + } + public EnumValueDefinitionContext enumValueDefinition(int i) { + return getRuleContext(EnumValueDefinitionContext.class,i); + } + public EnumTypeDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumTypeDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterEnumTypeDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitEnumTypeDefinition(this); + } + } + + public final EnumTypeDefinitionContext enumTypeDefinition() throws RecognitionException { + EnumTypeDefinitionContext _localctx = new EnumTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 106, RULE_enumTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(507); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(506); + description(); + } + } + + setState(509); + match(ENUM); + setState(510); + name(); + setState(512); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(511); + directives(); + } + } + + setState(514); + match(T__1); + setState(516); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(515); + enumValueDefinition(); + } + } + setState(518); + _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); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class EnumValueDefinitionContext extends ParserRuleContext { + public EnumValueContext enumValue() { + return getRuleContext(EnumValueContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public EnumValueDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_enumValueDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterEnumValueDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitEnumValueDefinition(this); + } + } + + public final EnumValueDefinitionContext enumValueDefinition() throws RecognitionException { + EnumValueDefinitionContext _localctx = new EnumValueDefinitionContext(_ctx, getState()); + enterRule(_localctx, 108, RULE_enumValueDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(523); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(522); + description(); + } + } + + setState(525); + enumValue(); + setState(527); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(526); + directives(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class InputObjectTypeDefinitionContext extends ParserRuleContext { + public TerminalNode INPUT() { return getToken(GraphqlParser.INPUT, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public DirectivesContext directives() { + return getRuleContext(DirectivesContext.class,0); + } + public List inputValueDefinition() { + return getRuleContexts(InputValueDefinitionContext.class); + } + public InputValueDefinitionContext inputValueDefinition(int i) { + return getRuleContext(InputValueDefinitionContext.class,i); + } + public InputObjectTypeDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_inputObjectTypeDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterInputObjectTypeDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitInputObjectTypeDefinition(this); + } + } + + public final InputObjectTypeDefinitionContext inputObjectTypeDefinition() throws RecognitionException { + InputObjectTypeDefinitionContext _localctx = new InputObjectTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 110, RULE_inputObjectTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(530); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(529); + description(); + } + } + + setState(532); + match(INPUT); + setState(533); + name(); + setState(535); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(534); + directives(); + } + } + + setState(537); + match(T__1); + setState(539); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(538); + inputValueDefinition(); + } + } + setState(541); + _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); + match(T__2); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class TypeExtensionDefinitionContext extends ParserRuleContext { + public TerminalNode EXTEND() { return getToken(GraphqlParser.EXTEND, 0); } + public ObjectTypeDefinitionContext objectTypeDefinition() { + return getRuleContext(ObjectTypeDefinitionContext.class,0); + } + public TypeExtensionDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_typeExtensionDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterTypeExtensionDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitTypeExtensionDefinition(this); + } + } + + public final TypeExtensionDefinitionContext typeExtensionDefinition() throws RecognitionException { + TypeExtensionDefinitionContext _localctx = new TypeExtensionDefinitionContext(_ctx, getState()); + enterRule(_localctx, 112, RULE_typeExtensionDefinition); + try { + enterOuterAlt(_localctx, 1); + { + setState(545); + match(EXTEND); + setState(546); + objectTypeDefinition(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DirectiveDefinitionContext extends ParserRuleContext { + public TerminalNode DIRECTIVE() { return getToken(GraphqlParser.DIRECTIVE, 0); } + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public DirectiveLocationsContext directiveLocations() { + return getRuleContext(DirectiveLocationsContext.class,0); + } + public DescriptionContext description() { + return getRuleContext(DescriptionContext.class,0); + } + public ArgumentsDefinitionContext argumentsDefinition() { + return getRuleContext(ArgumentsDefinitionContext.class,0); + } + public DirectiveDefinitionContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_directiveDefinition; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterDirectiveDefinition(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDirectiveDefinition(this); + } + } + + public final DirectiveDefinitionContext directiveDefinition() throws RecognitionException { + DirectiveDefinitionContext _localctx = new DirectiveDefinitionContext(_ctx, getState()); + enterRule(_localctx, 114, RULE_directiveDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(549); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(548); + description(); + } + } + + setState(551); + match(DIRECTIVE); + setState(552); + match(T__13); + setState(553); + name(); + setState(555); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__5) { + { + setState(554); + argumentsDefinition(); + } + } + + setState(557); + match(T__10); + setState(558); + directiveLocations(0); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DirectiveLocationContext extends ParserRuleContext { + public NameContext name() { + return getRuleContext(NameContext.class,0); + } + public DirectiveLocationContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_directiveLocation; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterDirectiveLocation(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDirectiveLocation(this); + } + } + + public final DirectiveLocationContext directiveLocation() throws RecognitionException { + DirectiveLocationContext _localctx = new DirectiveLocationContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_directiveLocation); + try { + enterOuterAlt(_localctx, 1); + { + setState(560); + name(); + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + return _localctx; + } + + public static class DirectiveLocationsContext extends ParserRuleContext { + public DirectiveLocationContext directiveLocation() { + return getRuleContext(DirectiveLocationContext.class,0); + } + public DirectiveLocationsContext directiveLocations() { + return getRuleContext(DirectiveLocationsContext.class,0); + } + public DirectiveLocationsContext(ParserRuleContext parent, int invokingState) { + super(parent, invokingState); + } + @Override public int getRuleIndex() { return RULE_directiveLocations; } + @Override + public void enterRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).enterDirectiveLocations(this); + } + @Override + public void exitRule(ParseTreeListener listener) { + if ( listener instanceof GraphqlListener ) ((GraphqlListener)listener).exitDirectiveLocations(this); + } + } + + public final DirectiveLocationsContext directiveLocations() throws RecognitionException { + return directiveLocations(0); + } + + private DirectiveLocationsContext directiveLocations(int _p) throws RecognitionException { + ParserRuleContext _parentctx = _ctx; + int _parentState = getState(); + DirectiveLocationsContext _localctx = new DirectiveLocationsContext(_ctx, _parentState); + DirectiveLocationsContext _prevctx = _localctx; + int _startState = 118; + enterRecursionRule(_localctx, 118, RULE_directiveLocations, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(563); + directiveLocation(); + } + _ctx.stop = _input.LT(-1); + setState(570); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,69,_ctx); + while ( _alt!=2 && _alt!=org.antlr.v4.runtime.atn.ATN.INVALID_ALT_NUMBER ) { + if ( _alt==1 ) { + if ( _parseListeners!=null ) triggerExitRuleEvent(); + _prevctx = _localctx; + { + { + _localctx = new DirectiveLocationsContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_directiveLocations); + setState(565); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(566); + match(T__16); + setState(567); + directiveLocation(); + } + } + } + setState(572); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,69,_ctx); + } + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + unrollRecursionContexts(_parentctx); + } + return _localctx; + } + + public boolean sempred(RuleContext _localctx, int ruleIndex, int predIndex) { + switch (ruleIndex) { + case 45: + return implementsInterfaces_sempred((ImplementsInterfacesContext)_localctx, predIndex); + case 52: + return unionMembers_sempred((UnionMembersContext)_localctx, predIndex); + case 59: + return directiveLocations_sempred((DirectiveLocationsContext)_localctx, predIndex); + } + return true; + } + private boolean implementsInterfaces_sempred(ImplementsInterfacesContext _localctx, int predIndex) { + switch (predIndex) { + case 0: + return precpred(_ctx, 1); + } + return true; + } + private boolean unionMembers_sempred(UnionMembersContext _localctx, int predIndex) { + switch (predIndex) { + case 1: + return precpred(_ctx, 1); + } + return true; + } + private boolean directiveLocations_sempred(DirectiveLocationsContext _localctx, int predIndex) { + switch (predIndex) { + case 2: + return precpred(_ctx, 1); + } + return true; + } + + public static final String _serializedATN = + "\3\u608b\ua72a\u8133\ub9ed\u417c\u3be7\u7786\u5964\3/\u0240\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\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"; + public static final ATN _ATN = + new ATNDeserializer().deserialize(_serializedATN.toCharArray()); + static { + _decisionToDFA = new DFA[_ATN.getNumberOfDecisions()]; + for (int i = 0; i < _ATN.getNumberOfDecisions(); i++) { + _decisionToDFA[i] = new DFA(_ATN.getDecisionState(i), i); + } + } +} \ No newline at end of file diff --git a/src/main/gen/GraphqlVisitor.java b/src/main/gen/GraphqlVisitor.java new file mode 100644 index 0000000000..8674231d21 --- /dev/null +++ b/src/main/gen/GraphqlVisitor.java @@ -0,0 +1,381 @@ +// Generated from /Users/dlucas/src/oss/graphql-java/src/main/antlr/Graphql.g4 by ANTLR 4.7 + + package graphql.parser.antlr; + +import org.antlr.v4.runtime.tree.ParseTreeVisitor; + +/** + * This interface defines a complete generic visitor for a parse tree produced + * by {@link GraphqlParser}. + * + * @param The return type of the visit operation. Use {@link Void} for + * operations with no return type. + */ +public interface GraphqlVisitor extends ParseTreeVisitor { + /** + * Visit a parse tree produced by {@link GraphqlParser#document}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDocument(GraphqlParser.DocumentContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#definition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDefinition(GraphqlParser.DefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#serviceDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#serviceUrl}. + * @param ctx the parse tree + * @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 + * @return the visitor result + */ + T visitOperationDefinition(GraphqlParser.OperationDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#operationType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOperationType(GraphqlParser.OperationTypeContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#variableDefinitions}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVariableDefinitions(GraphqlParser.VariableDefinitionsContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#variableDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVariableDefinition(GraphqlParser.VariableDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#variable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitVariable(GraphqlParser.VariableContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#defaultValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDefaultValue(GraphqlParser.DefaultValueContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#selectionSet}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelectionSet(GraphqlParser.SelectionSetContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#selection}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSelection(GraphqlParser.SelectionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#field}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitField(GraphqlParser.FieldContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#alias}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitAlias(GraphqlParser.AliasContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#arguments}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitArguments(GraphqlParser.ArgumentsContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#argument}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitArgument(GraphqlParser.ArgumentContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#fragmentSpread}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFragmentSpread(GraphqlParser.FragmentSpreadContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#inlineFragment}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInlineFragment(GraphqlParser.InlineFragmentContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#fragmentDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFragmentDefinition(GraphqlParser.FragmentDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#fragmentName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFragmentName(GraphqlParser.FragmentNameContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#typeCondition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeCondition(GraphqlParser.TypeConditionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#name}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitName(GraphqlParser.NameContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#value}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitValue(GraphqlParser.ValueContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#valueWithVariable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitValueWithVariable(GraphqlParser.ValueWithVariableContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#stringValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitStringValue(GraphqlParser.StringValueContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#description}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDescription(GraphqlParser.DescriptionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#enumValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEnumValue(GraphqlParser.EnumValueContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#arrayValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitArrayValue(GraphqlParser.ArrayValueContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#arrayValueWithVariable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitArrayValueWithVariable(GraphqlParser.ArrayValueWithVariableContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#objectValue}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitObjectValue(GraphqlParser.ObjectValueContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#objectValueWithVariable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitObjectValueWithVariable(GraphqlParser.ObjectValueWithVariableContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#objectField}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitObjectField(GraphqlParser.ObjectFieldContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#objectFieldWithVariable}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitObjectFieldWithVariable(GraphqlParser.ObjectFieldWithVariableContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#directives}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDirectives(GraphqlParser.DirectivesContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#directive}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDirective(GraphqlParser.DirectiveContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#type}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitType(GraphqlParser.TypeContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#typeName}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeName(GraphqlParser.TypeNameContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#listType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitListType(GraphqlParser.ListTypeContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#nonNullType}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitNonNullType(GraphqlParser.NonNullTypeContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#typeSystemDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeSystemDefinition(GraphqlParser.TypeSystemDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#schemaDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitSchemaDefinition(GraphqlParser.SchemaDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#operationTypeDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitOperationTypeDefinition(GraphqlParser.OperationTypeDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#typeDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeDefinition(GraphqlParser.TypeDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#scalarTypeDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitScalarTypeDefinition(GraphqlParser.ScalarTypeDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#objectTypeDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitObjectTypeDefinition(GraphqlParser.ObjectTypeDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#implementsInterfaces}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitImplementsInterfaces(GraphqlParser.ImplementsInterfacesContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#fieldsDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFieldsDefinition(GraphqlParser.FieldsDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#fieldDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitFieldDefinition(GraphqlParser.FieldDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#argumentsDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitArgumentsDefinition(GraphqlParser.ArgumentsDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#inputValueDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInputValueDefinition(GraphqlParser.InputValueDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#interfaceTypeDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInterfaceTypeDefinition(GraphqlParser.InterfaceTypeDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#unionTypeDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUnionTypeDefinition(GraphqlParser.UnionTypeDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#unionMembers}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitUnionMembers(GraphqlParser.UnionMembersContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#enumTypeDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEnumTypeDefinition(GraphqlParser.EnumTypeDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#enumValueDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitEnumValueDefinition(GraphqlParser.EnumValueDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#inputObjectTypeDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitInputObjectTypeDefinition(GraphqlParser.InputObjectTypeDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#typeExtensionDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitTypeExtensionDefinition(GraphqlParser.TypeExtensionDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#directiveDefinition}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDirectiveDefinition(GraphqlParser.DirectiveDefinitionContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#directiveLocation}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDirectiveLocation(GraphqlParser.DirectiveLocationContext ctx); + /** + * Visit a parse tree produced by {@link GraphqlParser#directiveLocations}. + * @param ctx the parse tree + * @return the visitor result + */ + T visitDirectiveLocations(GraphqlParser.DirectiveLocationsContext ctx); +} \ No newline at end of file diff --git a/src/main/java/graphql/language/ServiceDefinition.java b/src/main/java/graphql/language/ServiceDefinition.java index 5a25b8239a..bf1962139a 100644 --- a/src/main/java/graphql/language/ServiceDefinition.java +++ b/src/main/java/graphql/language/ServiceDefinition.java @@ -4,10 +4,11 @@ public class ServiceDefinition extends AbstractNode { - private final String name; - private final String url; + private String name; + private String url; private List> typeDefinitions; + public ServiceDefinition() {} public ServiceDefinition(String name, String url) { this.name = name; @@ -38,6 +39,10 @@ public String getUrl() { return url; } + public void setName(String name) { this.name = name; } + + public void setUrl(String url) { this.url = url; } + public List> getTypeDefinitions() { return typeDefinitions; } diff --git a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java index fe3fbcf548..4686d177ca 100644 --- a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java +++ b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java @@ -3,47 +3,7 @@ import graphql.Assert; import graphql.Internal; -import graphql.language.AbstractNode; -import graphql.language.Argument; -import graphql.language.ArrayValue; -import graphql.language.BooleanValue; -import graphql.language.Comment; -import graphql.language.Description; -import graphql.language.Directive; -import graphql.language.DirectiveDefinition; -import graphql.language.DirectiveLocation; -import graphql.language.Document; -import graphql.language.EnumTypeDefinition; -import graphql.language.EnumValue; -import graphql.language.EnumValueDefinition; -import graphql.language.Field; -import graphql.language.FieldDefinition; -import graphql.language.FloatValue; -import graphql.language.FragmentDefinition; -import graphql.language.FragmentSpread; -import graphql.language.InlineFragment; -import graphql.language.InputObjectTypeDefinition; -import graphql.language.InputValueDefinition; -import graphql.language.IntValue; -import graphql.language.InterfaceTypeDefinition; -import graphql.language.ListType; -import graphql.language.NonNullType; -import graphql.language.ObjectField; -import graphql.language.ObjectTypeDefinition; -import graphql.language.ObjectValue; -import graphql.language.OperationDefinition; -import graphql.language.OperationTypeDefinition; -import graphql.language.ScalarTypeDefinition; -import graphql.language.SchemaDefinition; -import graphql.language.SelectionSet; -import graphql.language.SourceLocation; -import graphql.language.StringValue; -import graphql.language.TypeExtensionDefinition; -import graphql.language.TypeName; -import graphql.language.UnionTypeDefinition; -import graphql.language.Value; -import graphql.language.VariableDefinition; -import graphql.language.VariableReference; +import graphql.language.*; import graphql.parser.antlr.GraphqlBaseVisitor; import graphql.parser.antlr.GraphqlParser; import org.antlr.v4.runtime.CommonTokenStream; @@ -53,11 +13,7 @@ import java.io.StringWriter; import java.math.BigDecimal; import java.math.BigInteger; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; -import java.util.List; +import java.util.*; import static graphql.language.NullValue.Null; import static graphql.parser.StringValueParsing.parseSingleQuotedString; @@ -75,6 +31,9 @@ public class GraphqlAntlrToLanguage extends GraphqlBaseVisitor { } private enum ContextProperty { + ServiceDefinition, + ServiceUrlDefinition, + StringValue, OperationDefinition, FragmentDefinition, Field, @@ -114,7 +73,6 @@ public ContextEntry(ContextProperty contextProperty, Object value) { private void addContextProperty(ContextProperty contextProperty, Object value) { - switch (contextProperty) { case SelectionSet: newSelectionSet((SelectionSet) value); @@ -473,6 +431,23 @@ public Void visitSchemaDefinition(GraphqlParser.SchemaDefinitionContext ctx) { return null; } + @Override + public Void visitServiceUrl(GraphqlParser.ServiceUrlContext ctx) { + String url = parseSingleQuotedString(ctx.stringValue().getText()); + ServiceDefinition def = (ServiceDefinition) contextStack.peek().value; + def.setUrl(url); + return null; + } + + @Override + public Void visitServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx) { + ServiceDefinition def = new ServiceDefinition(); + addContextProperty(ContextProperty.ServiceDefinition, def); + super.visitChildren(ctx); + return super.visitServiceDefinition(ctx); + //return null; + } + @Override public Void visitOperationTypeDefinition(GraphqlParser.OperationTypeDefinitionContext ctx) { OperationTypeDefinition def = new OperationTypeDefinition(ctx.operationType().getText()); @@ -839,9 +814,4 @@ private List getCommentOnChannel(List refChannel) { } return comments; } - - @Override - public Void visitServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx) { - return super.visitServiceDefinition(ctx); - } } diff --git a/src/test/groovy/graphql/parser/ParserTest.groovy b/src/test/groovy/graphql/parser/ParserTest.groovy index bf6bf6c1b8..584b8e2b9f 100644 --- a/src/test/groovy/graphql/parser/ParserTest.groovy +++ b/src/test/groovy/graphql/parser/ParserTest.groovy @@ -38,8 +38,28 @@ import spock.lang.Specification import spock.lang.Unroll class ParserTest extends Specification { + def "parse service definition"() { + given: + def input = +"""service PostSvc { + url: "asd" + type Post { + id: ID! + } +} - +service UserSvc { + url: "xyz" + type User { + id: ID! + } +}""" + when: + Document document = new Parser().parseDocument(input) + then: + assert document.definitions.size() > 0 + } +/* def "parse anonymous simple query"() { given: def input = "{ me }" @@ -53,7 +73,6 @@ class ParserTest extends Specification { assertField(document.definitions[0] as OperationDefinition, "me") } - def assertField(OperationDefinition operationDefinition, String fieldName) { Selection selection = operationDefinition.getSelectionSet().getSelections()[0] assert selection instanceof Field @@ -669,4 +688,5 @@ triple3 : """edge cases \\""" "" " \\"" \\" edge cases""" } true } + */ } From 4b043068ecd774efad5a96c34a5034ba859507ff Mon Sep 17 00:00:00 2001 From: Andreas Marek Date: Fri, 9 Feb 2018 09:18:08 +1100 Subject: [PATCH 08/19] improved testing --- .../java/graphql/StitchingDSLExample.java | 41 +++------ .../graphql/language/FieldTransformation.java | 13 +++ .../graphql/schema/HttpRemoteRetriever.java | 1 + .../schema/RemoteRootQueryDataFetcher.java | 6 +- .../schema/TransformationDataFetcher.java | 92 +++++++++++++++++++ .../schema/idl/StitchingRuntimeWiring.java | 35 +++++++ 6 files changed, 158 insertions(+), 30 deletions(-) create mode 100644 src/main/java/graphql/schema/TransformationDataFetcher.java create mode 100644 src/main/java/graphql/schema/idl/StitchingRuntimeWiring.java diff --git a/src/main/java/graphql/StitchingDSLExample.java b/src/main/java/graphql/StitchingDSLExample.java index d68100836e..d36cb9ec61 100644 --- a/src/main/java/graphql/StitchingDSLExample.java +++ b/src/main/java/graphql/StitchingDSLExample.java @@ -2,6 +2,7 @@ import graphql.language.Document; import graphql.language.FieldDefinition; +import graphql.language.FieldTransformation; import graphql.language.InputValueDefinition; import graphql.language.ListType; import graphql.language.ObjectTypeDefinition; @@ -17,6 +18,7 @@ import graphql.schema.idl.SchemaGenerator; import graphql.schema.idl.SchemaParser; import graphql.schema.idl.SchemaPrinter; +import graphql.schema.idl.StitchingRuntimeWiring; import graphql.schema.idl.TypeDefinitionRegistry; import graphql.schema.idl.WiringFactory; @@ -33,25 +35,6 @@ 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 { @@ -151,10 +134,14 @@ private static ServiceDefinition buildPostsService() { * } * } */ - ServiceDefinition serviceDefinition = new ServiceDefinition("Posts", "https://4r09jwx0k9.lp.gql.zone/graphql"); + ServiceDefinition serviceDefinition = new ServiceDefinition("Posts", "https://p0rm35pkm0.lp.gql.zone/graphql"); ObjectTypeDefinition postTypeDefinition = new ObjectTypeDefinition("Post"); postTypeDefinition.getFieldDefinitions().add(newFieldDefinition(serviceDefinition, "id", "ID")); - postTypeDefinition.getFieldDefinitions().add(newFieldDefinition(serviceDefinition, "authorId", "ID")); + FieldDefinition authorField = newFieldDefinition(serviceDefinition, "authorId", "ID"); + FieldTransformation authorFieldTransformation = new FieldTransformation(); + authorFieldTransformation.setTargetFieldDefinition(newFieldDefinition(serviceDefinition, "author", "User")); + authorField.setFieldTransformation(authorFieldTransformation); + postTypeDefinition.getFieldDefinitions().add(authorField); ObjectTypeDefinition queryTypeDefinition = new ObjectTypeDefinition("Query"); @@ -177,7 +164,7 @@ private static ServiceDefinition buildUsersService() { * } * } */ - ServiceDefinition serviceDefinition = new ServiceDefinition("Users", "https://4r09jwx0k9.lp.gql.zone/graphql"); + ServiceDefinition serviceDefinition = new ServiceDefinition("Users", "https://r9km4x894n.lp.gql.zone/graphql"); ObjectTypeDefinition userTypeDefinition = new ObjectTypeDefinition("User"); userTypeDefinition.getFieldDefinitions().add(newFieldDefinition(serviceDefinition, "id", "ID")); userTypeDefinition.getFieldDefinitions().add(newFieldDefinition(serviceDefinition, "name", "String")); @@ -232,14 +219,10 @@ public static void main(String[] args) throws IOException { String printed = schemaPrinter.print(graphQLSchema); System.out.println("schema:" + printed); -// GraphQL build = GraphQL.newGraphQL(graphQLSchema).build(); -// -// ExecutionResult executionResult1 = build.execute("{hello}"); -// System.out.println(executionResult1.getData().toString()); -// + GraphQL build = GraphQL.newGraphQL(graphQLSchema).build(); // -// ExecutionResult executionResult2 = build.execute("{hello2}"); -// System.out.println(executionResult2.getData().toString()); + ExecutionResult executionResult1 = build.execute("{posts{id, authorId}}"); + System.out.println(executionResult1.getData().toString()); } diff --git a/src/main/java/graphql/language/FieldTransformation.java b/src/main/java/graphql/language/FieldTransformation.java index b9cd29c5a2..ebf4719bca 100644 --- a/src/main/java/graphql/language/FieldTransformation.java +++ b/src/main/java/graphql/language/FieldTransformation.java @@ -3,6 +3,19 @@ import java.util.List; public class FieldTransformation extends AbstractNode { + + private FieldDefinition targetFieldDefinition; + // TODO: TargetExpression? + + + public FieldDefinition getTargetFieldDefinition() { + return targetFieldDefinition; + } + + public void setTargetFieldDefinition(FieldDefinition targetFieldDefinition) { + this.targetFieldDefinition = targetFieldDefinition; + } + @Override public List getChildren() { return null; diff --git a/src/main/java/graphql/schema/HttpRemoteRetriever.java b/src/main/java/graphql/schema/HttpRemoteRetriever.java index 06a9c81519..2c0019898e 100644 --- a/src/main/java/graphql/schema/HttpRemoteRetriever.java +++ b/src/main/java/graphql/schema/HttpRemoteRetriever.java @@ -46,6 +46,7 @@ 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 d3ecef5c83..8d79f7d8d9 100644 --- a/src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java +++ b/src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java @@ -2,12 +2,14 @@ import graphql.PublicApi; +import graphql.language.Field; import graphql.language.OperationDefinition; import graphql.language.SelectionSet; import graphql.language.ServiceDefinition; import java.net.MalformedURLException; import java.net.URL; +import java.util.LinkedHashMap; import java.util.Map; import java.util.concurrent.ExecutionException; @@ -31,9 +33,11 @@ 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); try { Map result = remoteRetriever.query(query).get(); - return result; + Map data = (Map) result.get("data"); + return data.get(field.getName()); } catch (Exception e) { throw new RuntimeException(e); } diff --git a/src/main/java/graphql/schema/TransformationDataFetcher.java b/src/main/java/graphql/schema/TransformationDataFetcher.java new file mode 100644 index 0000000000..65d01a848e --- /dev/null +++ b/src/main/java/graphql/schema/TransformationDataFetcher.java @@ -0,0 +1,92 @@ +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; + +import java.net.MalformedURLException; +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; + +@PublicApi +public class TransformationDataFetcher implements DataFetcher { + + private ServiceDefinition serviceDefinition; + + private ValidationUtil validationUtil = new ValidationUtil(); + + public TransformationDataFetcher(ServiceDefinition owner) { + this.serviceDefinition = owner; + } + + @Override + public Object get(DataFetchingEnvironment environment) { + FieldTransformation fieldTransformation = environment.getFieldDefinition().getDefinition().getFieldTransformation(); + + TypeName targetType = validationUtil.getUnmodifiedType(fieldTransformation.getTargetFieldDefinition().getType()); + GraphQLType targetGraphQLType = environment.getGraphQLSchema().getType(targetType.getName()); + assertTrue(targetGraphQLType instanceof ObjectTypeDefinition, "target type must be an Object"); + + GraphQLObjectType targetObjectType = (GraphQLObjectType) targetGraphQLType; + + GraphQLFieldDefinition targetIdField = targetObjectType.getFieldDefinition("id"); + assertNotNull(targetIdField, "target object must have an id field"); + + ServiceDefinition targetService = targetIdField.getDefinition().getServiceDefinition(); + + HttpRemoteRetriever remoteRetriever = new HttpRemoteRetriever(getRemoteUrl(targetService)); + + + PropertyDataFetcher propertyDataFetcher = new PropertyDataFetcher(environment.getFieldDefinition().getName()); + Object id = propertyDataFetcher.get(environment); + assertNotNull(id, "id is null"); + + // Creating query for fetching by Id + // 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())); + + 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; + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + private URL getRemoteUrl(ServiceDefinition targetService) { + try { + return new URL(targetService.getUrl()); + } catch (MalformedURLException e) { + throw new RuntimeException(e); + } + } + + +} diff --git a/src/main/java/graphql/schema/idl/StitchingRuntimeWiring.java b/src/main/java/graphql/schema/idl/StitchingRuntimeWiring.java new file mode 100644 index 0000000000..70db4009cd --- /dev/null +++ b/src/main/java/graphql/schema/idl/StitchingRuntimeWiring.java @@ -0,0 +1,35 @@ +package graphql.schema.idl; + +import graphql.Assert; +import graphql.language.TypeDefinition; +import graphql.schema.DataFetcher; +import graphql.schema.RemoteRootQueryDataFetcher; +import graphql.schema.TransformationDataFetcher; + +public class StitchingRuntimeWiring implements WiringFactory { + + + @Override + public boolean providesDataFetcher(FieldWiringEnvironment environment) { + TypeDefinition parentType = environment.getParentType(); + if (parentType.getName().equals("Query")) { + return true; + } + if (environment.getFieldDefinition().getFieldTransformation() != null) { + return true; + } + return false; + } + + @Override + public DataFetcher getDataFetcher(FieldWiringEnvironment environment) { + if (environment.getParentType().getName().equals("Query")) { + return new RemoteRootQueryDataFetcher(environment.getFieldDefinition().getServiceDefinition()); + } + if (environment.getFieldDefinition().getFieldTransformation() != null) { + return new TransformationDataFetcher(environment.getFieldDefinition().getServiceDefinition()); + + } + return Assert.assertShouldNeverHappen(); + } +} \ No newline at end of file From 321a55fe8c94a4231cb5aba5365b9a1e537eb077 Mon Sep 17 00:00:00 2001 From: Andreas Marek Date: Fri, 9 Feb 2018 09:31:16 +1100 Subject: [PATCH 09/19] handle transformation --- .../graphql/schema/idl/SchemaGenerator.java | 38 ++++++++++++++----- 1 file changed, 29 insertions(+), 9 deletions(-) diff --git a/src/main/java/graphql/schema/idl/SchemaGenerator.java b/src/main/java/graphql/schema/idl/SchemaGenerator.java index 5f6a395ba1..150b1eb08a 100644 --- a/src/main/java/graphql/schema/idl/SchemaGenerator.java +++ b/src/main/java/graphql/schema/idl/SchemaGenerator.java @@ -495,18 +495,38 @@ private GraphQLScalarType buildScalar(BuildContext buildCtx, ScalarTypeDefinitio private GraphQLFieldDefinition buildField(BuildContext buildCtx, TypeDefinition parentType, FieldDefinition fieldDef) { GraphQLFieldDefinition.Builder builder = GraphQLFieldDefinition.newFieldDefinition(); - builder.definition(fieldDef); - builder.name(fieldDef.getName()); - builder.description(buildDescription(fieldDef, fieldDef.getDescription())); - builder.deprecate(buildDeprecationReason(fieldDef.getDirectives())); + if(fieldDef.getFieldTransformation() != null) { + FieldDefinition targetFieldDefinition = fieldDef.getFieldTransformation().getTargetFieldDefinition(); + builder.definition(fieldDef); + builder.name(targetFieldDefinition.getName()); + builder.description(buildDescription(fieldDef, fieldDef.getDescription())); + builder.deprecate(buildDeprecationReason(fieldDef.getDirectives())); - builder.dataFetcherFactory(buildDataFetcherFactory(buildCtx, parentType, fieldDef)); + builder.dataFetcherFactory(buildDataFetcherFactory(buildCtx, parentType, fieldDef)); + + fieldDef.getInputValueDefinitions().forEach(inputValueDefinition -> + builder.argument(buildArgument(buildCtx, inputValueDefinition))); + + GraphQLOutputType outputType = buildOutputType(buildCtx, targetFieldDefinition.getType()); + builder.type(outputType); + + }else { + builder.definition(fieldDef); + builder.name(fieldDef.getName()); + builder.description(buildDescription(fieldDef, fieldDef.getDescription())); + builder.deprecate(buildDeprecationReason(fieldDef.getDirectives())); + + builder.dataFetcherFactory(buildDataFetcherFactory(buildCtx, parentType, fieldDef)); + + fieldDef.getInputValueDefinitions().forEach(inputValueDefinition -> + builder.argument(buildArgument(buildCtx, inputValueDefinition))); + + GraphQLOutputType outputType = buildOutputType(buildCtx, fieldDef.getType()); + builder.type(outputType); + + } - fieldDef.getInputValueDefinitions().forEach(inputValueDefinition -> - builder.argument(buildArgument(buildCtx, inputValueDefinition))); - GraphQLOutputType outputType = buildOutputType(buildCtx, fieldDef.getType()); - builder.type(outputType); return builder.build(); } From ed2b439d1571f46a707029e03027a25d896f3b58 Mon Sep 17 00:00:00 2001 From: Diogo Lucas Date: Fri, 9 Feb 2018 09:53:06 +1100 Subject: [PATCH 10/19] Syntax now covers service definitions. --- .../graphql/language/ServiceDefinition.java | 28 ++++++++++------ .../parser/GraphqlAntlrToLanguage.java | 33 ++++++++++++------- 2 files changed, 39 insertions(+), 22 deletions(-) diff --git a/src/main/java/graphql/language/ServiceDefinition.java b/src/main/java/graphql/language/ServiceDefinition.java index bf1962139a..481e57a89f 100644 --- a/src/main/java/graphql/language/ServiceDefinition.java +++ b/src/main/java/graphql/language/ServiceDefinition.java @@ -1,18 +1,26 @@ package graphql.language; +import javax.xml.ws.Service; +import java.util.ArrayList; import java.util.List; -public class ServiceDefinition extends AbstractNode { +public class ServiceDefinition extends AbstractNode implements TypeDefinition { - private String name; - private String url; - private List> typeDefinitions; + private final String name; + private final String url; + private final List directives; - public ServiceDefinition() {} + private List> typeDefinitions; - public ServiceDefinition(String name, String url) { + public ServiceDefinition(String name, String url, List directives) { this.name = name; this.url = url; + this.directives = directives; + this.typeDefinitions = new ArrayList<>(); + } + + public ServiceDefinition(String name, String url) { + this(name, url, new ArrayList<>()); } @Override @@ -30,6 +38,10 @@ public ServiceDefinition deepCopy() { return null; } + @Override + public List getDirectives() { + return directives; + } public String getName() { return name; @@ -39,10 +51,6 @@ public String getUrl() { return url; } - public void setName(String name) { this.name = name; } - - public void setUrl(String url) { this.url = url; } - public List> getTypeDefinitions() { return typeDefinitions; } diff --git a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java index 4686d177ca..64c29cb876 100644 --- a/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java +++ b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java @@ -431,21 +431,15 @@ public Void visitSchemaDefinition(GraphqlParser.SchemaDefinitionContext ctx) { return null; } - @Override - public Void visitServiceUrl(GraphqlParser.ServiceUrlContext ctx) { - String url = parseSingleQuotedString(ctx.stringValue().getText()); - ServiceDefinition def = (ServiceDefinition) contextStack.peek().value; - def.setUrl(url); - return null; - } - @Override public Void visitServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx) { - ServiceDefinition def = new ServiceDefinition(); + String url = parseSingleQuotedString(ctx.serviceUrl().stringValue().getText()); + String name = ctx.name().getText(); + ServiceDefinition def = new ServiceDefinition(name, url); addContextProperty(ContextProperty.ServiceDefinition, def); super.visitChildren(ctx); - return super.visitServiceDefinition(ctx); - //return null; + result.getDefinitions().add(def); + return null; } @Override @@ -458,6 +452,7 @@ public Void visitOperationTypeDefinition(GraphqlParser.OperationTypeDefinitionCo break; } } + addContextProperty(ContextProperty.OperationTypeDefinition, def); super.visitChildren(ctx); popContext(); @@ -479,6 +474,7 @@ public Void visitScalarTypeDefinition(GraphqlParser.ScalarTypeDefinitionContext @Override public Void visitObjectTypeDefinition(GraphqlParser.ObjectTypeDefinitionContext ctx) { ObjectTypeDefinition def = null; + ServiceDefinition svcDef = null; for (ContextEntry contextEntry : contextStack) { if (contextEntry.contextProperty == ContextProperty.TypeExtensionDefinition) { ((TypeExtensionDefinition) contextEntry.value).setName(ctx.name().getText()); @@ -486,11 +482,24 @@ public Void visitObjectTypeDefinition(GraphqlParser.ObjectTypeDefinitionContext break; } } + + for (ContextEntry contextEntry : contextStack) { + if (contextEntry.contextProperty == ContextProperty.ServiceDefinition) { + svcDef = (ServiceDefinition) contextEntry.value; + break; + } + } + if (null == def) { def = new ObjectTypeDefinition(ctx.name().getText()); newNode(def, ctx); def.setDescription(newDescription(ctx.description())); - result.getDefinitions().add(def); + if (null != svcDef) { + svcDef.getTypeDefinitions().add(def); + } + else { + result.getDefinitions().add(def); + } } addContextProperty(ContextProperty.ObjectTypeDefinition, def); super.visitChildren(ctx); From 38dfa91b072a865ec7332eca67f1445622a3a459 Mon Sep 17 00:00:00 2001 From: Diogo Lucas Date: Fri, 9 Feb 2018 10:17:28 +1100 Subject: [PATCH 11/19] supports type extensions now, fixes a cardinality bug in type defos within a service --- src/main/antlr/Graphql.g4 | 2 +- src/main/gen/GraphqlBaseVisitor.java | 7 - src/main/gen/GraphqlParser.java | 1363 ++++++++++------- src/main/gen/GraphqlVisitor.java | 6 - .../groovy/graphql/parser/ParserTest.groovy | 6 + 5 files changed, 848 insertions(+), 536 deletions(-) diff --git a/src/main/antlr/Graphql.g4 b/src/main/antlr/Graphql.g4 index b4c9352709..8ec2fb511c 100644 --- a/src/main/antlr/Graphql.g4 +++ b/src/main/antlr/Graphql.g4 @@ -16,7 +16,7 @@ serviceDefinition ; serviceDefinition: -'service' name '{' serviceUrl typeSystemDefinition '}' ; +'service' name '{' serviceUrl typeSystemDefinition* '}' ; serviceUrl: 'url' ':' stringValue; operationDefinition: diff --git a/src/main/gen/GraphqlBaseVisitor.java b/src/main/gen/GraphqlBaseVisitor.java index 2e4eec1d01..e52f07e53c 100644 --- a/src/main/gen/GraphqlBaseVisitor.java +++ b/src/main/gen/GraphqlBaseVisitor.java @@ -41,13 +41,6 @@ public class GraphqlBaseVisitor extends AbstractParseTreeVisitor implement * {@link #visitChildren} on {@code ctx}.

*/ @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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 visitor) { + if ( visitor instanceof GraphqlVisitor ) return ((GraphqlVisitor)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 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 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 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 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 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 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 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 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 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 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