// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/PluginException.java
// public class PluginException extends Exception {
// 
//     private Optional<DependencyProblem> dependencyProblem = Optional.empty();
// 
//     private Optional<PluginMetadata> pluginMetadata = Optional.empty();
// 
//     public PluginException(Exception e) {
//         super(e);
//     }
// 
//     public PluginException(String message) {
//         super(message);
//     }
// 
//     public PluginException(String message, Exception e) {
//         super(message, e);
//     }
// 
//     public PluginException withDependencyProblem(DependencyProblem dependencyProblem) {
//         this.dependencyProblem = Optional.ofNullable(dependencyProblem);
//         return this;
//     }
// 
//     public PluginException withPlugin(PluginMetadata pluginMetadata) {
//         this.pluginMetadata = Optional.ofNullable(pluginMetadata);
//         return this;
//     }
// 
//     /**
//      * Returns dependency problem if any
//      *
//      * @return dependency problem
//      */
//     public Optional<DependencyProblem> getDependencyProblem() {
//         return dependencyProblem;
//     }
// 
//     /**
//      * Returns plugin affected
//      *
//      * @return plugin metadata
//      */
//     public Optional<PluginMetadata> getPluginMetadata() {
//         return pluginMetadata;
//     }
// 
// }
// 
// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/PluginMetadata.java
// public interface PluginMetadata {
// 
//     /**
//      * Returns unique plugin name
//      *
//      * @return free-form string with name
//      */
//     String getName();
// 
//     /**
//      * Returns plugin version
//      *
//      * @return free-form string with version
//      */
//     String getVersion();
// 
//     /**
//      * Returns {@link Path} object corresponding to plugin file
//      *
//      * @return plugin {@link Path} object
//      */
//     Path getPath();
// 
//     /**
//      * Returns {@link org.meridor.stecker.interfaces.Dependency} object corresponding to this plugin
//      *
//      * @return dependency object
//      */
//     Dependency getDependency();
// 
//     /**
//      * Returns date when plugin was released
//      *
//      * @return local date or empty if not set
//      */
//     Optional<ZonedDateTime> getDate();
// 
//     /**
//      * Returns detailed plugin description
//      *
//      * @return description or empty if not set
//      */
//     Optional<String> getDescription();
// 
//     /**
//      * Returns maintainer email and name
//      *
//      * @return email and name in the format: <b>John Smith &lt;john.smith@example.com&gt;</b> or empty if not set
//      */
//     Optional<String> getMaintainer();
// 
//     /**
//      * Returns a list of plugins required to make this plugin work
//      *
//      * @return possibly empty list with dependencies
//      */
//     List<Dependency> getRequiredDependencies();
// 
//     /**
//      * Returns a list of plugins that should be never installed simultaneously with this plugin
//      *
//      * @return possibly empty list with conflicting dependencies
//      */
//     List<Dependency> getConflictingDependencies();
// 
//     /**
//      * Returns a meta dependency which is provided by this plugin
//      *
//      * @return meta dependency or empty if not set
//      */
//     Optional<Dependency> getProvidedDependency();
// 
// }
// 
// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/interfaces/DependencyChecker.java
// public interface DependencyChecker {
// 
//     /**
//      * Checks dependencies and throws {@link org.meridor.stecker.PluginException} with {@link DependencyProblem} in case of issues
//      *
//      * @param pluginRegistry plugin registry object filled with data about all plugins
//      * @param pluginMetadata checked plugin metadata
//      * @throws org.meridor.stecker.PluginException when dependency issues occur
//      */
//     void check(PluginsAware pluginRegistry, PluginMetadata pluginMetadata) throws PluginException;
// 
// }
// 
// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/interfaces/PluginsAware.java
// public interface PluginsAware {
// 
//     /**
//      * Returns information about plugin by its plugin name
//      *
//      * @param pluginName plugin name to process
//      * @return information about plugin or empty if not present
//      */
//     Optional<PluginMetadata> getPlugin(String pluginName);
// 
//     /**
//      * Returns a list of dependencies in the registry
//      *
//      * @return a list of dependencies
//      */
//     List<String> getPluginNames();
// 
// }


import org.meridor.stecker.PluginException;
import org.meridor.stecker.PluginMetadata;
import org.meridor.stecker.interfaces.DependencyChecker;
import org.meridor.stecker.interfaces.PluginsAware;
package org.meridor.stecker.dev;


