11package io .dinject .javalin .generator ;
22
3+ import io .dinject .controller .QueryParam ;
4+
35import javax .lang .model .element .VariableElement ;
46import java .util .Set ;
57
68class MethodParam {
79
810 private final String rawType ;
911 private final TypeHandler typeHandler ;
10- private final String name ;
12+ private final String varName ;
13+ private final String paramName ;
1114 private final String snakeName ;
1215
16+ private final String paramDefault ;
17+ private final String docComment ;
1318
14- MethodParam (VariableElement param ) {
15- this .name = param .getSimpleName ().toString ();
16- this .snakeName = Util .snakeCase (name );
19+ MethodParam (VariableElement param , ProcessingContext ctx ) {
1720 this .rawType = param .asType ().toString ();
1821 this .typeHandler = TypeMap .get (rawType );
22+ this .varName = param .getSimpleName ().toString ();
23+ this .docComment = ctx .docComment (param );
24+
25+ QueryParam queryParam = param .getAnnotation (QueryParam .class );
26+ if (queryParam != null ) {
27+ this .paramName = nameFrom (queryParam .name (), param .getSimpleName ().toString ());
28+ this .paramDefault = queryParam .defaultValue ();
29+ } else {
30+ this .paramName = varName ;
31+ this .paramDefault = "" ;
32+ }
33+ this .snakeName = Util .snakeCase (varName );
34+ }
35+
36+ private String nameFrom (String name , String defaultName ) {
37+ if (name != null && !name .isEmpty ()) {
38+ return name ;
39+ }
40+ return defaultName ;
41+ }
42+
43+ private boolean hasParamDefault () {
44+ return paramDefault != null && !paramDefault .isEmpty ();
1945 }
2046
2147 private boolean isJavalinContext () {
@@ -36,7 +62,7 @@ void buildCtxGet(Append writer, Set<String> pathParams) {
3662 shortType = Util .shortName (rawType );
3763 }
3864
39- writer .append (" %s %s = " , shortType , name );
65+ writer .append (" %s %s = " , shortType , varName );
4066
4167 // path parameters are expected to be not nullable
4268 // ... with query parameters nullable
@@ -51,9 +77,13 @@ void buildCtxGet(Append writer, Set<String> pathParams) {
5177 } else {
5278 if (typeHandler == null ) {
5379 // assuming this is a body (POST, PATCH)
54- writer .append ("ctx.bodyAsClass(%s.class)" , shortType , name , shortType );
80+ writer .append ("ctx.bodyAsClass(%s.class)" , shortType );
5581 } else {
56- writer .append ("ctx.queryParam(\" %s\" )" , name );
82+ if (hasParamDefault ()) {
83+ writer .append ("ctx.queryParam(\" %s\" ,\" %s\" )" , paramName , paramDefault );
84+ } else {
85+ writer .append ("ctx.queryParam(\" %s\" )" , paramName );
86+ }
5787 }
5888 }
5989
@@ -64,8 +94,8 @@ void buildCtxGet(Append writer, Set<String> pathParams) {
6494 }
6595
6696 private String derivePathParam (Set <String > pathParams ) {
67- if (pathParams .contains (name )) {
68- return name ;
97+ if (pathParams .contains (varName )) {
98+ return varName ;
6999 }
70100 if (pathParams .contains (snakeName )){
71101 return snakeName ;
@@ -88,7 +118,7 @@ void buildParamName(Append writer) {
88118 if (isJavalinContext ()) {
89119 writer .append ("ctx" );
90120 } else {
91- writer .append (name );
121+ writer .append (varName );
92122 }
93123 }
94124}
0 commit comments