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/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/antlr/Graphql.g4 b/src/main/antlr/Graphql.g4 index 99812471a8..9a68507ae5 100644 --- a/src/main/antlr/Graphql.g4 +++ b/src/main/antlr/Graphql.g4 @@ -4,16 +4,21 @@ grammar Graphql; package graphql.parser.antlr; } -// Document +// Document document : definition+; definition: operationDefinition | fragmentDefinition | -typeSystemDefinition +typeSystemDefinition | +serviceDefinition ; +serviceDefinition: +'service' name '{' serviceUrl typeSystemDefinition* '}' ; +serviceUrl: 'url' ':' stringValue; + operationDefinition: selectionSet | operationType name? variableDefinitions? directives? selectionSet; @@ -153,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+ ')'; @@ -211,6 +220,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/gen/Graphql.tokens b/src/main/gen/Graphql.tokens new file mode 100644 index 0000000000..e3f3cb9238 --- /dev/null +++ b/src/main/gen/Graphql.tokens @@ -0,0 +1,80 @@ +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 +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 +'url'=4 +':'=5 +'('=6 +')'=7 +'$'=8 +'='=9 +'...'=10 +'on'=11 +'['=12 +']'=13 +'@'=14 +'!'=15 +'&'=16 +'=>'=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 new file mode 100644 index 0000000000..0b807399e8 --- /dev/null +++ b/src/main/gen/GraphqlBaseListener.java @@ -0,0 +1,785 @@ +// 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 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} + * + *

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..4b4ddcc64d --- /dev/null +++ b/src/main/gen/GraphqlBaseVisitor.java @@ -0,0 +1,450 @@ +// 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 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 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} + * + *

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..22cdfbd9f2 --- /dev/null +++ b/src/main/gen/GraphqlLexer.java @@ -0,0 +1,270 @@ +// 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, + 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" + }; + + 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", + "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" + }; + + 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, 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\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_\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 { + _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..e3f3cb9238 --- /dev/null +++ b/src/main/gen/GraphqlLexer.tokens @@ -0,0 +1,80 @@ +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 +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 +'url'=4 +':'=5 +'('=6 +')'=7 +'$'=8 +'='=9 +'...'=10 +'on'=11 +'['=12 +']'=13 +'@'=14 +'!'=15 +'&'=16 +'=>'=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 new file mode 100644 index 0000000000..22764d1f07 --- /dev/null +++ b/src/main/gen/GraphqlListener.java @@ -0,0 +1,632 @@ +// 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#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 + */ + 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..121d76bd1a --- /dev/null +++ b/src/main/gen/GraphqlParser.java @@ -0,0 +1,4780 @@ +// 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, + 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, + 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_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", + "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", "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, "'-'" + }; + private static final String[] _SYMBOLIC_NAMES = { + null, 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); + } + @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 { + DocumentContext _localctx = new DocumentContext(_ctx, getState()); + enterRule(_localctx, 0, RULE_document); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(125); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(124); + definition(); + } + } + 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) ); + } + } + 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); + } + @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 { + DefinitionContext _localctx = new DefinitionContext(_ctx, getState()); + enterRule(_localctx, 2, RULE_definition); + try { + setState(133); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__1: + case QUERY: + case MUTATION: + case SUBSCRIPTION: + enterOuterAlt(_localctx, 1); + { + setState(129); + operationDefinition(); + } + break; + case FRAGMENT: + enterOuterAlt(_localctx, 2); + { + setState(130); + 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(131); + typeSystemDefinition(); + } + break; + case T__0: + enterOuterAlt(_localctx, 4); + { + setState(132); + 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 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); + } + @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); + } + @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); + { + setState(135); + match(T__0); + setState(136); + name(); + setState(137); + match(T__1); + 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(139); + typeSystemDefinition(); + } + } + setState(144); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(145); + 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); + } + @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 { + ServiceUrlContext _localctx = new ServiceUrlContext(_ctx, getState()); + enterRule(_localctx, 6, RULE_serviceUrl); + try { + enterOuterAlt(_localctx, 1); + { + setState(147); + match(T__3); + setState(148); + match(T__4); + setState(149); + 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); + } + @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 { + OperationDefinitionContext _localctx = new OperationDefinitionContext(_ctx, getState()); + enterRule(_localctx, 8, RULE_operationDefinition); + int _la; + try { + setState(164); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__1: + enterOuterAlt(_localctx, 1); + { + setState(151); + selectionSet(); + } + break; + case QUERY: + case MUTATION: + case SUBSCRIPTION: + enterOuterAlt(_localctx, 2); + { + setState(152); + operationType(); + 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(153); + name(); + } + } + + setState(157); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__5) { + { + setState(156); + variableDefinitions(); + } + } + + setState(160); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(159); + directives(); + } + } + + setState(162); + 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); + } + @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 { + OperationTypeContext _localctx = new OperationTypeContext(_ctx, getState()); + enterRule(_localctx, 10, RULE_operationType); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(166); + _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); + } + @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 { + VariableDefinitionsContext _localctx = new VariableDefinitionsContext(_ctx, getState()); + enterRule(_localctx, 12, RULE_variableDefinitions); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(168); + match(T__5); + setState(170); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(169); + variableDefinition(); + } + } + setState(172); + _errHandler.sync(this); + _la = _input.LA(1); + } while ( _la==T__7 ); + setState(174); + 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); + } + @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 { + VariableDefinitionContext _localctx = new VariableDefinitionContext(_ctx, getState()); + enterRule(_localctx, 14, RULE_variableDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(176); + variable(); + setState(177); + match(T__4); + setState(178); + type(); + setState(180); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__8) { + { + setState(179); + 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); + } + @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 { + VariableContext _localctx = new VariableContext(_ctx, getState()); + enterRule(_localctx, 16, RULE_variable); + try { + enterOuterAlt(_localctx, 1); + { + setState(182); + match(T__7); + setState(183); + 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); + } + @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 { + DefaultValueContext _localctx = new DefaultValueContext(_ctx, getState()); + enterRule(_localctx, 18, RULE_defaultValue); + try { + enterOuterAlt(_localctx, 1); + { + setState(185); + match(T__8); + setState(186); + 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); + } + @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 { + SelectionSetContext _localctx = new SelectionSetContext(_ctx, getState()); + enterRule(_localctx, 20, RULE_selectionSet); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(188); + match(T__1); + setState(190); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(189); + selection(); + } + } + 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(194); + 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); + } + @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(199); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,10,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(196); + field(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(197); + fragmentSpread(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(198); + 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); + } + @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 { + FieldContext _localctx = new FieldContext(_ctx, getState()); + enterRule(_localctx, 24, RULE_field); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(202); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,11,_ctx) ) { + case 1: + { + setState(201); + alias(); + } + break; + } + setState(204); + name(); + setState(206); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__5) { + { + setState(205); + arguments(); + } + } + + setState(209); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(208); + directives(); + } + } + + setState(212); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__1) { + { + setState(211); + 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); + } + @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 { + AliasContext _localctx = new AliasContext(_ctx, getState()); + enterRule(_localctx, 26, RULE_alias); + try { + enterOuterAlt(_localctx, 1); + { + setState(214); + name(); + setState(215); + 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); + } + @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 { + ArgumentsContext _localctx = new ArgumentsContext(_ctx, getState()); + enterRule(_localctx, 28, RULE_arguments); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(217); + match(T__5); + setState(219); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(218); + argument(); + } + } + 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(223); + 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); + } + @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 { + ArgumentContext _localctx = new ArgumentContext(_ctx, getState()); + enterRule(_localctx, 30, RULE_argument); + try { + enterOuterAlt(_localctx, 1); + { + setState(225); + name(); + setState(226); + match(T__4); + setState(227); + 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); + } + @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 { + FragmentSpreadContext _localctx = new FragmentSpreadContext(_ctx, getState()); + enterRule(_localctx, 32, RULE_fragmentSpread); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(229); + match(T__9); + setState(230); + fragmentName(); + setState(232); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(231); + 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); + } + @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 { + InlineFragmentContext _localctx = new InlineFragmentContext(_ctx, getState()); + enterRule(_localctx, 34, RULE_inlineFragment); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(234); + match(T__9); + setState(236); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__10) { + { + setState(235); + typeCondition(); + } + } + + setState(239); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(238); + directives(); + } + } + + setState(241); + 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); + } + @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 { + FragmentDefinitionContext _localctx = new FragmentDefinitionContext(_ctx, getState()); + enterRule(_localctx, 36, RULE_fragmentDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(243); + match(FRAGMENT); + setState(244); + fragmentName(); + setState(245); + typeCondition(); + setState(247); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(246); + directives(); + } + } + + setState(249); + 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); + } + @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 { + FragmentNameContext _localctx = new FragmentNameContext(_ctx, getState()); + enterRule(_localctx, 38, RULE_fragmentName); + try { + enterOuterAlt(_localctx, 1); + { + setState(251); + 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); + } + @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 { + TypeConditionContext _localctx = new TypeConditionContext(_ctx, getState()); + enterRule(_localctx, 40, RULE_typeCondition); + try { + enterOuterAlt(_localctx, 1); + { + setState(253); + match(T__10); + setState(254); + 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); + } + @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 { + NameContext _localctx = new NameContext(_ctx, getState()); + enterRule(_localctx, 42, RULE_name); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + 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); + } + 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); + } + @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(266); + _errHandler.sync(this); + switch (_input.LA(1)) { + case StringValue: + case TripleQuotedStringValue: + enterOuterAlt(_localctx, 1); + { + setState(258); + stringValue(); + } + break; + case IntValue: + enterOuterAlt(_localctx, 2); + { + setState(259); + match(IntValue); + } + break; + case FloatValue: + enterOuterAlt(_localctx, 3); + { + setState(260); + match(FloatValue); + } + break; + case BooleanValue: + enterOuterAlt(_localctx, 4); + { + setState(261); + match(BooleanValue); + } + break; + case NullValue: + enterOuterAlt(_localctx, 5); + { + setState(262); + 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(263); + enumValue(); + } + break; + case T__11: + enterOuterAlt(_localctx, 7); + { + setState(264); + arrayValue(); + } + break; + case T__1: + enterOuterAlt(_localctx, 8); + { + setState(265); + 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); + } + @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(277); + _errHandler.sync(this); + switch (_input.LA(1)) { + case T__7: + enterOuterAlt(_localctx, 1); + { + setState(268); + variable(); + } + break; + case StringValue: + case TripleQuotedStringValue: + enterOuterAlt(_localctx, 2); + { + setState(269); + stringValue(); + } + break; + case IntValue: + enterOuterAlt(_localctx, 3); + { + setState(270); + match(IntValue); + } + break; + case FloatValue: + enterOuterAlt(_localctx, 4); + { + setState(271); + match(FloatValue); + } + break; + case BooleanValue: + enterOuterAlt(_localctx, 5); + { + setState(272); + match(BooleanValue); + } + break; + case NullValue: + enterOuterAlt(_localctx, 6); + { + setState(273); + 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(274); + enumValue(); + } + break; + case T__11: + enterOuterAlt(_localctx, 8); + { + setState(275); + arrayValueWithVariable(); + } + break; + case T__1: + enterOuterAlt(_localctx, 9); + { + setState(276); + 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); + } + @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 { + StringValueContext _localctx = new StringValueContext(_ctx, getState()); + enterRule(_localctx, 48, RULE_stringValue); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(279); + _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); + } + @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 { + DescriptionContext _localctx = new DescriptionContext(_ctx, getState()); + enterRule(_localctx, 50, RULE_description); + try { + enterOuterAlt(_localctx, 1); + { + setState(281); + 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); + } + @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 { + EnumValueContext _localctx = new EnumValueContext(_ctx, getState()); + enterRule(_localctx, 52, RULE_enumValue); + try { + enterOuterAlt(_localctx, 1); + { + setState(283); + 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); + } + @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 { + ArrayValueContext _localctx = new ArrayValueContext(_ctx, getState()); + enterRule(_localctx, 54, RULE_arrayValue); + 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__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); + value(); + } + } + 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 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); + } + @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 { + ArrayValueWithVariableContext _localctx = new ArrayValueWithVariableContext(_ctx, getState()); + enterRule(_localctx, 56, RULE_arrayValueWithVariable); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + 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(295); + valueWithVariable(); + } + } + setState(300); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(301); + 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); + } + @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 { + ObjectValueContext _localctx = new ObjectValueContext(_ctx, getState()); + enterRule(_localctx, 58, RULE_objectValue); + 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); + objectField(); + } + } + 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 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); + } + @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 { + ObjectValueWithVariableContext _localctx = new ObjectValueWithVariableContext(_ctx, getState()); + enterRule(_localctx, 60, RULE_objectValueWithVariable); + int _la; + try { + enterOuterAlt(_localctx, 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(313); + objectFieldWithVariable(); + } + } + setState(318); + _errHandler.sync(this); + _la = _input.LA(1); + } + setState(319); + 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); + } + @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 { + ObjectFieldContext _localctx = new ObjectFieldContext(_ctx, getState()); + enterRule(_localctx, 62, RULE_objectField); + try { + enterOuterAlt(_localctx, 1); + { + setState(321); + name(); + setState(322); + match(T__4); + setState(323); + 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); + } + @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 { + ObjectFieldWithVariableContext _localctx = new ObjectFieldWithVariableContext(_ctx, getState()); + enterRule(_localctx, 64, RULE_objectFieldWithVariable); + try { + enterOuterAlt(_localctx, 1); + { + setState(325); + name(); + setState(326); + match(T__4); + setState(327); + 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); + } + @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 { + DirectivesContext _localctx = new DirectivesContext(_ctx, getState()); + enterRule(_localctx, 66, RULE_directives); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(330); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(329); + directive(); + } + } + setState(332); + _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); + } + @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 { + DirectiveContext _localctx = new DirectiveContext(_ctx, getState()); + enterRule(_localctx, 68, RULE_directive); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(334); + match(T__13); + setState(335); + name(); + setState(337); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__5) { + { + setState(336); + 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); + } + @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(342); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,28,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(339); + typeName(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(340); + listType(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(341); + 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); + } + @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 { + TypeNameContext _localctx = new TypeNameContext(_ctx, getState()); + enterRule(_localctx, 72, RULE_typeName); + try { + enterOuterAlt(_localctx, 1); + { + setState(344); + 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); + } + @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 { + ListTypeContext _localctx = new ListTypeContext(_ctx, getState()); + enterRule(_localctx, 74, RULE_listType); + try { + enterOuterAlt(_localctx, 1); + { + setState(346); + match(T__11); + setState(347); + type(); + setState(348); + 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); + } + @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(356); + _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(350); + typeName(); + setState(351); + match(T__14); + } + break; + case T__11: + enterOuterAlt(_localctx, 2); + { + setState(353); + listType(); + setState(354); + 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); + } + @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(365); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,31,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(359); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,30,_ctx) ) { + case 1: + { + setState(358); + description(); + } + break; + } + setState(361); + schemaDefinition(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(362); + typeDefinition(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(363); + typeExtensionDefinition(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(364); + 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); + } + @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 { + SchemaDefinitionContext _localctx = new SchemaDefinitionContext(_ctx, getState()); + enterRule(_localctx, 80, RULE_schemaDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(368); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(367); + description(); + } + } + + setState(370); + match(SCHEMA); + setState(372); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(371); + directives(); + } + } + + setState(374); + match(T__1); + setState(376); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(375); + operationTypeDefinition(); + } + } + 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(380); + 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); + } + @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 { + OperationTypeDefinitionContext _localctx = new OperationTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 82, RULE_operationTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(383); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(382); + description(); + } + } + + setState(385); + operationType(); + setState(386); + match(T__4); + setState(387); + 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); + } + @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(395); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,36,_ctx) ) { + case 1: + enterOuterAlt(_localctx, 1); + { + setState(389); + scalarTypeDefinition(); + } + break; + case 2: + enterOuterAlt(_localctx, 2); + { + setState(390); + objectTypeDefinition(); + } + break; + case 3: + enterOuterAlt(_localctx, 3); + { + setState(391); + interfaceTypeDefinition(); + } + break; + case 4: + enterOuterAlt(_localctx, 4); + { + setState(392); + unionTypeDefinition(); + } + break; + case 5: + enterOuterAlt(_localctx, 5); + { + setState(393); + enumTypeDefinition(); + } + break; + case 6: + enterOuterAlt(_localctx, 6); + { + setState(394); + 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); + } + @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 { + ScalarTypeDefinitionContext _localctx = new ScalarTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 86, RULE_scalarTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(398); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(397); + description(); + } + } + + setState(400); + match(SCALAR); + setState(401); + name(); + setState(403); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(402); + 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); + } + @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 { + ObjectTypeDefinitionContext _localctx = new ObjectTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 88, RULE_objectTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(406); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(405); + description(); + } + } + + setState(408); + match(TYPE); + setState(409); + name(); + setState(411); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==IMPLEMENTS) { + { + setState(410); + implementsInterfaces(0); + } + } + + setState(414); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(413); + directives(); + } + } + + setState(417); + _errHandler.sync(this); + switch ( getInterpreter().adaptivePredict(_input,42,_ctx) ) { + case 1: + { + setState(416); + 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); + } + @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 { + 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(420); + match(IMPLEMENTS); + setState(422); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__15) { + { + setState(421); + match(T__15); + } + } + + setState(425); + _errHandler.sync(this); + _alt = 1; + do { + switch (_alt) { + case 1: + { + { + setState(424); + typeName(); + } + } + break; + default: + throw new NoViableAltException(this); + } + 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(434); + _errHandler.sync(this); + _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(); + _prevctx = _localctx; + { + { + _localctx = new ImplementsInterfacesContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_implementsInterfaces); + setState(429); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(430); + match(T__15); + setState(431); + typeName(); + } + } + } + setState(436); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,45,_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); + } + @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 { + FieldsDefinitionContext _localctx = new FieldsDefinitionContext(_ctx, getState()); + enterRule(_localctx, 92, RULE_fieldsDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(437); + match(T__1); + setState(439); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(438); + fieldDefinition(); + } + } + 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(443); + 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 FieldTransformationContext fieldTransformation() { + return getRuleContext(FieldTransformationContext.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); + } + @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 { + FieldDefinitionContext _localctx = new FieldDefinitionContext(_ctx, getState()); + enterRule(_localctx, 94, RULE_fieldDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(446); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(445); + description(); + } + } + + setState(448); + name(); + setState(450); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__5) { + { + setState(449); + argumentsDefinition(); + } + } + + setState(452); + match(T__4); + setState(453); + type(); + 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(457); + directives(); + } + } + + } + } + catch (RecognitionException re) { + _localctx.exception = re; + _errHandler.reportError(this, re); + _errHandler.recover(this, re); + } + finally { + exitRule(); + } + 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); + } + 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); + } + @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 { + ArgumentsDefinitionContext _localctx = new ArgumentsDefinitionContext(_ctx, getState()); + enterRule(_localctx, 100, RULE_argumentsDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(467); + match(T__5); + setState(469); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(468); + inputValueDefinition(); + } + } + 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(473); + 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); + } + @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 { + InputValueDefinitionContext _localctx = new InputValueDefinitionContext(_ctx, getState()); + enterRule(_localctx, 102, RULE_inputValueDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(476); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(475); + description(); + } + } + + setState(478); + name(); + setState(479); + match(T__4); + setState(480); + type(); + setState(482); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__8) { + { + setState(481); + defaultValue(); + } + } + + setState(485); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(484); + 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); + } + @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 { + InterfaceTypeDefinitionContext _localctx = new InterfaceTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 104, RULE_interfaceTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(488); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(487); + description(); + } + } + + setState(490); + match(INTERFACE); + setState(491); + name(); + setState(493); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(492); + directives(); + } + } + + setState(495); + match(T__1); + setState(497); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(496); + fieldDefinition(); + } + } + 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(501); + 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); + } + @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 { + UnionTypeDefinitionContext _localctx = new UnionTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 106, RULE_unionTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(504); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(503); + description(); + } + } + + setState(506); + match(UNION); + setState(507); + name(); + setState(509); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(508); + directives(); + } + } + + setState(511); + match(T__8); + setState(512); + 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); + } + @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 { + 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 = 108; + enterRecursionRule(_localctx, 108, RULE_unionMembers, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(515); + typeName(); + } + _ctx.stop = _input.LT(-1); + setState(522); + _errHandler.sync(this); + _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(); + _prevctx = _localctx; + { + { + _localctx = new UnionMembersContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_unionMembers); + setState(517); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(518); + match(T__17); + setState(519); + typeName(); + } + } + } + setState(524); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,60,_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); + } + @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 { + EnumTypeDefinitionContext _localctx = new EnumTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 110, RULE_enumTypeDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(526); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(525); + description(); + } + } + + setState(528); + match(ENUM); + setState(529); + name(); + setState(531); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(530); + directives(); + } + } + + setState(533); + match(T__1); + setState(535); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(534); + enumValueDefinition(); + } + } + 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(539); + 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); + } + @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 { + EnumValueDefinitionContext _localctx = new EnumValueDefinitionContext(_ctx, getState()); + enterRule(_localctx, 112, RULE_enumValueDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(542); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(541); + description(); + } + } + + setState(544); + enumValue(); + setState(546); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(545); + 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); + } + @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 { + InputObjectTypeDefinitionContext _localctx = new InputObjectTypeDefinitionContext(_ctx, getState()); + enterRule(_localctx, 114, RULE_inputObjectTypeDefinition); + 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(INPUT); + setState(552); + name(); + setState(554); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__13) { + { + setState(553); + directives(); + } + } + + setState(556); + match(T__1); + setState(558); + _errHandler.sync(this); + _la = _input.LA(1); + do { + { + { + setState(557); + inputValueDefinition(); + } + } + 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(562); + 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); + } + @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 { + TypeExtensionDefinitionContext _localctx = new TypeExtensionDefinitionContext(_ctx, getState()); + enterRule(_localctx, 116, RULE_typeExtensionDefinition); + try { + enterOuterAlt(_localctx, 1); + { + setState(564); + match(EXTEND); + setState(565); + 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); + } + @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 { + DirectiveDefinitionContext _localctx = new DirectiveDefinitionContext(_ctx, getState()); + enterRule(_localctx, 118, RULE_directiveDefinition); + int _la; + try { + enterOuterAlt(_localctx, 1); + { + setState(568); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==StringValue || _la==TripleQuotedStringValue) { + { + setState(567); + description(); + } + } + + setState(570); + match(DIRECTIVE); + setState(571); + match(T__13); + setState(572); + name(); + setState(574); + _errHandler.sync(this); + _la = _input.LA(1); + if (_la==T__5) { + { + setState(573); + argumentsDefinition(); + } + } + + setState(576); + match(T__10); + setState(577); + 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); + } + @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 { + DirectiveLocationContext _localctx = new DirectiveLocationContext(_ctx, getState()); + enterRule(_localctx, 120, RULE_directiveLocation); + try { + enterOuterAlt(_localctx, 1); + { + setState(579); + 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); + } + @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 { + 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 = 122; + enterRecursionRule(_localctx, 122, RULE_directiveLocations, _p); + try { + int _alt; + enterOuterAlt(_localctx, 1); + { + { + setState(582); + directiveLocation(); + } + _ctx.stop = _input.LT(-1); + setState(589); + _errHandler.sync(this); + _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(); + _prevctx = _localctx; + { + { + _localctx = new DirectiveLocationsContext(_parentctx, _parentState); + pushNewRecursionContext(_localctx, _startState, RULE_directiveLocations); + setState(584); + if (!(precpred(_ctx, 1))) throw new FailedPredicateException(this, "precpred(_ctx, 1)"); + setState(585); + match(T__17); + setState(586); + directiveLocation(); + } + } + } + setState(591); + _errHandler.sync(this); + _alt = getInterpreter().adaptivePredict(_input,71,_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 54: + return unionMembers_sempred((UnionMembersContext)_localctx, predIndex); + case 61: + 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\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="+ + "\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 { + _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..d810b10af8 --- /dev/null +++ b/src/main/gen/GraphqlVisitor.java @@ -0,0 +1,387 @@ +// 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#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#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 + * @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/StitchingDSLExample.java b/src/main/java/graphql/StitchingDSLExample.java new file mode 100644 index 0000000000..24d3ad8f84 --- /dev/null +++ b/src/main/java/graphql/StitchingDSLExample.java @@ -0,0 +1,229 @@ +package graphql; + +import graphql.language.Document; +import graphql.language.FieldDefinition; +import graphql.language.FieldTransformation; +import graphql.language.InputValueDefinition; +import graphql.language.ListType; +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.StitchingRuntimeWiring; +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; + +import static graphql.schema.idl.RuntimeWiring.newRuntimeWiring; + +public class StitchingDSLExample { + + + 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; + } + + 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; + + } + + 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://p0rm35pkm0.lp.gql.zone/graphql"); + ObjectTypeDefinition postTypeDefinition = new ObjectTypeDefinition("Post"); + postTypeDefinition.getFieldDefinitions().add(newFieldDefinition(serviceDefinition, "id", "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"); + + 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://r9km4x894n.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 { + + 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()); + TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.parse(schema); +// // TODO: remove when ready +// Document document = buildDocument3(); +// TypeDefinitionRegistry typeDefinitionRegistry = schemaParser.buildRegistry(document); + + StitchingRuntimeWiring wiringFactory = new StitchingRuntimeWiring(); + RuntimeWiring runtimeWiring = newRuntimeWiring() + .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 executionResult1 = build.execute("{posts{id, author {id name}}}"); +// ExecutionResult executionResult1 = build.execute("{hello}"); + System.out.println(executionResult1.getData().toString()); + + + } +} diff --git a/src/main/java/graphql/language/FieldDefinition.java b/src/main/java/graphql/language/FieldDefinition.java index e458f58fee..a07335a9ec 100644 --- a/src/main/java/graphql/language/FieldDefinition.java +++ b/src/main/java/graphql/language/FieldDefinition.java @@ -13,6 +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<>()); @@ -65,6 +67,21 @@ public Directive getDirective(String directiveName) { return getDirectivesByName().get(directiveName); } + public FieldTransformation getFieldTransformation() { + return fieldTransformation; + } + + 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() { diff --git a/src/main/java/graphql/language/FieldTransformation.java b/src/main/java/graphql/language/FieldTransformation.java new file mode 100644 index 0000000000..ebf4719bca --- /dev/null +++ b/src/main/java/graphql/language/FieldTransformation.java @@ -0,0 +1,33 @@ +package graphql.language; + +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; + } + + @Override + public boolean isEqualTo(Node node) { + return false; + } + + @Override + public TypeDefinition deepCopy() { + return null; + } +} 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/ServiceDefinition.java b/src/main/java/graphql/language/ServiceDefinition.java new file mode 100644 index 0000000000..d4c7c8feb3 --- /dev/null +++ b/src/main/java/graphql/language/ServiceDefinition.java @@ -0,0 +1,59 @@ +package graphql.language; + +import java.util.ArrayList; +import java.util.List; + +public class ServiceDefinition extends AbstractNode implements TypeDefinition { + private final String name; + private final String url; + private final List directives; + + private List> typeDefinitions; + + 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 + public List getChildren() { + return null; + } + + @Override + public boolean isEqualTo(Node node) { + return false; + } + + @Override + public ServiceDefinition deepCopy() { + return null; + } + + @Override + public List getDirectives() { + return directives; + } + + 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/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/parser/GraphqlAntlrToLanguage.java b/src/main/java/graphql/parser/GraphqlAntlrToLanguage.java index 989b482268..ff80e8977b 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,17 @@ public Void visitSchemaDefinition(GraphqlParser.SchemaDefinitionContext ctx) { return null; } + @Override + public Void visitServiceDefinition(GraphqlParser.ServiceDefinitionContext ctx) { + 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); + result.getDefinitions().add(def); + return null; + } + @Override public Void visitOperationTypeDefinition(GraphqlParser.OperationTypeDefinitionContext ctx) { OperationTypeDefinition def = new OperationTypeDefinition(ctx.operationType().getText()); @@ -483,6 +452,7 @@ public Void visitOperationTypeDefinition(GraphqlParser.OperationTypeDefinitionCo break; } } + addContextProperty(ContextProperty.OperationTypeDefinition, def); super.visitChildren(ctx); popContext(); @@ -504,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()); @@ -511,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); @@ -523,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) { @@ -539,6 +535,15 @@ 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/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..b9ab0b01f6 --- /dev/null +++ b/src/main/java/graphql/schema/RemoteRootQueryDataFetcher.java @@ -0,0 +1,82 @@ +package graphql.schema; + + +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.stream.Collectors; + +@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) { + 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"); + return data.get(field.getName()); + } catch (Exception e) { + throw new RuntimeException(e); + } + } + + 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 new file mode 100644 index 0000000000..69e5a5c229 --- /dev/null +++ b/src/main/java/graphql/schema/TransformationDataFetcher.java @@ -0,0 +1,89 @@ +package graphql.schema; + + +import graphql.PublicApi; +import graphql.language.Argument; +import graphql.language.AstPrinter; +import graphql.language.Field; +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.TypeName; +import graphql.validation.ValidationUtil; + +import java.net.MalformedURLException; +import java.net.URL; +import java.util.Arrays; +import java.util.Map; + +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 GraphQLObjectType, "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().getDefinition().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()))); + 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))); + + + Map result = null; + try { + result = (Map) remoteRetriever.query(query).get(); + Map data = (Map) result.get("data"); + return data.get(getTypeByIdField.getName()); + } 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/SchemaGenerator.java b/src/main/java/graphql/schema/idl/SchemaGenerator.java index 6adacfb2d8..150b1eb08a 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,51 +173,70 @@ 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(); + Map serviceDefinitions = buildCtx.getTypeRegistry().getServiceDefinitions(); + List queries = new ArrayList<>(); - 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); + for (Map.Entry serviceDefinitionEntry : serviceDefinitions.entrySet()) { + ServiceDefinition serviceDefinition = serviceDefinitionEntry.getValue(); + for (TypeDefinition typeDefinition : serviceDefinition.getTypeDefinitions()) { + if (typeDefinition.getName().equals("Query")) { + queries.add((ObjectTypeDefinition) typeDefinition); + } } } - Set additionalTypes = buildAdditionalTypes(buildCtx); + 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); + Set additionalTypes = Collections.emptySet(); schemaBuilder.fieldVisibility(buildCtx.getWiring().getFieldVisibility()); return schemaBuilder.build(additionalTypes); @@ -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<>(); @@ -457,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)); + + 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); - builder.dataFetcherFactory(buildDataFetcherFactory(buildCtx, parentType, fieldDef)); + } - fieldDef.getInputValueDefinitions().forEach(inputValueDefinition -> - builder.argument(buildArgument(buildCtx, inputValueDefinition))); - GraphQLOutputType outputType = buildOutputType(buildCtx, fieldDef.getType()); - builder.type(outputType); return builder.build(); } 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 diff --git a/src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java b/src/main/java/graphql/schema/idl/TypeDefinitionRegistry.java index 69593922cf..0b283452ac 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,22 +30,21 @@ 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 { 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)); @@ -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) { @@ -90,6 +89,12 @@ public Optional add(Definition definition) { } else if (definition instanceof ScalarTypeDefinition) { ScalarTypeDefinition newEntry = (ScalarTypeDefinition) definition; return define(scalarTypes, scalarTypes, 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 TypeDefinition) { TypeDefinition newEntry = (TypeDefinition) definition; return define(types, types, newEntry); @@ -165,4 +170,8 @@ public Optional getType(String typeName) { } return Optional.empty(); } + + public Map getServiceDefinitions() { + return serviceDefinitions; + } } diff --git a/src/test/groovy/graphql/parser/ParserTest.groovy b/src/test/groovy/graphql/parser/ParserTest.groovy index bf6bf6c1b8..7b634e97b4 100644 --- a/src/test/groovy/graphql/parser/ParserTest.groovy +++ b/src/test/groovy/graphql/parser/ParserTest.groovy @@ -38,7 +38,48 @@ 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! + 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 { + url: "xyz" + type User { + id: ID! + } + + type Query { + user(id:ID!): User + users: [User] + } +} +""" + when: + Document document = new Parser().parseDocument(input) + then: + assert document.definitions.size() > 0 + } def "parse anonymous simple query"() { given: @@ -53,7 +94,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 diff --git a/stitching-dsl.txt b/stitching-dsl.txt new file mode 100644 index 0000000000..6141e5b61f --- /dev/null +++ b/stitching-dsl.txt @@ -0,0 +1,20 @@ +service User { + url: "https://r9km4x894n.lp.gql.zone/graphql" + type User { + id: ID + name: String + } + type Query { + user(id:ID): User + } +} +service Posts { + url: "https://p0rm35pkm0.lp.gql.zone/graphql" + type Post { + id: ID + authorId: ID => author: User + } + type Query { + posts: [Post] + } +}