Skip to content

Commit 3f441be

Browse files
authored
[http-client] combine generated consecutive path literals (#617)
* combine path literals
1 parent 58073e6 commit 3f441be

File tree

3 files changed

+51
-14
lines changed

3 files changed

+51
-14
lines changed

http-generator-client/src/main/java/io/avaje/http/generator/client/ClientMethodWriter.java

Lines changed: 48 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package io.avaje.http.generator.client;
22

3-
import io.avaje.http.generator.core.*;
4-
import io.avaje.http.generator.core.PathSegments.Segment;
3+
import static io.avaje.http.generator.core.ProcessingContext.isAssignable2Interface;
4+
import static io.avaje.http.generator.core.ProcessingContext.logError;
5+
import static io.avaje.http.generator.core.ProcessingContext.typeElement;
6+
import static java.util.stream.Collectors.toList;
7+
import static java.util.stream.Collectors.toMap;
58

6-
import javax.lang.model.element.TypeElement;
7-
import javax.lang.model.util.ElementFilter;
89
import java.util.List;
910
import java.util.Map;
1011
import java.util.Map.Entry;
@@ -13,9 +14,23 @@
1314
import java.util.stream.Collectors;
1415
import java.util.stream.Stream;
1516

16-
import static io.avaje.http.generator.core.ProcessingContext.*;
17-
import static java.util.stream.Collectors.toList;
18-
import static java.util.stream.Collectors.toMap;
17+
import javax.lang.model.element.TypeElement;
18+
import javax.lang.model.util.ElementFilter;
19+
20+
import io.avaje.http.generator.core.APContext;
21+
import io.avaje.http.generator.core.Append;
22+
import io.avaje.http.generator.core.BeanParamReader;
23+
import io.avaje.http.generator.core.ControllerReader;
24+
import io.avaje.http.generator.core.MethodParam;
25+
import io.avaje.http.generator.core.MethodReader;
26+
import io.avaje.http.generator.core.ParamType;
27+
import io.avaje.http.generator.core.PathSegments;
28+
import io.avaje.http.generator.core.PathSegments.Segment;
29+
import io.avaje.http.generator.core.ProcessingContext;
30+
import io.avaje.http.generator.core.RequestTimeoutPrism;
31+
import io.avaje.http.generator.core.UType;
32+
import io.avaje.http.generator.core.Util;
33+
import io.avaje.http.generator.core.WebMethod;
1934

2035
/**
2136
* Write code to register Web route for a given controller method.
@@ -399,16 +414,36 @@ private void writePaths(Set<PathSegments.Segment> segments) {
399414
if (!segments.isEmpty()) {
400415
writer.append(" ");
401416
}
402-
for (PathSegments.Segment segment : segments) {
417+
418+
StringBuilder combinedLiterals = new StringBuilder();
419+
420+
for (var segment : segments) {
403421
if (segment.isLiteral()) {
404-
writer.append(".path(\"").append(segment.literalSection()).append("\")");
405-
} else if (segment.isProperty()) {
406-
writer.append(".path(").append(segmentPropertyMap.get(segment.name())).append(")");
422+
// Accumulate literal segments with "/" delimiter
423+
if (combinedLiterals.length() > 0) {
424+
combinedLiterals.append("/");
425+
}
426+
combinedLiterals.append(segment.literalSection());
407427
} else {
408-
writer.append(".path(").append(segment.name()).append(")");
409-
// TODO: matrix params
428+
// If we have accumulated literals, write them out first
429+
if (combinedLiterals.length() > 0) {
430+
writer.append(".path(\"").append(combinedLiterals.toString()).append("\")");
431+
combinedLiterals.setLength(0); // Clear the buffer
432+
}
433+
// Write the non-literal segment
434+
if (segment.isProperty()) {
435+
writer.append(".path(").append(segmentPropertyMap.get(segment.name())).append(")");
436+
} else {
437+
writer.append(".path(").append(segment.name()).append(")");
438+
}
410439
}
411440
}
441+
442+
// Write any remaining accumulated literals
443+
if (combinedLiterals.length() > 0) {
444+
writer.append(".path(\"").append(combinedLiterals.toString()).append("\")");
445+
}
446+
412447
if (!segments.isEmpty()) {
413448
writer.eol();
414449
}

http-generator-client/src/test/java/io/avaje/http/generator/client/clients/ApiClient.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,7 @@ public interface ApiClient {
1212

1313
@Get("/mapped")
1414
String mapped(@Header("Accept") String accept) throws MappedException;
15+
16+
@Get("/consecutive/paths/{accept}/generate")
17+
String consecutive(String accept);
1518
}

http-generator-client/src/test/java/io/avaje/http/generator/client/clients/PrivateClient2.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,4 @@ public interface PrivateClient2 {
99

1010
@Get("/private")
1111
String apiCall(@Header("Accept") String accept);
12-
1312
}

0 commit comments

Comments
 (0)