From 1caaaa13a4699d99bd7b27ed1d96230c35b34bc9 Mon Sep 17 00:00:00 2001 From: Vincent Potucek Date: Tue, 7 Jan 2025 11:13:13 +0100 Subject: [PATCH 1/6] improve-outputGraph --- .../io/quarkus/builder/BuildChainBuilder.java | 85 ++++++++----------- 1 file changed, 36 insertions(+), 49 deletions(-) diff --git a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java index 7d72d220502cc..7572d832434f6 100644 --- a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java +++ b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java @@ -1,27 +1,17 @@ package io.quarkus.builder; +import io.quarkus.builder.item.BuildItem; +import org.wildfly.common.Assert; + import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; -import java.nio.charset.StandardCharsets; -import java.util.ArrayDeque; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Deque; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Iterator; -import java.util.List; -import java.util.Map; -import java.util.ServiceLoader; -import java.util.Set; +import java.util.*; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.wildfly.common.Assert; - -import io.quarkus.builder.item.BuildItem; +import static java.nio.charset.StandardCharsets.UTF_8; /** * A build chain builder. @@ -463,42 +453,39 @@ Set getFinalIds() { } private static void outputGraph(Set startSteps, Set endSteps) { - if (GRAPH_OUTPUT != null && !GRAPH_OUTPUT.isEmpty()) { - try (FileOutputStream fos = new FileOutputStream(GRAPH_OUTPUT)) { - try (OutputStreamWriter osw = new OutputStreamWriter(fos, StandardCharsets.UTF_8)) { - try (BufferedWriter writer = new BufferedWriter(osw)) { - writer.write("digraph {"); - writer.newLine(); - writer.write(" node [shape=rectangle];"); - writer.newLine(); - writer.write(" rankdir=LR;"); - writer.newLine(); - writer.newLine(); - writer.write(" { rank = same; "); - for (StepInfo startStep : startSteps) { - writer.write(quoteString(startStep.getBuildStep().getId())); - writer.write("; "); - } - writer.write("};"); - writer.newLine(); - writer.write(" { rank = same; "); - for (StepInfo endStep : endSteps) { - if (!startSteps.contains(endStep)) { - writer.write(quoteString(endStep.getBuildStep().getId())); - writer.write("; "); - } - } - writer.write("};"); - writer.newLine(); - writer.newLine(); - final HashSet printed = new HashSet<>(); - for (StepInfo step : startSteps) { - writeStep(writer, printed, step); - } - writer.write("}"); - writer.newLine(); + if (GRAPH_OUTPUT != null && !GRAPH_OUTPUT.isBlank()) { + try (BufferedWriter writer = + new BufferedWriter(new OutputStreamWriter(new FileOutputStream(GRAPH_OUTPUT), UTF_8))) { + writer.write("digraph {"); + writer.newLine(); + writer.write(" node [shape=rectangle];"); + writer.newLine(); + writer.write(" rankdir=LR;"); + writer.newLine(); + writer.newLine(); + writer.write(" { rank = same; "); + for (StepInfo startStep : startSteps) { + writer.write(quoteString(startStep.getBuildStep().getId())); + writer.write("; "); + } + writer.write("};"); + writer.newLine(); + writer.write(" { rank = same; "); + for (StepInfo endStep : endSteps) { + if (!startSteps.contains(endStep)) { + writer.write(quoteString(endStep.getBuildStep().getId())); + writer.write("; "); } } + writer.write("};"); + writer.newLine(); + writer.newLine(); + final HashSet printed = new HashSet<>(); + for (StepInfo step : startSteps) { + writeStep(writer, printed, step); + } + writer.write("}"); + writer.newLine(); } catch (IOException ioe) { throw new RuntimeException("Failed to write debug graph output", ioe); } From 4479553745ecb9e54f66f605135af581d37469a4 Mon Sep 17 00:00:00 2001 From: Vincent Potucek Date: Tue, 7 Jan 2025 11:15:07 +0100 Subject: [PATCH 2/6] fix Private field 'finalStep' is assigned but never accessed --- .../src/main/java/io/quarkus/builder/BuildChainBuilder.java | 5 ----- 1 file changed, 5 deletions(-) diff --git a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java index 7572d832434f6..889335eba35af 100644 --- a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java +++ b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java @@ -23,17 +23,12 @@ public final class BuildChainBuilder { private static final String GRAPH_OUTPUT = System.getProperty("quarkus.builder.graph-output"); static final boolean LOG_CONFLICT_CAUSING = Boolean.getBoolean("quarkus.builder.log-conflict-cause"); - private final BuildStepBuilder finalStep; private final List providers = new ArrayList<>(); private final Map steps = new HashMap(); private final Set initialIds = new HashSet<>(); private final Set finalIds = new HashSet<>(); private ClassLoader classLoader = BuildChainBuilder.class.getClassLoader(); - BuildChainBuilder() { - finalStep = addBuildStep(new FinalStep()); - } - /** * Add a build step to the chain. The configuration in the build step builder at the time that the chain is built is * the configuration that will apply to the build step in the final chain. Any subsequent changes will be ignored. From 4d9e2257bdc010bad6cc0b077f8df128fc538a77 Mon Sep 17 00:00:00 2001 From: Vincent Potucek Date: Tue, 7 Jan 2025 11:15:19 +0100 Subject: [PATCH 3/6] Explicit type argument BuildStepBuilder, StackTraceElement[] can be replaced with <> --- .../src/main/java/io/quarkus/builder/BuildChainBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java index 889335eba35af..f72aeab105894 100644 --- a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java +++ b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java @@ -24,7 +24,7 @@ public final class BuildChainBuilder { static final boolean LOG_CONFLICT_CAUSING = Boolean.getBoolean("quarkus.builder.log-conflict-cause"); private final List providers = new ArrayList<>(); - private final Map steps = new HashMap(); + private final Map steps = new HashMap<>(); private final Set initialIds = new HashSet<>(); private final Set finalIds = new HashSet<>(); private ClassLoader classLoader = BuildChainBuilder.class.getClassLoader(); From a0e1c2a659c6bc05e78fdba18488c7e74b3dac19 Mon Sep 17 00:00:00 2001 From: Vincent Potucek Date: Tue, 7 Jan 2025 11:16:55 +0100 Subject: [PATCH 4/6] sort --- .../src/main/java/io/quarkus/builder/BuildChainBuilder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java index f72aeab105894..8333de6889aac 100644 --- a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java +++ b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java @@ -20,8 +20,8 @@ */ public final class BuildChainBuilder { - private static final String GRAPH_OUTPUT = System.getProperty("quarkus.builder.graph-output"); static final boolean LOG_CONFLICT_CAUSING = Boolean.getBoolean("quarkus.builder.log-conflict-cause"); + private static final String GRAPH_OUTPUT = System.getProperty("quarkus.builder.graph-output"); private final List providers = new ArrayList<>(); private final Map steps = new HashMap<>(); From 1e997c62b530ca6a1733edacd74531287ad44c0c Mon Sep 17 00:00:00 2001 From: Vincent Potucek Date: Tue, 7 Jan 2025 11:17:29 +0100 Subject: [PATCH 5/6] Return value of the method is never used --- .../main/java/io/quarkus/builder/BuildChainBuilder.java | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java index 8333de6889aac..3a5ad98383a71 100644 --- a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java +++ b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java @@ -94,12 +94,11 @@ public BuildChainBuilder addInitial(Class type) { return this; } - public BuildChainBuilder loadProviders(ClassLoader classLoader) throws ChainBuildException { + public void loadProviders(ClassLoader classLoader) throws ChainBuildException { final ServiceLoader serviceLoader = ServiceLoader.load(BuildProvider.class, classLoader); for (final BuildProvider provider : serviceLoader) { provider.installInto(this); } - return this; } /** @@ -107,13 +106,11 @@ public BuildChainBuilder loadProviders(ClassLoader classLoader) throws ChainBuil * that is produced in the chain. * * @param type the item type (must not be {@code null}) - * @return this builder * @throws IllegalArgumentException if the item type is {@code null} */ - public BuildChainBuilder addFinal(Class type) { + public void addFinal(Class type) { Assert.checkNotNullParam("type", type); finalIds.add(new ItemId(type)); - return this; } ClassLoader getClassLoader() { From 3920faa5b1745394c4c2e2248889b40b4f845431 Mon Sep 17 00:00:00 2001 From: Vincent Potucek Date: Tue, 7 Jan 2025 13:19:22 +0100 Subject: [PATCH 6/6] undo --- .../io/quarkus/builder/BuildChainBuilder.java | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java index 3a5ad98383a71..8599df9c97914 100644 --- a/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java +++ b/core/builder/src/main/java/io/quarkus/builder/BuildChainBuilder.java @@ -1,16 +1,27 @@ package io.quarkus.builder; -import io.quarkus.builder.item.BuildItem; -import org.wildfly.common.Assert; - import java.io.BufferedWriter; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; -import java.util.*; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Deque; +import java.util.HashMap; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.ServiceLoader; +import java.util.Set; import java.util.regex.Matcher; import java.util.regex.Pattern; +import org.wildfly.common.Assert; + +import io.quarkus.builder.item.BuildItem; + import static java.nio.charset.StandardCharsets.UTF_8; /**