public GraphQLInterfaceType.Builder getInterfaceBuilder(Class<?> iface, ProcessingElementsContainer container) throws GraphQLAnnotationsException,
IllegalArgumentException, CannotCastMemberException {
if (!iface.isInterface()) {
throw new IllegalArgumentException(iface + " is not an interface");
}
GraphQLInterfaceType.Builder builder = newInterface();
builder.name(graphQLObjectInfoRetriever.getTypeName(iface));
GraphQLDescription description = iface.getAnnotation(GraphQLDescription.class);
if (description != null) {
builder.description(description.value());
}
List<String> definedFields = new ArrayList<>();
for (Method method : graphQLObjectInfoRetriever.getOrderedMethods(iface)) {
boolean valid = !Modifier.isStatic(method.getModifiers()) &&
method.getAnnotation(GraphQLField.class) != null;
if (valid) {
GraphQLFieldDefinition gqlField = graphQLFieldRetriever.getField(method,container);
definedFields.add(gqlField.getName());
builder.field(gqlField);
}
}
builder.fields(extensionsHandler.getExtensionFields(iface, definedFields,container));
GraphQLTypeResolver typeResolver = iface.getAnnotation(GraphQLTypeResolver.class);
builder.typeResolver(newInstance(typeResolver.value()));
return builder;
}
}