in src/main/com/intellij/lang/jsgraphql/ide/completion/GraphQLCompletionContributor.java [1169:1230]
private boolean isValidDirectiveLocation(@NotNull GraphQLDirectivesAware directivesAware,
@NotNull Introspection.DirectiveLocation directiveLocation) {
switch (directiveLocation) {
// Executable locations
case QUERY:
if (directivesAware instanceof GraphQLTypedOperationDefinition) {
GraphQLOperationType type = ((GraphQLTypedOperationDefinition)directivesAware).getOperationType();
return type.getNode().findChildByType(GraphQLElementTypes.QUERY_KEYWORD) != null;
}
break;
case MUTATION:
if (directivesAware instanceof GraphQLTypedOperationDefinition) {
GraphQLOperationType type = ((GraphQLTypedOperationDefinition)directivesAware).getOperationType();
return type.getNode().findChildByType(GraphQLElementTypes.MUTATION_KEYWORD) != null;
}
break;
case SUBSCRIPTION:
if (directivesAware instanceof GraphQLTypedOperationDefinition) {
GraphQLOperationType type = ((GraphQLTypedOperationDefinition)directivesAware).getOperationType();
return type.getNode().findChildByType(GraphQLElementTypes.SUBSCRIPTION_KEYWORD) != null;
}
break;
case FIELD:
return directivesAware instanceof GraphQLField;
case FRAGMENT_DEFINITION:
return directivesAware instanceof GraphQLFragmentDefinition;
case FRAGMENT_SPREAD:
return directivesAware instanceof GraphQLFragmentSpread;
case INLINE_FRAGMENT:
return directivesAware instanceof GraphQLInlineFragment;
// SDL
case SCHEMA:
return directivesAware instanceof GraphQLSchemaDefinition || directivesAware instanceof GraphQLSchemaExtension;
case SCALAR:
return directivesAware instanceof GraphQLScalarTypeDefinition || directivesAware instanceof GraphQLScalarTypeExtensionDefinition;
case OBJECT:
return directivesAware instanceof GraphQLObjectTypeDefinition || directivesAware instanceof GraphQLObjectTypeExtensionDefinition;
case FIELD_DEFINITION:
return directivesAware instanceof GraphQLFieldDefinition;
case ARGUMENT_DEFINITION:
return directivesAware instanceof GraphQLInputValueDefinition && directivesAware.getParent() instanceof GraphQLArgumentsDefinition;
case INTERFACE:
return directivesAware instanceof GraphQLInterfaceTypeDefinition ||
directivesAware instanceof GraphQLInterfaceTypeExtensionDefinition;
case UNION:
return directivesAware instanceof GraphQLUnionTypeDefinition || directivesAware instanceof GraphQLUnionTypeExtensionDefinition;
case ENUM:
return directivesAware instanceof GraphQLEnumTypeDefinition || directivesAware instanceof GraphQLEnumTypeExtensionDefinition;
case ENUM_VALUE:
return directivesAware instanceof GraphQLEnumValueDefinition;
case INPUT_OBJECT:
return directivesAware instanceof GraphQLInputObjectTypeDefinition ||
directivesAware instanceof GraphQLInputObjectTypeExtensionDefinition;
case INPUT_FIELD_DEFINITION:
return directivesAware instanceof GraphQLInputValueDefinition &&
!(directivesAware.getParent() instanceof GraphQLArgumentsDefinition);
case VARIABLE_DEFINITION:
return directivesAware instanceof GraphQLVariableDefinition;
}
return false;
}