@@ -126,6 +126,9 @@ object SpringModelUtils {
126
126
private val pathVariableClassId = ClassId (" org.springframework.web.bind.annotation.PathVariable" )
127
127
private val requestHeaderClassId = ClassId (" org.springframework.web.bind.annotation.RequestHeader" )
128
128
private val cookieValueClassId = ClassId (" org.springframework.web.bind.annotation.CookieValue" )
129
+ private val requestAttributesClassId = ClassId (" org.springframework.web.bind.annotation.RequestAttribute" )
130
+ private val sessionAttributesClassId = ClassId (" org.springframework.web.bind.annotation.SessionAttribute" )
131
+ private val modelAttributesClassId = ClassId (" org.springframework.web.bind.annotation.ModelAttribute" )
129
132
private val requestBodyClassId = ClassId (" org.springframework.web.bind.annotation.RequestBody" )
130
133
private val requestParamClassId = ClassId (" org.springframework.web.bind.annotation.RequestParam" )
131
134
private val uriComponentsBuilderClassId = ClassId (" org.springframework.web.util.UriComponentsBuilder" )
@@ -151,6 +154,55 @@ object SpringModelUtils {
151
154
private val objectMapperClassId = ClassId (" com.fasterxml.jackson.databind.ObjectMapper" )
152
155
private val cookieClassId = ClassId (" javax.servlet.http.Cookie" )
153
156
157
+ private val requestAttributesMethodId = MethodId (
158
+ classId = mockHttpServletRequestBuilderClassId,
159
+ name = " requestAttr" ,
160
+ returnType = mockHttpServletRequestBuilderClassId,
161
+ parameters = listOf (stringClassId, objectClassId)
162
+ )
163
+
164
+ private val sessionAttributesMethodId = MethodId (
165
+ classId = mockHttpServletRequestBuilderClassId,
166
+ name = " sessionAttr" ,
167
+ returnType = mockHttpServletRequestBuilderClassId,
168
+ parameters = listOf (stringClassId, objectClassId)
169
+ )
170
+
171
+ private val modelAttributesMethodId = MethodId (
172
+ classId = mockHttpServletRequestBuilderClassId,
173
+ name = " flashAttr" ,
174
+ returnType = mockHttpServletRequestBuilderClassId,
175
+ parameters = listOf (stringClassId, objectClassId)
176
+ )
177
+
178
+ private val mockHttpServletHeadersMethodId = MethodId (
179
+ classId = mockHttpServletRequestBuilderClassId,
180
+ name = " headers" ,
181
+ returnType = mockHttpServletRequestBuilderClassId,
182
+ parameters = listOf (httpHeaderClassId)
183
+ )
184
+
185
+ private val mockHttpServletCookieMethodId = MethodId (
186
+ classId = mockHttpServletRequestBuilderClassId,
187
+ name = " cookie" ,
188
+ returnType = mockHttpServletRequestBuilderClassId,
189
+ parameters = listOf (getArrayClassIdByElementClassId(cookieClassId))
190
+ )
191
+
192
+ private val mockHttpServletContentTypeMethodId = MethodId (
193
+ classId = mockHttpServletRequestBuilderClassId,
194
+ name = " contentType" ,
195
+ returnType = mockHttpServletRequestBuilderClassId,
196
+ parameters = listOf (mediaTypeClassId)
197
+ )
198
+
199
+ private val mockHttpServletContentMethodId = MethodId (
200
+ classId = mockHttpServletRequestBuilderClassId,
201
+ name = " content" ,
202
+ returnType = mockHttpServletRequestBuilderClassId,
203
+ parameters = listOf (stringClassId)
204
+ )
205
+
154
206
val mockMvcPerformMethodId = MethodId (
155
207
classId = mockMvcClassId,
156
208
name = " perform" ,
@@ -299,7 +351,7 @@ object SpringModelUtils {
299
351
300
352
val requestParamsModel = createRequestParamsModel(methodId, arguments, idGenerator)
301
353
302
- val urlTemplateModel = createUrlTemplateModel(pathVariablesModel, requestParamsModel, requestPath , idGenerator)
354
+ val urlTemplateModel = createUrlTemplateModel(requestPath, pathVariablesModel, requestParamsModel , idGenerator)
303
355
304
356
var requestBuilderModel = UtAssembleModel (
305
357
id = idGenerator(),
@@ -322,22 +374,89 @@ object SpringModelUtils {
322
374
)
323
375
324
376
val headersContentModel = createHeadersContentModel(methodId, arguments, idGenerator)
325
-
326
377
requestBuilderModel = addHeadersToRequestBuilderModel(headersContentModel, requestBuilderModel, idGenerator)
327
378
328
- val cookieClass = utContext.classLoader.loadClass(cookieClassId.name)
329
- val cookieArrayClassId = java.lang.reflect.Array .newInstance(cookieClass,0 )::class .java.id
330
- val cookieValuesModel = createCookieValuesModel(cookieArrayClassId, methodId, arguments, idGenerator)
379
+ val cookieValuesModel = createCookieValuesModel(methodId, arguments, idGenerator)
380
+ requestBuilderModel =
381
+ addCookiesToRequestBuilderModel(cookieValuesModel, requestBuilderModel, idGenerator)
382
+
383
+ val requestAttributes = collectArgumentsWithAnnotationModels(methodId, requestAttributesClassId, arguments)
384
+ requestBuilderModel =
385
+ addRequestAttributesToRequestModelBuilder(requestAttributes, requestBuilderModel, idGenerator)
386
+
387
+ val sessionAttributes = collectArgumentsWithAnnotationModels(methodId, sessionAttributesClassId, arguments)
388
+ requestBuilderModel =
389
+ addSessionAttributesToRequestModelBuilder(sessionAttributes, requestBuilderModel, idGenerator)
331
390
391
+ val modelAttributes = collectArgumentsWithAnnotationModels(methodId, modelAttributesClassId, arguments)
332
392
requestBuilderModel =
333
- addCookiesToRequestBuilderModel(cookieValuesModel, cookieArrayClassId , requestBuilderModel, idGenerator)
393
+ addModelAttributesToRequestModelBuilder(modelAttributes , requestBuilderModel, idGenerator)
334
394
335
395
return addContentToRequestBuilderModel(methodId, arguments, requestBuilderModel, idGenerator)
336
396
}
337
397
398
+ private fun addRequestAttributesToRequestModelBuilder (
399
+ requestAttributes : Map <String , UtModel >,
400
+ requestBuilderModel : UtAssembleModel ,
401
+ idGenerator : () -> Int
402
+ ): UtAssembleModel = addAttributesToRequestBuilderModel(
403
+ requestAttributes,
404
+ requestAttributesMethodId,
405
+ requestBuilderModel,
406
+ idGenerator
407
+ )
408
+
409
+
410
+ private fun addSessionAttributesToRequestModelBuilder (
411
+ sessionAttributes : Map <String , UtModel >,
412
+ requestBuilderModel : UtAssembleModel ,
413
+ idGenerator : () -> Int
414
+ ): UtAssembleModel = addAttributesToRequestBuilderModel(
415
+ sessionAttributes,
416
+ sessionAttributesMethodId,
417
+ requestBuilderModel,
418
+ idGenerator
419
+ )
420
+
421
+ private fun addModelAttributesToRequestModelBuilder (
422
+ modelAttributes : Map <String , UtModel >,
423
+ requestBuilderModel : UtAssembleModel ,
424
+ idGenerator : () -> Int
425
+ ): UtAssembleModel = addAttributesToRequestBuilderModel(
426
+ modelAttributes,
427
+ modelAttributesMethodId,
428
+ requestBuilderModel,
429
+ idGenerator
430
+ )
431
+
432
+
433
+ private fun addAttributesToRequestBuilderModel (
434
+ attributes : Map <String , UtModel >,
435
+ addAttributesMethodId : MethodId ,
436
+ requestBuilderModel : UtAssembleModel ,
437
+ idGenerator : () -> Int
438
+ ): UtAssembleModel {
439
+ @Suppress(" NAME_SHADOWING" )
440
+ var requestBuilderModel = requestBuilderModel
441
+
442
+ attributes.forEach { (name, model) ->
443
+ requestBuilderModel = UtAssembleModel (
444
+ id = idGenerator(),
445
+ classId = mockHttpServletRequestBuilderClassId,
446
+ modelName = " requestBuilder" ,
447
+ instantiationCall = UtExecutableCallModel (
448
+ instance = requestBuilderModel,
449
+ executable = addAttributesMethodId,
450
+ params = listOf (UtPrimitiveModel (name), model)
451
+ )
452
+ )
453
+ }
454
+
455
+ return requestBuilderModel
456
+ }
457
+
338
458
private fun addCookiesToRequestBuilderModel (
339
459
cookieValuesModel : UtArrayModel ,
340
- cookieArrayClassId : ClassId ,
341
460
requestBuilderModel : UtAssembleModel ,
342
461
idGenerator : () -> Int
343
462
): UtAssembleModel {
@@ -351,12 +470,7 @@ object SpringModelUtils {
351
470
modelName = " requestBuilder" ,
352
471
instantiationCall = UtExecutableCallModel (
353
472
instance = requestBuilderModel,
354
- executable = MethodId (
355
- classId = mockHttpServletRequestBuilderClassId,
356
- name = " cookie" ,
357
- returnType = mockHttpServletRequestBuilderClassId,
358
- parameters = listOf (cookieArrayClassId)
359
- ),
473
+ executable = mockHttpServletCookieMethodId,
360
474
params = listOf (cookieValuesModel)
361
475
)
362
476
)
@@ -407,12 +521,7 @@ object SpringModelUtils {
407
521
modelName = " requestBuilder" ,
408
522
instantiationCall = UtExecutableCallModel (
409
523
instance = requestBuilderModel,
410
- executable = MethodId (
411
- classId = mockHttpServletRequestBuilderClassId,
412
- name = " headers" ,
413
- returnType = mockHttpServletRequestBuilderClassId,
414
- parameters = listOf (httpHeaderClassId)
415
- ),
524
+ executable = mockHttpServletHeadersMethodId,
416
525
params = listOf (headers)
417
526
)
418
527
)
@@ -454,12 +563,7 @@ object SpringModelUtils {
454
563
modelName = " requestBuilder" ,
455
564
instantiationCall = UtExecutableCallModel (
456
565
instance = requestBuilderModel,
457
- executable = MethodId (
458
- classId = mockHttpServletRequestBuilderClassId,
459
- name = " contentType" ,
460
- returnType = mockHttpServletRequestBuilderClassId,
461
- parameters = listOf (mediaTypeClassId)
462
- ),
566
+ executable = mockHttpServletContentTypeMethodId,
463
567
params = listOf (
464
568
mediaTypeModel
465
569
)
@@ -491,12 +595,7 @@ object SpringModelUtils {
491
595
modelName = " requestBuilder" ,
492
596
instantiationCall = UtExecutableCallModel (
493
597
instance = requestBuilderModel,
494
- executable = MethodId (
495
- classId = mockHttpServletRequestBuilderClassId,
496
- name = " content" ,
497
- returnType = mockHttpServletRequestBuilderClassId,
498
- parameters = listOf (stringClassId)
499
- ),
598
+ executable = mockHttpServletContentMethodId,
500
599
params = listOf (content)
501
600
)
502
601
)
@@ -505,7 +604,6 @@ object SpringModelUtils {
505
604
}
506
605
507
606
private fun createCookieValuesModel (
508
- cookieArrayClassId : ClassId ,
509
607
methodId : MethodId ,
510
608
arguments : List <UtModel >,
511
609
idGenerator : () -> Int ,
@@ -530,7 +628,7 @@ object SpringModelUtils {
530
628
531
629
return UtArrayModel (
532
630
id = idGenerator(),
533
- classId = cookieArrayClassId ,
631
+ classId = getArrayClassIdByElementClassId(cookieClassId) ,
534
632
length = cookieValues.size,
535
633
constModel = UtNullModel (cookieClassId),
536
634
stores = indexedCookieValues,
@@ -687,9 +785,9 @@ object SpringModelUtils {
687
785
}
688
786
689
787
private fun createUrlTemplateModel (
788
+ requestPath : String ,
690
789
pathVariablesModel : UtAssembleModel ,
691
790
requestParamModel : List <Pair <UtPrimitiveModel , UtAssembleModel >>,
692
- requestPath : String ,
693
791
idGenerator : () -> Int
694
792
): UtModel {
695
793
val requestPathModel = UtPrimitiveModel (requestPath)
0 commit comments