private boolean isValidDirectiveLocation()

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;
  }