diff --git a/prometeu-compiler/prometeu-compiler-core/src/main/java/p/studio/compiler/messages/BuildingIssue.java b/prometeu-compiler/prometeu-compiler-core/src/main/java/p/studio/compiler/messages/BuildingIssue.java index 673c5595..03932ebb 100644 --- a/prometeu-compiler/prometeu-compiler-core/src/main/java/p/studio/compiler/messages/BuildingIssue.java +++ b/prometeu-compiler/prometeu-compiler-core/src/main/java/p/studio/compiler/messages/BuildingIssue.java @@ -2,6 +2,7 @@ package p.studio.compiler.messages; import lombok.Builder; import lombok.Getter; +import p.studio.utilities.logs.LogAggregator; @Builder @Getter @@ -9,4 +10,16 @@ public class BuildingIssue { private final boolean error; private final String message; private final Throwable exception; + + public void print(LogAggregator logs) { + if (error) { + if (exception != null) { + logs.error(message, exception); + } else { + logs.error(message); + } + } else { + logs.warn(message); + } + } } diff --git a/prometeu-compiler/prometeu-compiler-core/src/main/java/p/studio/compiler/messages/BuildingIssues.java b/prometeu-compiler/prometeu-compiler-core/src/main/java/p/studio/compiler/messages/BuildingIssues.java index e76ca262..3f29c1d6 100644 --- a/prometeu-compiler/prometeu-compiler-core/src/main/java/p/studio/compiler/messages/BuildingIssues.java +++ b/prometeu-compiler/prometeu-compiler-core/src/main/java/p/studio/compiler/messages/BuildingIssues.java @@ -6,6 +6,8 @@ import java.util.ArrayList; import java.util.function.Consumer; public class BuildingIssues extends ReadOnlyCollection { + private boolean hasErrors = false; + protected BuildingIssues() { super(new ArrayList<>()); } @@ -17,12 +19,19 @@ public class BuildingIssues extends ReadOnlyCollection { public BuildingIssues add(final Consumer consumer) { final var builder = BuildingIssue.builder(); consumer.accept(builder); - collection.add(builder.build()); + final var issue = builder.build(); + hasErrors |= issue.isError(); + collection.add(issue); return this; } - public BuildingIssues addAll(final BuildingIssues issues) { + public BuildingIssues add(final BuildingIssues issues) { + hasErrors |= issues.hasErrors(); collection.addAll(issues.collection); return this; } + + public boolean hasErrors() { + return hasErrors; + } } diff --git a/prometeu-compiler/prometeu-deps/src/main/java/p/studio/compiler/workspaces/DependencyService.java b/prometeu-compiler/prometeu-deps/src/main/java/p/studio/compiler/workspaces/DependencyService.java index aad52604..7d3d247c 100644 --- a/prometeu-compiler/prometeu-deps/src/main/java/p/studio/compiler/workspaces/DependencyService.java +++ b/prometeu-compiler/prometeu-deps/src/main/java/p/studio/compiler/workspaces/DependencyService.java @@ -39,18 +39,8 @@ public final class DependencyService { for (final var dependencyPhase : phases) { final var issues = dependencyPhase.run(ctx); - var error = false; - if (ReadOnlyCollection.isNotEmpty(issues)) { - for (final var issue : issues) { - if (issue.isError()) { - error = true; - logs.using(log).error(issue.getMessage(), issue.getException()); - continue; - } - logs.using(log).warn(issue.getMessage()); - } - } - if (error) { + issues.forEach(issue -> issue.print(logs.using(log))); + if (issues.hasErrors()) { throw new BuildException("[DEPS]: issues found during dependency phase: " + dependencyPhase.getClass().getSimpleName()); } } diff --git a/prometeu-compiler/prometeu-deps/src/main/java/p/studio/compiler/workspaces/phases/WireProjectsPhase.java b/prometeu-compiler/prometeu-deps/src/main/java/p/studio/compiler/workspaces/phases/WireProjectsPhase.java index cb02cf94..19e3e9b1 100644 --- a/prometeu-compiler/prometeu-deps/src/main/java/p/studio/compiler/workspaces/phases/WireProjectsPhase.java +++ b/prometeu-compiler/prometeu-deps/src/main/java/p/studio/compiler/workspaces/phases/WireProjectsPhase.java @@ -81,7 +81,7 @@ public final class WireProjectsPhase implements DependencyPhase { } if (sourceRootIssues.size() == projectInfo.getFrontendSpec().getSourceRoots().size()) { // no source roots were found at all - issues.addAll(sourceRootIssues); + issues.add(sourceRootIssues); } return ProjectDescriptor