@@ -50,10 +50,10 @@ var (
5050 Long : DefaultInteger ,
5151 }
5252 doubleSuffixes = map [string ]struct {}{
53- "Lat " : {},
54- "Lon " : {},
55- "Latitude " : {},
56- "Longitude " : {},
53+ "lat " : {},
54+ "lon " : {},
55+ "latitude " : {},
56+ "longitude " : {},
5757 }
5858 reservedKeywords = []string {"as" , "as?" , "break" , "class" , "continue" , "do" , "else" , "false" , "for" , "fun" , "if" ,
5959 "in" , "!in" , "interface" , "is" , "!is" , "null" , "object" , "package" , "return" , "super" , "this" , "throw" , "true" ,
@@ -182,6 +182,7 @@ func (g *Generator) prepareTemplateData() templateData {
182182 g .sortTemplateData (& data )
183183 g .prepareModelFieldName (& data )
184184
185+ g .resolveTypes (& data )
185186 return data
186187}
187188
@@ -288,6 +289,44 @@ func (g *Generator) executeTemplate(data templateData) ([]byte, error) {
288289 return buf .Bytes (), nil
289290}
290291
292+ // resolveTypes last check and update params in methods
293+ func (g * Generator ) resolveTypes (data * templateData ) {
294+ for i := range data .Methods {
295+ method := & data .Methods [i ]
296+ for j := range method .Parameters {
297+ param := & method .Parameters [j ]
298+ if newType , ok := inferKotlinType (param .Type , param .Name ); ok {
299+ param .setType (newType )
300+ }
301+ }
302+ }
303+ }
304+
305+ func inferKotlinType (valType , name string ) (string , bool ) {
306+ switch valType {
307+ case Int :
308+ if kotlinTypeID (name ) {
309+ return Long , true
310+ }
311+ case Float :
312+ if kotlinTypeDouble (name ) {
313+ return Double , true
314+ }
315+ case String :
316+ if kotlinTypeTimestamp (name ) {
317+ return Timestamp , true
318+ }
319+ }
320+ return "" , false
321+ }
322+
323+ // setType update all types
324+ func (p * Parameter ) setType (t string ) {
325+ p .Type = t
326+ p .BaseType = t
327+ p .ReturnType = t
328+ }
329+
291330// propertiesToParams convert smd.PropertyList to []Parameter
292331func (g * Generator ) propertiesToParams (typeName string , list smd.PropertyList ) []Parameter {
293332 parameters := make ([]Parameter , 0 , len (list ))
@@ -435,6 +474,7 @@ func kotlinDefault(smdType string) string {
435474
436475// kotlinTypeDouble check if property need set type Double
437476func kotlinTypeDouble (name string ) bool {
477+ name = strings .ToLower (name )
438478 if _ , ok := doubleSuffixes [name ]; ok {
439479 return true
440480 }
@@ -448,17 +488,18 @@ func kotlinTypeDouble(name string) bool {
448488 return false
449489}
450490
451- // kotlinTypeID check if property is ID set type Long
491+ // kotlinTypeID check if property is ID or IDs set type Long
452492func kotlinTypeID (name string ) bool {
453493 return name == id ||
454494 strings .HasSuffix (name , strings .ToUpper (id )) ||
455495 strings .HasSuffix (name , "Id" ) ||
456- strings .HasSuffix (name , "Ids" )
496+ strings .HasSuffix (name , "Id" + "s" ) ||
497+ strings .HasSuffix (name , strings .ToUpper (id )+ "s" )
457498}
458499
459500// kotlinTypeTimestamp check if is time property set Timestamp
460501func kotlinTypeTimestamp (name string ) bool {
461- return strings .HasSuffix (name , "edAt " )
502+ return strings .HasSuffix (name , "At " )
462503}
463504
464505func arrayType (items map [string ]string , isReturnType bool ) string {
0 commit comments