Skip to content

Commit c129c6a

Browse files
SentryManrbygrave
andauthored
Write value classes when running on Valhalla (#283)
* write value classes * Add missing whitespace for enum generated code --------- Co-authored-by: Rob Bygrave <[email protected]>
1 parent be78dd3 commit c129c6a

File tree

4 files changed

+22
-14
lines changed

4 files changed

+22
-14
lines changed

jsonb-generator/src/main/java/io/avaje/jsonb/generator/SimpleAdapterWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ private void writeClassStart() {
112112
writer.append("@SuppressWarnings({\"unchecked\", \"rawtypes\"})").eol();
113113
}
114114
writer.append("@Generated(\"io.avaje.jsonb.generator\")").eol();
115-
writer.append("public final class %sJsonAdapter implements JsonAdapter<%s>", adapterShortName, beanReader.shortName());
115+
writer.append("public final %sclass %sJsonAdapter implements JsonAdapter<%s>", Util.valhalla(), adapterShortName, beanReader.shortName());
116116
if (beanReader.supportsViewBuilder()) {
117117
writer.append(", ViewBuilderAware ");
118118
}

jsonb-generator/src/main/java/io/avaje/jsonb/generator/SimpleComponentWriter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ private void writeClassStart() {
9999
writeMetaDataEntry(all);
100100
writer.append("})").eol();
101101

102-
writer.append("public class %s implements GeneratedComponent {", shortName).eol().eol();
102+
writer.append("public %sclass %s implements GeneratedComponent {", Util.valhalla(), shortName).eol().eol();
103103
}
104104

105105
private void writeMetaDataEntry(List<String> entries) {

jsonb-generator/src/main/java/io/avaje/jsonb/generator/Util.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,4 +232,13 @@ static boolean isPublic(Element element) {
232232
}
233233
return !isImported;
234234
}
235+
236+
static String valhalla() {
237+
try {
238+
if (Modifier.valueOf("VALUE") != null && APContext.previewEnabled()) return "value ";
239+
} catch (IllegalArgumentException e) {
240+
// no valhalla
241+
}
242+
return "";
243+
}
235244
}

jsonb-generator/src/main/java/io/avaje/jsonb/generator/ValueReader.java

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -106,20 +106,20 @@ public void writeFields(Append writer) {
106106
writer.append(" private static final Map<%s, %s> toValue = new EnumMap<>(%s.class);", shortName, returnTypeStr, shortName).eol();
107107
writer.append(" private static final Map<%s, %s> toEnum = new HashMap<>();", returnTypeStr, shortName).eol();
108108
}
109-
writer.append(" private final %s adapter;", adapterShortType).eol();
110-
writer.eol();
109+
writer.append(" private final %s adapter;", adapterShortType).eol().eol();
111110
}
112111

113112
@Override
114113
public void writeConstructor(Append writer) {
115114
writer.append(" this.adapter = jsonb.adapter(%s);", genericType.asTypeDeclaration().replace("? extends ", "")).eol();
116115
if (isEnum) {
117-
writer.append(" if(!toValue.isEmpty()) return;").eol();
118-
writer.append(" for(final var enumConst : %s.values()) {", shortName).eol();
119-
writer.append(" var val = enumConst.%s();", method.getSimpleName()).eol();
120-
writer.append(" toValue.put(enumConst, val);").eol();
121-
writer.append(" if(toEnum.containsKey(val)) throw new IllegalArgumentException(\"Duplicate value \"+ val + \" from enum method %s. @Json.Value methods must return unique values\");",method.getSimpleName()).eol();
122-
writer.append(" toEnum.put(val, enumConst);").eol();
116+
writer.append(" if (toValue.isEmpty()) {").eol();
117+
writer.append(" for (final var enumConst : %s.values()) {", shortName).eol();
118+
writer.append(" var val = enumConst.%s();", method.getSimpleName()).eol();
119+
writer.append(" toValue.put(enumConst, val);").eol();
120+
writer.append(" if (toEnum.containsKey(val)) throw new IllegalArgumentException(\"Duplicate value \" + val + \" from enum method %s. @Json.Value methods must return unique values\");",method.getSimpleName()).eol();
121+
writer.append(" toEnum.put(val, enumConst);").eol();
122+
writer.append(" }").eol();
123123
writer.append(" }").eol();
124124
}
125125
}
@@ -146,10 +146,9 @@ public void writeFromJson(Append writer) {
146146

147147
if (!isEnum) {
148148
var constructMethod =
149-
constructor.getKind() == ElementKind.CONSTRUCTOR
150-
? "new " + shortName
151-
: shortName + "." + constructor.getSimpleName();
152-
149+
constructor.getKind() == ElementKind.CONSTRUCTOR
150+
? "new " + shortName
151+
: shortName + "." + constructor.getSimpleName();
153152
writer.append(" return %s(adapter.fromJson(reader));", constructMethod).eol();
154153

155154
} else {

0 commit comments

Comments
 (0)