Skip to content

Commit f32ec63

Browse files
committed
Merge branch 'sigma-jstache' of https://github.com/SentryMan/avaje-http into sigma-jstache
2 parents 097f3f4 + 45f7496 commit f32ec63

File tree

4 files changed

+48
-31
lines changed

4 files changed

+48
-31
lines changed

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

Lines changed: 38 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,51 @@
77

88
public final class JsonBUtil {
99

10+
private static final JsonBDetect NO_JSONB = new JsonBDetect();
11+
/**
12+
* Detect JsonB use and handle imports as needed.
13+
*/
14+
public static final class JsonBDetect {
15+
private final Map<String, UType> jsonTypes;
16+
17+
private JsonBDetect() {
18+
this.jsonTypes = Map.of();
19+
}
20+
21+
private JsonBDetect(ControllerReader reader) {
22+
this.jsonTypes = JsonBUtil.jsonTypes(reader);
23+
addImports(reader);
24+
}
25+
26+
private void addImports(ControllerReader reader) {
27+
if (useJsonB()) {
28+
reader.addImportType("io.avaje.jsonb.Jsonb");
29+
reader.addImportType("io.avaje.jsonb.JsonType");
30+
reader.addImportType("io.avaje.jsonb.Types");
31+
jsonTypes.values().stream().map(UType::importTypes).forEach(reader::addImportTypes);
32+
}
33+
}
34+
35+
public boolean useJsonB() {
36+
return !jsonTypes.isEmpty();
37+
}
38+
39+
public Map<String, UType> jsonTypes() {
40+
return jsonTypes;
41+
}
42+
}
43+
1044
private JsonBUtil() {}
1145

1246
public static boolean isJsonMimeType(String producesMimeType) {
1347
return producesMimeType == null || producesMimeType.toLowerCase().contains("application/json");
1448
}
1549

16-
public static Map<String, UType> jsonTypes(ControllerReader reader) {
50+
public static JsonBDetect detect(boolean jsonb, ControllerReader reader) {
51+
return !jsonb ? NO_JSONB : new JsonBDetect(reader);
52+
}
1753

54+
public static Map<String, UType> jsonTypes(ControllerReader reader) {
1855
final Map<String, UType> jsonTypes = new LinkedHashMap<>();
1956
final Consumer<UType> addToMap = uType -> jsonTypes.put(uType.full(), uType);
2057

http-generator-helidon/src/main/java/io/avaje/http/generator/helidon/nima/ControllerWriter.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,18 +26,11 @@ class ControllerWriter extends BaseControllerWriter {
2626

2727
ControllerWriter(ControllerReader reader, boolean jsonb) throws IOException {
2828
super(reader);
29-
this.useJsonB = jsonb;
29+
final var detectJsonB = JsonBUtil.detect(jsonb, reader);
30+
this.useJsonB = detectJsonB.useJsonB();
31+
this.jsonTypes = detectJsonB.jsonTypes();
3032
if (useJsonB) {
31-
reader.addImportType("io.avaje.jsonb.Jsonb");
32-
reader.addImportType("io.avaje.jsonb.JsonType");
33-
reader.addImportType("io.avaje.jsonb.Types");
3433
reader.addImportType(jsonOutputType());
35-
this.jsonTypes = JsonBUtil.jsonTypes(reader);
36-
jsonTypes.values().stream()
37-
.map(UType::importTypes)
38-
.forEach(reader::addImportTypes);
39-
} else {
40-
this.jsonTypes = Map.of();
4134
}
4235
reader.addImportType("io.helidon.common.media.type.MediaTypes");
4336
reader.addImportType("io.helidon.common.parameters.Parameters");

http-generator-javalin/src/main/java/io/avaje/http/generator/javalin/ControllerWriter.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,16 +26,10 @@ class ControllerWriter extends BaseControllerWriter {
2626

2727
ControllerWriter(ControllerReader reader, boolean jsonb) throws IOException {
2828
super(reader);
29-
this.useJsonB = jsonb;
30-
if (useJsonB) {
31-
reader.addImportType("io.avaje.jsonb.Jsonb");
32-
reader.addImportType("io.avaje.jsonb.JsonType");
33-
reader.addImportType("io.avaje.jsonb.Types");
34-
this.jsonTypes = JsonBUtil.jsonTypes(reader);
35-
jsonTypes.values().stream().map(UType::importTypes).forEach(reader::addImportTypes);
36-
} else {
37-
this.jsonTypes = Map.of();
38-
}
29+
final var detectJsonB = JsonBUtil.detect(jsonb, reader);
30+
this.useJsonB = detectJsonB.useJsonB();
31+
this.jsonTypes = detectJsonB.jsonTypes();
32+
3933
reader.addImportType("io.javalin.plugin.Plugin");
4034
if (javalin6) {
4135
reader.addImportType("io.javalin.config.JavalinConfig");

http-generator-jex/src/main/java/io/avaje/http/generator/jex/ControllerWriter.java

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,9 @@ class ControllerWriter extends BaseControllerWriter {
2020

2121
ControllerWriter(ControllerReader reader, boolean jsonb) throws IOException {
2222
super(reader);
23-
this.useJsonB = jsonb;
23+
final var detectJsonB = JsonBUtil.detect(jsonb, reader);
24+
this.useJsonB = detectJsonB.useJsonB();
25+
this.jsonTypes = detectJsonB.jsonTypes();
2426
reader.addImportType(API_CONTEXT);
2527
reader.addImportType(API_ROUTING);
2628
reader.addImportType("java.io.IOException");
@@ -40,15 +42,6 @@ class ControllerWriter extends BaseControllerWriter {
4042
reader.addImportType("io.avaje.jex.htmx.TemplateContentCache");
4143
}
4244
}
43-
if (useJsonB) {
44-
reader.addImportType("io.avaje.jsonb.Jsonb");
45-
reader.addImportType("io.avaje.jsonb.JsonType");
46-
reader.addImportType("io.avaje.jsonb.Types");
47-
this.jsonTypes = JsonBUtil.jsonTypes(reader);
48-
jsonTypes.values().stream().map(UType::importTypes).forEach(reader::addImportTypes);
49-
} else {
50-
this.jsonTypes = Map.of();
51-
}
5245
}
5346

5447
void write() {

0 commit comments

Comments
 (0)