Skip to content

Commit 32cb46e

Browse files
committed
Client is good now
1 parent 16efcd9 commit 32cb46e

File tree

5 files changed

+64
-26
lines changed

5 files changed

+64
-26
lines changed

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

Lines changed: 37 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import javax.lang.model.element.TypeElement;
66
import java.util.Set;
7+
import java.util.stream.Collectors;
78

89
/**
910
* Write code to register Web route for a given controller method.
@@ -22,13 +23,15 @@ class ClientMethodWriter {
2223
private final UType returnType;
2324
private MethodParam bodyHandlerParam;
2425
private String methodGenericParams = "";
26+
private final boolean useJsonb;
2527

26-
ClientMethodWriter(MethodReader method, Append writer, ProcessingContext ctx) {
28+
ClientMethodWriter(MethodReader method, Append writer, ProcessingContext ctx, boolean useJsonb) {
2729
this.method = method;
2830
this.writer = writer;
2931
this.webMethod = method.webMethod();
3032
this.ctx = ctx;
3133
this.returnType = Util.parseType(method.returnType());
34+
this.useJsonb = useJsonb;
3235
}
3336

3437
void addImportTypes(ControllerReader reader) {
@@ -111,37 +114,54 @@ private void writeEnd() {
111114

112115
private void writeSyncResponse() {
113116
writer.append(" ");
114-
String type0 = returnType.mainType();
115-
String type1 = returnType.param0();
116-
writeResponse(type0, type1);
117+
writeResponse(returnType);
117118
}
118119

119120
private void writeAsyncResponse() {
120121
writer.append(" .async()");
121-
String type0 = returnType.param0();
122-
String type1 = returnType.param1();
123-
writeResponse(type0, type1);
122+
writeResponse(returnType.paramRaw());
124123
}
125124

126125
private void writeCallResponse() {
127126
writer.append(" .call()");
128-
String type0 = returnType.param0();
129-
String type1 = returnType.param1();
130-
writeResponse(type0, type1);
127+
writeResponse(returnType.paramRaw());
131128
}
132129

133-
private void writeResponse(String type0, String type1) {
134-
if (isList(type0)) {
135-
writer.append(".list(%s.class);", Util.shortName(type1)).eol();
136-
} else if (isStream(type0)) {
137-
writer.append(".stream(%s.class);", Util.shortName(type1)).eol();
138-
} else if (isHttpResponse(type0)){
130+
private void writeResponse(UType type) {
131+
final var mainType = type.mainType();
132+
final var param1 = type.paramRaw();
133+
if (isList(mainType)) {
134+
writer.append(".list(");
135+
writeGeneric(param1);
136+
} else if (isStream(mainType)) {
137+
writer.append(".stream(");
138+
writeGeneric(param1);
139+
} else if (isHttpResponse(mainType)) {
139140
writeWithHandler();
140141
} else {
141-
writer.append(".bean(%s.class);", Util.shortName(type0)).eol();
142+
writer.append(".bean(").eol();
143+
writeGeneric(type);
142144
}
143145
}
144146

147+
void writeGeneric(UType type) {
148+
if (useJsonb && type.isGeneric()) {
149+
final var params =
150+
type.importTypes().stream()
151+
.skip(1)
152+
.map(Util::shortName)
153+
.collect(Collectors.joining(".class, "));
154+
155+
writer.append(
156+
"Types.newParameterizedType(%s.class, %s.class)", Util.shortName(type.mainType()), params);
157+
} else {
158+
writer.append("%s.class", Util.shortName(type.mainType()));
159+
}
160+
writer.append(");");
161+
162+
writer.eol();
163+
}
164+
145165
private void writeWithHandler() {
146166
if (bodyHandlerParam != null) {
147167
writer.append(".handler(%s);", bodyHandlerParam.name()).eol();

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

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,21 @@ public class ClientProcessor extends AbstractProcessor {
2727

2828
protected ProcessingContext ctx;
2929

30+
private boolean useJsonB;
31+
32+
public ClientProcessor() {
33+
try {
34+
Class.forName("io.avaje.jsonb.Jsonb");
35+
this.useJsonB = true;
36+
} catch (final ClassNotFoundException e) {
37+
this.useJsonB = false;
38+
}
39+
}
40+
41+
public ClientProcessor(boolean useJsonb) {
42+
useJsonB = useJsonb;
43+
}
44+
3045
@Override
3146
public SourceVersion getSupportedSourceVersion() {
3247
return SourceVersion.latest();
@@ -107,7 +122,7 @@ private void writeClient(Element controller) {
107122
}
108123

109124
protected String writeClientAdapter(ProcessingContext ctx, ControllerReader reader) throws IOException {
110-
return new ClientWriter(reader, ctx).write();
125+
return new ClientWriter(reader, ctx,useJsonB).write();
111126
}
112127

113128
}

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

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,12 +21,15 @@ class ClientWriter extends BaseControllerWriter {
2121
private static final String SUFFIX = "HttpClient";
2222

2323
private final List<ClientMethodWriter> methodList = new ArrayList<>();
24+
private final boolean useJsonb;
2425

25-
ClientWriter(ControllerReader reader, ProcessingContext ctx) throws IOException {
26+
ClientWriter(ControllerReader reader, ProcessingContext ctx, boolean useJsonB) throws IOException {
2627
super(reader, ctx, SUFFIX);
2728
reader.addImportType(HTTP_CLIENT_CONTEXT);
2829
reader.addImportType(HTTP_API_PROVIDER);
30+
this.useJsonb = useJsonB;
2931
readMethods();
32+
if (useJsonB) reader.addImportType("io.avaje.jsonb.Types");
3033
}
3134

3235
@Override
@@ -38,7 +41,7 @@ protected String initPackageName(String originName) {
3841
private void readMethods() {
3942
for (MethodReader method : reader.methods()) {
4043
if (method.isWebMethod()) {
41-
ClientMethodWriter methodWriter = new ClientMethodWriter(method, writer, ctx);
44+
final var methodWriter = new ClientMethodWriter(method, writer, ctx, useJsonb);
4245
methodWriter.addImportTypes(reader);
4346
methodList.add(methodWriter);
4447
}

http-generator-core/src/main/java/io/avaje/http/generator/core/JsonBUtil.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -72,13 +72,13 @@ static void writeType(UType type, Append writer) {
7272
if (type.isGeneric()) {
7373
final var params =
7474
type.importTypes().stream()
75-
.skip(1)
76-
.map(Util::shortName)
77-
.collect(Collectors.joining(".class, "))
78-
+ ".class";
75+
.skip(1)
76+
.map(Util::shortName)
77+
.collect(Collectors.joining(".class, "));
7978

8079
writer.append(
81-
"Types.newParameterizedType(%s.class, %s))", Util.shortName(type.mainType()), params);
80+
"Types.newParameterizedType(%s.class, %s.class))",
81+
Util.shortName(type.mainType()), params);
8282
} else {
8383
writer.append("%s.class)", Util.shortName(type.mainType()));
8484
}

http-generator-core/src/main/java/io/avaje/http/generator/core/UType.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,8 +157,8 @@ private String extractRawParam() {
157157

158158
switch (mainType()) {
159159
case "java.util.Set":
160-
case "java.util.Stream":
161160
case "java.util.List":
161+
case "java.util.stream.Stream":
162162
case "java.util.concurrent.CompletableFuture":
163163
case "io.avaje.http.client.HttpCall":
164164
var first = rawType.indexOf("<") + 1;

0 commit comments

Comments
 (0)