Skip to content

Commit 342bb35

Browse files
authored
Merge branch 'master' into hibernate
2 parents 0fa0ffc + 2d1d222 commit 342bb35

File tree

5 files changed

+240
-182
lines changed

5 files changed

+240
-182
lines changed

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

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import javax.annotation.processing.SupportedOptions;
2020
import javax.lang.model.SourceVersion;
2121
import javax.lang.model.element.Element;
22-
import javax.lang.model.element.ExecutableElement;
2322
import javax.lang.model.element.Modifier;
2423
import javax.lang.model.element.TypeElement;
2524
import javax.lang.model.util.ElementFilter;
@@ -54,11 +53,12 @@ public SourceVersion getSupportedSourceVersion() {
5453
@Override
5554
public Set<String> getSupportedAnnotationTypes() {
5655
return Set.of(
57-
PathPrism.PRISM_TYPE,
58-
ControllerPrism.PRISM_TYPE,
59-
OpenAPIDefinitionPrism.PRISM_TYPE,
60-
MappedParamPrism.PRISM_TYPE,
61-
MapImportPrism.PRISM_TYPE);
56+
PathPrism.PRISM_TYPE,
57+
ControllerPrism.PRISM_TYPE,
58+
OpenAPIDefinitionPrism.PRISM_TYPE,
59+
MappedParamPrism.PRISM_TYPE,
60+
MapImportPrism.PRISM_TYPE,
61+
HttpValidPrism.PRISM_TYPE);
6262
}
6363

6464
@Override
@@ -91,7 +91,7 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
9191
if (round.errorRaised()) {
9292
return false;
9393
}
94-
94+
getElements(round, HttpValidPrism.PRISM_TYPE).forEach(this::warnValid);
9595
for (final var type : ElementFilter.typesIn(getElements(round, MappedParamPrism.PRISM_TYPE))) {
9696
var prism = MappedParamPrism.getInstanceOn(type);
9797
registerParamMapping(type, prism.factoryMethod());
@@ -148,6 +148,12 @@ public boolean process(Set<? extends TypeElement> annotations, RoundEnvironment
148148
return false;
149149
}
150150

151+
private void warnValid(Element e) {
152+
if (!ControllerPrism.isPresent(e) && !ControllerPrism.isPresent(e.getEnclosingElement())) {
153+
logWarn(e, "%s should only be used in Controller Classes", HttpValidPrism.PRISM_TYPE);
154+
}
155+
}
156+
151157
private Set<? extends Element> getElements(RoundEnvironment round, String name) {
152158
return Optional.ofNullable(typeElement(name))
153159
.map(round::getElementsAnnotatedWith)

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -32,19 +32,19 @@ public void buildParamName(Append writer) {
3232
}
3333

3434
public void buildApiDocumentation(MethodDocBuilder methodDoc) {
35-
if (elementParam.paramType() != ParamType.BEANPARAM) {
35+
if (elementParam.paramType() != ParamType.BEANPARAM && elementParam.paramType() != ParamType.FORM) {
3636
elementParam.buildApiDocumentation(methodDoc);
3737
} else {
3838
asElement(elementParam.element().asType()).getEnclosedElements().stream()
3939
.filter(e -> e.getKind() == ElementKind.FIELD)
4040
.map(VariableElement.class::cast)
41-
.forEach(e -> buildDoc(methodDoc, e));
41+
.forEach(e -> buildDoc(methodDoc, e, elementParam.paramType() == ParamType.FORM));
4242
}
4343
}
4444

45-
private static void buildDoc(MethodDocBuilder methodDoc, VariableElement e) {
45+
private static void buildDoc(MethodDocBuilder methodDoc, VariableElement e, boolean form) {
4646
final var typeMirror = e.asType();
47-
new ElementReader(e, Util.parse(typeMirror.toString()), Util.typeDef(typeMirror), ParamType.QUERYPARAM, false)
47+
new ElementReader(e, Util.parse(typeMirror.toString()), Util.typeDef(typeMirror), form ? ParamType.FORMPARAM : ParamType.QUERYPARAM, form)
4848
.buildApiDocumentation(methodDoc);
4949
}
5050

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package org.example.myapp.web.test;
22

3+
import io.avaje.http.api.Header;
4+
35
public class MyForm {
46

57
public String name;
68
public String email;
79
public String url;
10+
@Header
11+
public String headString;
812
}

tests/test-javalin-jsonb/src/main/java/org/example/myapp/web/test/OpenAPIController.java

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

55
import io.avaje.http.api.Controller;
66
import io.avaje.http.api.Delete;
7+
import io.avaje.http.api.Form;
78
import io.avaje.http.api.Get;
89
import io.avaje.http.api.Header;
910
import io.avaje.http.api.MediaType;
@@ -107,4 +108,10 @@ String testDefaultStatus(Context ctx) {
107108
String testPathParam(String type, @QueryParam String lastName, @QueryParam("q-2") String param2, @Header String contentLength, @Header("x-oh") String otherHeader) {
108109
return "only partial info";
109110
}
111+
112+
@Form
113+
@Post("/form")
114+
String testForm(MyForm form) {
115+
return "only partial info";
116+
}
110117
}

0 commit comments

Comments
 (0)