The unmet dependencies map is now a list
This commit is contained in:
parent
ede254c7f4
commit
4f7a741088
4 changed files with 34 additions and 36 deletions
|
@ -413,16 +413,17 @@ public final class Engine extends SubsystemClass {
|
||||||
order.add((DependencySubsystemVector) vector);
|
order.add((DependencySubsystemVector) vector);
|
||||||
} catch (Throwable throwable) {
|
} catch (Throwable throwable) {
|
||||||
if (throwable instanceof UnmetDependenciesException exception) {
|
if (throwable instanceof UnmetDependenciesException exception) {
|
||||||
Map<@NotNull DependencyVector, @NotNull String> unmetDependencies = exception.getUnmetDependencies();
|
List<@NotNull String> unmetDependencies = exception.getUnmetDependencies();
|
||||||
StringBuilder list = new StringBuilder();
|
StringBuilder list = new StringBuilder();
|
||||||
|
|
||||||
for (DependencyVector vector : unmetDependencies.keySet())
|
for (String error : unmetDependencies)
|
||||||
list.append("- ")
|
list
|
||||||
.append(vector.getIdentifier())
|
.append("\n")
|
||||||
.append(": ")
|
.append("- ")
|
||||||
.append(unmetDependencies.get(vector));
|
.append(error);
|
||||||
|
|
||||||
logger.crash("Found unresolved dependencies:" + list, throwable);
|
logger.crash("Found unresolved dependencies:" + list, throwable);
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
logger.crash("An error occurred trying to resolve subsystem dependencies: " + throwable.getClass().getName() + (throwable.getMessage() == null ? "" : ": " + throwable.getMessage()));
|
logger.crash("An error occurred trying to resolve subsystem dependencies: " + throwable.getClass().getName() + (throwable.getMessage() == null ? "" : ": " + throwable.getMessage()));
|
||||||
throw throwable;
|
throw throwable;
|
||||||
|
|
|
@ -24,7 +24,7 @@ import de.staropensource.sosengine.base.utility.DependencyResolver;
|
||||||
import lombok.Getter;
|
import lombok.Getter;
|
||||||
import org.jetbrains.annotations.NotNull;
|
import org.jetbrains.annotations.NotNull;
|
||||||
|
|
||||||
import java.util.Map;
|
import java.util.List;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Thrown when the {@link DependencyResolver} cannot resolve one
|
* Thrown when the {@link DependencyResolver} cannot resolve one
|
||||||
|
@ -37,30 +37,24 @@ import java.util.Map;
|
||||||
public class UnmetDependenciesException extends Exception {
|
public class UnmetDependenciesException extends Exception {
|
||||||
/**
|
/**
|
||||||
* Contains the unmet dependencies list supplied to the constructor.
|
* Contains the unmet dependencies list supplied to the constructor.
|
||||||
* <p>
|
|
||||||
* The key contains the {@link DependencyVector} that
|
|
||||||
* has unmet dependencies, while the value contains the error.
|
|
||||||
*
|
*
|
||||||
* @since v1-alpha1
|
* @since v1-alpha4
|
||||||
* -- GETTER --
|
* -- GETTER --
|
||||||
* Returns the unmet dependencies list supplied to the constructor.
|
* Returns the unmet dependencies list supplied to the constructor.
|
||||||
* <p>
|
|
||||||
* The key contains the {@link DependencyVector} that
|
|
||||||
* has unmet dependencies, while the value contains the error.
|
|
||||||
*
|
*
|
||||||
* @return unmet dependencies list
|
* @return unmet dependencies list
|
||||||
* @since v1-alpha1
|
* @since v1-alpha4
|
||||||
*/
|
*/
|
||||||
private final @NotNull Map<@NotNull DependencyVector, @NotNull String> unmetDependencies;
|
private final @NotNull List<@NotNull String> unmetDependencies;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructs this exception.
|
* Constructs this exception.
|
||||||
*
|
*
|
||||||
* @param unmetDependencies map of all unmet dependencies
|
* @param unmetDependencies map of all unmet dependencies
|
||||||
* @see #unmetDependencies
|
* @see #unmetDependencies
|
||||||
* @since v1-alpha1
|
* @since v1-alpha4
|
||||||
*/
|
*/
|
||||||
public UnmetDependenciesException(@NotNull Map<@NotNull DependencyVector, @NotNull String> unmetDependencies) {
|
public UnmetDependenciesException(@NotNull List<@NotNull String> unmetDependencies) {
|
||||||
this.unmetDependencies = unmetDependencies;
|
this.unmetDependencies = unmetDependencies;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -79,9 +79,13 @@ public final class DependencyResolver {
|
||||||
*
|
*
|
||||||
* @param vector {@link DependencyVector} to add
|
* @param vector {@link DependencyVector} to add
|
||||||
* @return itself
|
* @return itself
|
||||||
|
* @throws IllegalArgumentException if the specified vector has been added already
|
||||||
* @since v1-alpha1
|
* @since v1-alpha1
|
||||||
*/
|
*/
|
||||||
public synchronized @NotNull DependencyResolver addVector(@NotNull DependencyVector vector) {
|
public synchronized @NotNull DependencyResolver addVector(@NotNull DependencyVector vector) throws IllegalArgumentException {
|
||||||
|
if (vectors.contains(vector))
|
||||||
|
throw new IllegalArgumentException("The specified vector has been added already");
|
||||||
|
|
||||||
try {
|
try {
|
||||||
vectors.add(vector);
|
vectors.add(vector);
|
||||||
} catch (IllegalArgumentException ignored) {}
|
} catch (IllegalArgumentException ignored) {}
|
||||||
|
@ -118,19 +122,17 @@ public final class DependencyResolver {
|
||||||
* Throws an exception when detecting an unmet dependency or a dependency cycle.
|
* Throws an exception when detecting an unmet dependency or a dependency cycle.
|
||||||
*
|
*
|
||||||
* @return itself
|
* @return itself
|
||||||
* @throws IllegalStateException when encountering an invalid vector
|
* @throws IllegalStateException when encountering an invalid vector
|
||||||
* @throws UnmetDependenciesException when dependencies are unmet
|
* @throws UnmetDependenciesException when dependencies are unmet
|
||||||
* @since v1-alpha1
|
* @throws DependencyCycleException when a circular dependency is found
|
||||||
|
* @since v1-alpha4
|
||||||
*/
|
*/
|
||||||
public synchronized @NotNull DependencyResolver resolve() throws IllegalStateException, UnmetDependenciesException {
|
public synchronized @NotNull DependencyResolver resolve() throws IllegalStateException, UnmetDependenciesException {
|
||||||
Map<@NotNull DependencyVector, @NotNull String> unmetDependencies = new HashMap<>();
|
List<@NotNull String> unmetDependencies = new ArrayList<>();
|
||||||
List<@NotNull String> output;
|
List<@NotNull String> output;
|
||||||
|
|
||||||
for (DependencyVector vector : vectors) {
|
for (DependencyVector vector : vectors)
|
||||||
output = resolveVector(vector, new LinkedHashSet<>());
|
unmetDependencies.addAll(resolveVector(vector, new LinkedHashSet<>()));
|
||||||
for (String item : output)
|
|
||||||
unmetDependencies.put(vector, item);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!unmetDependencies.isEmpty())
|
if (!unmetDependencies.isEmpty())
|
||||||
throw new UnmetDependenciesException(unmetDependencies);
|
throw new UnmetDependenciesException(unmetDependencies);
|
||||||
|
@ -144,11 +146,12 @@ public final class DependencyResolver {
|
||||||
* Throws an exception when detecting an unmet dependency or a dependency cycle.
|
* Throws an exception when detecting an unmet dependency or a dependency cycle.
|
||||||
*
|
*
|
||||||
* @return list of unmet dependencies
|
* @return list of unmet dependencies
|
||||||
* @throws IllegalStateException when encountering an invalid dependency or provider
|
* @throws IllegalStateException when encountering an invalid dependency or provider
|
||||||
* @throws Exception when some unknown error occurs
|
* @throws DependencyCycleException when a circular dependency is found
|
||||||
|
* @throws Exception when some unknown error occurs
|
||||||
* @since v1-alpha4
|
* @since v1-alpha4
|
||||||
*/
|
*/
|
||||||
private @NotNull List<@NotNull String> resolveVector(@NotNull DependencyVector vector, @NotNull LinkedHashSet<@NotNull String> vectorsDependencyStack) throws IllegalStateException {
|
private @NotNull List<@NotNull String> resolveVector(@NotNull DependencyVector vector, @NotNull LinkedHashSet<@NotNull String> vectorsDependencyStack) throws IllegalStateException, DependencyCycleException {
|
||||||
List<@NotNull String> unmetDependencies = new ArrayList<>();
|
List<@NotNull String> unmetDependencies = new ArrayList<>();
|
||||||
|
|
||||||
vectorsDependencyStack.add(vector.getIdentifier());
|
vectorsDependencyStack.add(vector.getIdentifier());
|
||||||
|
|
|
@ -273,8 +273,8 @@ class DependencyResolverTest extends TestBase {
|
||||||
resolver.resolve();
|
resolver.resolve();
|
||||||
} catch (UnmetDependenciesException exception) {
|
} catch (UnmetDependenciesException exception) {
|
||||||
getLogger().error("Dependency resolution failed in testResolve(layers=" + layers + "):");
|
getLogger().error("Dependency resolution failed in testResolve(layers=" + layers + "):");
|
||||||
for (DependencyVector vector : exception.getUnmetDependencies().keySet())
|
for (String error : exception.getUnmetDependencies())
|
||||||
getLogger().error("-> " + vector.getIdentifier() + "=" + vector.getVersion() + ": " + exception.getUnmetDependencies().get(vector));
|
getLogger().error("-> " + error);
|
||||||
|
|
||||||
assertEquals("Please ignore this, this just exists to trigger an error", "", "Dependency resolution failed in testResolve(layers=" + layers + "): See logs");
|
assertEquals("Please ignore this, this just exists to trigger an error", "", "Dependency resolution failed in testResolve(layers=" + layers + "): See logs");
|
||||||
} catch (DependencyCycleException exception) {
|
} catch (DependencyCycleException exception) {
|
||||||
|
@ -497,8 +497,8 @@ class DependencyResolverTest extends TestBase {
|
||||||
resolver.resolve();
|
resolver.resolve();
|
||||||
} catch (UnmetDependenciesException exception) {
|
} catch (UnmetDependenciesException exception) {
|
||||||
getLogger().error("Dependency resolution failed in testResolve(layers=" + layers + ") (great!):");
|
getLogger().error("Dependency resolution failed in testResolve(layers=" + layers + ") (great!):");
|
||||||
for (DependencyVector vector : exception.getUnmetDependencies().keySet())
|
for (String error : exception.getUnmetDependencies())
|
||||||
getLogger().error("-> " + vector.getIdentifier() + "=" + vector.getVersion() + ": " + exception.getUnmetDependencies().get(vector));
|
getLogger().error("-> " + error);
|
||||||
|
|
||||||
return;
|
return;
|
||||||
} catch (DependencyCycleException exception) {
|
} catch (DependencyCycleException exception) {
|
||||||
|
@ -613,8 +613,8 @@ class DependencyResolverTest extends TestBase {
|
||||||
resolver.resolve();
|
resolver.resolve();
|
||||||
} catch (UnmetDependenciesException exception) {
|
} catch (UnmetDependenciesException exception) {
|
||||||
getLogger().error("Dependency resolution failed in testResolveDependencyCycle():");
|
getLogger().error("Dependency resolution failed in testResolveDependencyCycle():");
|
||||||
for (DependencyVector vector : exception.getUnmetDependencies().keySet())
|
for (String error : exception.getUnmetDependencies())
|
||||||
getLogger().error("-> " + vector.getIdentifier() + "=" + vector.getVersion() + ": " + exception.getUnmetDependencies().get(vector));
|
getLogger().error("-> " + error);
|
||||||
|
|
||||||
assertEquals("Please ignore this, this just exists to trigger an error", "", "Dependency resolution failed in testResolveDependencyCycle(): See logs");
|
assertEquals("Please ignore this, this just exists to trigger an error", "", "Dependency resolution failed in testResolveDependencyCycle(): See logs");
|
||||||
} catch (DependencyCycleException exception) {
|
} catch (DependencyCycleException exception) {
|
||||||
|
|
Loading…
Reference in a new issue