From 3a919fc68fcf502f7ccf54bafe8d9f574e872b38 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Thu, 3 Jul 2025 13:48:01 -0400 Subject: [PATCH 1/3] combine path literals --- .../generator/client/ClientMethodWriter.java | 32 +++++++++++++++---- .../generator/client/clients/ApiClient.java | 3 ++ .../client/clients/PrivateClient2.java | 1 - 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java b/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java index 6d193dedc..fde980764 100644 --- a/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java +++ b/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java @@ -399,16 +399,36 @@ private void writePaths(Set segments) { if (!segments.isEmpty()) { writer.append(" "); } - for (PathSegments.Segment segment : segments) { + + StringBuilder combinedLiterals = new StringBuilder(); + + for (var segment : segments) { if (segment.isLiteral()) { - writer.append(".path(\"").append(segment.literalSection()).append("\")"); - } else if (segment.isProperty()) { - writer.append(".path(").append(segmentPropertyMap.get(segment.name())).append(")"); + // Accumulate literal segments with "/" delimiter + if (combinedLiterals.length() > 0) { + combinedLiterals.append("/"); + } + combinedLiterals.append(segment.literalSection()); } else { - writer.append(".path(").append(segment.name()).append(")"); - // TODO: matrix params + // If we have accumulated literals, write them out first + if (combinedLiterals.length() > 0) { + writer.append(".path(\"").append(combinedLiterals.toString()).append("\")"); + combinedLiterals.setLength(0); // Clear the buffer + } + // Write the non-literal segment + if (segment.isProperty()) { + writer.append(".path(").append(segmentPropertyMap.get(segment.name())).append(")"); + } else { + writer.append(".path(").append(segment.name()).append(")"); + } } } + + // Write any remaining accumulated literals + if (!combinedLiterals.isEmpty()) { + writer.append(".path(\"").append(combinedLiterals.toString()).append("\")"); + } + if (!segments.isEmpty()) { writer.eol(); } diff --git a/http-generator-client/src/test/java/io/avaje/http/generator/client/clients/ApiClient.java b/http-generator-client/src/test/java/io/avaje/http/generator/client/clients/ApiClient.java index 2cf137130..7c3d57baa 100644 --- a/http-generator-client/src/test/java/io/avaje/http/generator/client/clients/ApiClient.java +++ b/http-generator-client/src/test/java/io/avaje/http/generator/client/clients/ApiClient.java @@ -12,4 +12,7 @@ public interface ApiClient { @Get("/mapped") String mapped(@Header("Accept") String accept) throws MappedException; + + @Get("/consecutive/paths/{accept}/generate") + String consecutive(String accept); } diff --git a/http-generator-client/src/test/java/io/avaje/http/generator/client/clients/PrivateClient2.java b/http-generator-client/src/test/java/io/avaje/http/generator/client/clients/PrivateClient2.java index 407fa636e..443dc7623 100644 --- a/http-generator-client/src/test/java/io/avaje/http/generator/client/clients/PrivateClient2.java +++ b/http-generator-client/src/test/java/io/avaje/http/generator/client/clients/PrivateClient2.java @@ -9,5 +9,4 @@ public interface PrivateClient2 { @Get("/private") String apiCall(@Header("Accept") String accept); - } From c130d5c8d29738bdbf73006957538d5457358c2e Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Thu, 3 Jul 2025 14:01:41 -0400 Subject: [PATCH 2/3] Update ClientMethodWriter.java --- .../java/io/avaje/http/generator/client/ClientMethodWriter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java b/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java index fde980764..b4556b344 100644 --- a/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java +++ b/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java @@ -425,7 +425,7 @@ private void writePaths(Set segments) { } // Write any remaining accumulated literals - if (!combinedLiterals.isEmpty()) { + if (combinedLiterals.length() > 1) { writer.append(".path(\"").append(combinedLiterals.toString()).append("\")"); } From b479e1b91ab0febf66665ed770084a6368ac4560 Mon Sep 17 00:00:00 2001 From: Josiah Noel <32279667+SentryMan@users.noreply.github.com> Date: Thu, 3 Jul 2025 14:02:30 -0400 Subject: [PATCH 3/3] Update ClientMethodWriter.java --- .../generator/client/ClientMethodWriter.java | 31 ++++++++++++++----- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java b/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java index b4556b344..b1be334ed 100644 --- a/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java +++ b/http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java @@ -1,10 +1,11 @@ package io.avaje.http.generator.client; -import io.avaje.http.generator.core.*; -import io.avaje.http.generator.core.PathSegments.Segment; +import static io.avaje.http.generator.core.ProcessingContext.isAssignable2Interface; +import static io.avaje.http.generator.core.ProcessingContext.logError; +import static io.avaje.http.generator.core.ProcessingContext.typeElement; +import static java.util.stream.Collectors.toList; +import static java.util.stream.Collectors.toMap; -import javax.lang.model.element.TypeElement; -import javax.lang.model.util.ElementFilter; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -13,9 +14,23 @@ import java.util.stream.Collectors; import java.util.stream.Stream; -import static io.avaje.http.generator.core.ProcessingContext.*; -import static java.util.stream.Collectors.toList; -import static java.util.stream.Collectors.toMap; +import javax.lang.model.element.TypeElement; +import javax.lang.model.util.ElementFilter; + +import io.avaje.http.generator.core.APContext; +import io.avaje.http.generator.core.Append; +import io.avaje.http.generator.core.BeanParamReader; +import io.avaje.http.generator.core.ControllerReader; +import io.avaje.http.generator.core.MethodParam; +import io.avaje.http.generator.core.MethodReader; +import io.avaje.http.generator.core.ParamType; +import io.avaje.http.generator.core.PathSegments; +import io.avaje.http.generator.core.PathSegments.Segment; +import io.avaje.http.generator.core.ProcessingContext; +import io.avaje.http.generator.core.RequestTimeoutPrism; +import io.avaje.http.generator.core.UType; +import io.avaje.http.generator.core.Util; +import io.avaje.http.generator.core.WebMethod; /** * Write code to register Web route for a given controller method. @@ -425,7 +440,7 @@ private void writePaths(Set segments) { } // Write any remaining accumulated literals - if (combinedLiterals.length() > 1) { + if (combinedLiterals.length() > 0) { writer.append(".path(\"").append(combinedLiterals.toString()).append("\")"); }