class PluginLoader {

  public boolean canLoad(Plugin plugin) {
    return plugin != null
        && PluginLoaderHelper.getRequirements(plugin.getClass()).stream()
        .allMatch(a ->
            loadedPlugins.stream()
                .filter(p -> p.getGroupId().equals(a.group()) && p.getName().equals(a.name()))
                .anyMatch(p ->
                    PluginLoaderHelper.isCompatible(
                        p.getVersion(),
                        Version.valueOf(a.minVersion())
                    )
                )
        );
  }

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

}