public class DevDependencyChecker implements DependencyChecker {
    @Override
// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/PluginException.java
// public class PluginException extends Exception {
// 
//     private Optional<DependencyProblem> dependencyProblem = Optional.empty();
// 
//     private Optional<PluginMetadata> pluginMetadata = Optional.empty();
// 
//     public PluginException(Exception e) {
//         super(e);
//     }
// 
//     public PluginException(String message) {
//         super(message);
//     }
// 
//     public PluginException(String message, Exception e) {
//         super(message, e);
//     }
// 
//     public PluginException withDependencyProblem(DependencyProblem dependencyProblem) {
//         this.dependencyProblem = Optional.ofNullable(dependencyProblem);
//         return this;
//     }
// 
//     public PluginException withPlugin(PluginMetadata pluginMetadata) {
//         this.pluginMetadata = Optional.ofNullable(pluginMetadata);
//         return this;
//     }
// 
//     /**
//      * Returns dependency problem if any
//      *
//      * @return dependency problem
//      */
//     public Optional<DependencyProblem> getDependencyProblem() {
//         return dependencyProblem;
//     }
// 
//     /**
//      * Returns plugin affected
//      *
//      * @return plugin metadata
//      */
//     public Optional<PluginMetadata> getPluginMetadata() {
//         return pluginMetadata;
//     }
// 
// }
// 
// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/PluginMetadata.java
// public interface PluginMetadata {
// 
//     /**
//      * Returns unique plugin name
//      *
//      * @return free-form string with name
//      */
//     String getName();
// 
//     /**
//      * Returns plugin version
//      *
//      * @return free-form string with version
//      */
//     String getVersion();
// 
//     /**
//      * Returns {@link Path} object corresponding to plugin file
//      *
//      * @return plugin {@link Path} object
//      */
//     Path getPath();
// 
//     /**
//      * Returns {@link org.meridor.stecker.interfaces.Dependency} object corresponding to this plugin
//      *
//      * @return dependency object
//      */
//     Dependency getDependency();
// 
//     /**
//      * Returns date when plugin was released
//      *
//      * @return local date or empty if not set
//      */
//     Optional<ZonedDateTime> getDate();
// 
//     /**
//      * Returns detailed plugin description
//      *
//      * @return description or empty if not set
//      */
//     Optional<String> getDescription();
// 
//     /**
//      * Returns maintainer email and name
//      *
//      * @return email and name in the format: <b>John Smith &lt;john.smith@example.com&gt;</b> or empty if not set
//      */
//     Optional<String> getMaintainer();
// 
//     /**
//      * Returns a list of plugins required to make this plugin work
//      *
//      * @return possibly empty list with dependencies
//      */
//     List<Dependency> getRequiredDependencies();
// 
//     /**
//      * Returns a list of plugins that should be never installed simultaneously with this plugin
//      *
//      * @return possibly empty list with conflicting dependencies
//      */
//     List<Dependency> getConflictingDependencies();
// 
//     /**
//      * Returns a meta dependency which is provided by this plugin
//      *
//      * @return meta dependency or empty if not set
//      */
//     Optional<Dependency> getProvidedDependency();
// 
// }
// 
// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/interfaces/DependencyChecker.java
// public interface DependencyChecker {
// 
//     /**
//      * Checks dependencies and throws {@link org.meridor.stecker.PluginException} with {@link DependencyProblem} in case of issues
//      *
//      * @param pluginRegistry plugin registry object filled with data about all plugins
//      * @param pluginMetadata checked plugin metadata
//      * @throws org.meridor.stecker.PluginException when dependency issues occur
//      */
//     void check(PluginsAware pluginRegistry, PluginMetadata pluginMetadata) throws PluginException;
// 
// }
// 
// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/interfaces/PluginsAware.java
// public interface PluginsAware {
// 
//     /**
//      * Returns information about plugin by its plugin name
//      *
//      * @param pluginName plugin name to process
//      * @return information about plugin or empty if not present
//      */
//     Optional<PluginMetadata> getPlugin(String pluginName);
// 
//     /**
//      * Returns a list of dependencies in the registry
//      *
//      * @return a list of dependencies
//      */
//     List<String> getPluginNames();
// 
// }


// Path: stecker-plugin-loader/src/main/java/org/meridor/stecker/dev/DevDependencyChecker.java
import org.meridor.stecker.PluginException;
import org.meridor.stecker.PluginMetadata;
import org.meridor.stecker.interfaces.DependencyChecker;
import org.meridor.stecker.interfaces.PluginsAware;

package org.meridor.stecker.dev;


public class DevDependencyChecker implements DependencyChecker {
    @Override
    public void check(PluginsAware pluginRegistry, PluginMetadata pluginMetadata) throws PluginException {