001package io.avaje.inject.spi;
002
003import java.util.List;
004import java.util.Set;
005
006/**
007 * Determines Multi-Module wiring order.
008 */
009public interface ModuleOrdering extends InjectExtension {
010
011  /**
012   * Return true if ordering supports the modules passed in.
013   */
014  default boolean supportsExpected(List<AvajeModule> modules) {
015    return true;
016  }
017
018  /**
019   * Accept a module for ordering
020   */
021  void add(AvajeModule module);
022
023  /**
024   * Order the factories, returning the ordered list of module names.
025   */
026  Set<String> orderModules();
027
028  /**
029   * The list of factories in the order they should be built.
030   */
031  List<AvajeModule> factories();
032
033  /**
034   * Whether no modules are available
035   */
036  boolean isEmpty();
037
038}