class PluginLoader {

  @VisibleForTesting
  int comparePluginsByDependencyGraph(Class<? extends Plugin> p1, Class<? extends Plugin> p2) {
    if (requires(p1, p2)) {
      if (requires(p2, p1)) {
        throw new IllegalStateException(
            "Cyclical dependency detected! " + p1.getName() + " <-> " + p2.getName());
      }
      return 1;
    } else if (requires(p2, p1)) {
      return -1;
    } else {
      // No dependencies
      return 0;
    }
  }

  public  PluginLoader(DataTypes dataTypes,
                      SourceTypes sourceTypes,
                      Components components,
                      Themes themes,
                      TabInfoRegistry tabInfoRegistry,
                      Converters converters,
                      PropertyParsers propertyParsers);

}