Skip to content

Commit d8eb44d

Browse files
authored
Merge pull request #412 from SentryMan/record-docs
Can now read record Javadocs for OpenApi
2 parents de3556f + 6f5c92e commit d8eb44d

File tree

2 files changed

+23
-5
lines changed

2 files changed

+23
-5
lines changed

http-generator-core/src/main/java/io/avaje/http/generator/core/openapi/SchemaDocBuilder.java

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import java.util.ArrayList;
88
import java.util.List;
99
import java.util.Map;
10+
import java.util.Optional;
1011
import java.util.Set;
1112
import java.util.TreeMap;
1213
import java.util.stream.Stream;
@@ -168,7 +169,7 @@ Schema<?> toSchema(TypeMirror type) {
168169
private Schema<?> buildEnumSchema(Element e) {
169170
var schema = new StringSchema();
170171
e.getEnclosedElements().stream()
171-
.filter(ec -> ec.getKind().equals(ElementKind.ENUM_CONSTANT))
172+
.filter(ec -> ElementKind.ENUM_CONSTANT.equals(ec.getKind()))
172173
.forEach(ec -> schema.addEnumItem(ec.getSimpleName().toString()));
173174

174175
var doc = Javadoc.parse(elements.getDocComment(e));
@@ -267,8 +268,21 @@ private void setFormatFromValidation(Element element, Schema<?> propSchema) {
267268

268269
private void setDescription(Element element, Schema<?> propSchema) {
269270
var doc = Javadoc.parse(elements.getDocComment(element));
271+
270272
if (!doc.getSummary().isEmpty()) {
271273
propSchema.setDescription(doc.getSummary());
274+
return;
275+
}
276+
try {
277+
278+
final var enclosingElement = element.getEnclosingElement();
279+
if (enclosingElement.getKind() == ElementKind.valueOf("RECORD")) {
280+
Optional.of(Javadoc.parse(elements.getDocComment(enclosingElement)))
281+
.map(d -> d.getParams().get(element.getSimpleName().toString()))
282+
.ifPresent(propSchema::setDescription);
283+
}
284+
} catch (IllegalArgumentException e) {
285+
// not on jdk 16+
272286
}
273287
}
274288

@@ -322,7 +336,9 @@ private void gatherProperties(List<VariableElement> fields, Element element) {
322336
}
323337
if (element instanceof TypeElement) {
324338
Element mappedSuper = types.asElement(((TypeElement) element).getSuperclass());
325-
if (mappedSuper != null && !"java.lang.Object".equals(mappedSuper.toString())) {
339+
if (mappedSuper != null
340+
&& !"java.lang.Object".equals(mappedSuper.toString())
341+
&& !"java.lang.Record".equals(mappedSuper.toString())) {
326342
gatherProperties(fields, mappedSuper);
327343
}
328344
for (VariableElement field : ElementFilter.fieldsIn(element.getEnclosedElements())) {

tests/test-nima-jsonb/src/main/java/org/example/Person.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
22

33
import io.avaje.jsonb.Json;
44

5+
/**
6+
* @param id the id
7+
* @param name the name
8+
*/
59
@Json
6-
public record Person(long id, String name) {
7-
8-
}
10+
public record Person(long id, String name) {}

0 commit comments

Comments
 (0)