11package org.utbot.framework.plugin.api.util
22
3+ import mu.KotlinLogging
34import org.utbot.common.tryLoadClass
45import org.utbot.common.withToStringThreadLocalReentrancyGuard
56import org.utbot.framework.plugin.api.isNotNull
@@ -17,6 +18,8 @@ import org.utbot.framework.plugin.api.mapper.UtModelDeepMapper
1718import org.utbot.framework.plugin.api.mapper.mapModels
1819import java.util.Optional
1920
21+ private val logger = KotlinLogging .logger {}
22+
2023object SpringModelUtils {
2124 val autowiredClassId = ClassId (" org.springframework.beans.factory.annotation.Autowired" )
2225
@@ -55,6 +58,10 @@ object SpringModelUtils {
5558 private val persistentLibraries = listOf (" javax.persistence" , " jakarta.persistence" )
5659 private fun persistentClassIds (simpleName : String ) = getClassIdFromEachAvailablePackage(persistentLibraries, simpleName)
5760
61+ // the library in which Cookie is stored depends on the version of Spring
62+ private val cookiesLibraries = listOf (" javax.servlet.http" , " jakarta.servlet.http" )
63+ private val cookieClassIds = getClassIdFromEachAvailablePackage(cookiesLibraries, " Cookie" )
64+
5865 val entityClassIds get() = persistentClassIds(" Entity" )
5966 val generatedValueClassIds get() = persistentClassIds(" GeneratedValue" )
6067 val idClassIds get() = persistentClassIds(" Id" )
@@ -171,7 +178,6 @@ object SpringModelUtils {
171178 private val httpHeaderClassId = ClassId (" org.springframework.http.HttpHeaders" )
172179
173180 private val objectMapperClassId = ClassId (" com.fasterxml.jackson.databind.ObjectMapper" )
174- private val cookieClassId = ClassId (" javax.servlet.http.Cookie" )
175181
176182 // as of Spring 6.0 `NestedServletException` is deprecated in favor of standard `ServletException` nesting
177183 val nestedServletExceptionClassIds = listOf (
@@ -207,13 +213,12 @@ object SpringModelUtils {
207213 parameters = listOf (httpHeaderClassId)
208214 )
209215
210- // // TODO uncomment when #2542 is fixed
211- // private val mockHttpServletCookieMethodId = MethodId(
212- // classId = mockHttpServletRequestBuilderClassId,
213- // name = "cookie",
214- // returnType = mockHttpServletRequestBuilderClassId,
215- // parameters = listOf(getArrayClassIdByElementClassId(cookieClassId))
216- // )
216+ private fun mockHttpServletCookieMethodId (cookieClassId : ClassId ) = MethodId (
217+ classId = mockHttpServletRequestBuilderClassId,
218+ name = " cookie" ,
219+ returnType = mockHttpServletRequestBuilderClassId,
220+ parameters = listOf (getArrayClassIdByElementClassId(cookieClassId))
221+ )
217222
218223 private val mockHttpServletContentTypeMethodId = MethodId (
219224 classId = mockHttpServletRequestBuilderClassId,
@@ -359,7 +364,7 @@ object SpringModelUtils {
359364 pathVariableClassId,
360365 requestParamClassId,
361366 requestHeaderClassId,
362- // cookieValueClassId, // TODO uncomment when #2542 is fixed
367+ cookieValueClassId,
363368 requestAttributesClassId,
364369 sessionAttributesClassId,
365370 modelAttributesClassId,
@@ -446,10 +451,11 @@ object SpringModelUtils {
446451 val headersContentModel = createHeadersContentModel(methodId, arguments, idGenerator)
447452 requestBuilderModel = addHeadersToRequestBuilderModel(headersContentModel, requestBuilderModel, idGenerator)
448453
449- // // TODO uncomment when #2542 is fixed
450- // val cookieValuesModel = createCookieValuesModel(methodId, arguments, idGenerator)
451- // requestBuilderModel =
452- // addCookiesToRequestBuilderModel(cookieValuesModel, requestBuilderModel, idGenerator)
454+ cookieClassIds.singleOrNull()?.let { cookieClassId ->
455+ val cookieValuesModel = createCookieValuesModel(cookieClassId, methodId, arguments, idGenerator)
456+ requestBuilderModel =
457+ addCookiesToRequestBuilderModel(cookieClassId, cookieValuesModel, requestBuilderModel, idGenerator)
458+ } ? : logger.warn { " Cookie library not found" }
453459
454460 val requestAttributes = collectArgumentsWithAnnotationModels(methodId, requestAttributesClassId, arguments)
455461 requestBuilderModel =
@@ -526,29 +532,29 @@ object SpringModelUtils {
526532 return requestBuilderModel
527533 }
528534
529- // // TODO uncomment when #2542 is fixed
530- // private fun addCookiesToRequestBuilderModel(
531- // cookieValuesModel: UtArrayModel,
532- // requestBuilderModel: UtAssembleModel,
533- // idGenerator: () -> Int
534- // ): UtAssembleModel {
535- // @Suppress("NAME_SHADOWING")
536- // var requestBuilderModel = requestBuilderModel
537- //
538- // if(cookieValuesModel.length > 0) {
539- // requestBuilderModel = UtAssembleModel(
540- // id = idGenerator(),
541- // classId = mockHttpServletRequestBuilderClassId,
542- // modelName = "requestBuilder",
543- // instantiationCall = UtExecutableCallModel(
544- // instance = requestBuilderModel,
545- // executable = mockHttpServletCookieMethodId,
546- // params = listOf(cookieValuesModel)
547- // )
548- // )
549- // }
550- // return requestBuilderModel
551- // }
535+ private fun addCookiesToRequestBuilderModel (
536+ cookieClassId : ClassId ,
537+ cookieValuesModel : UtArrayModel ,
538+ requestBuilderModel : UtAssembleModel ,
539+ idGenerator : () -> Int
540+ ): UtAssembleModel {
541+ @Suppress(" NAME_SHADOWING" )
542+ var requestBuilderModel = requestBuilderModel
543+
544+ if (cookieValuesModel.length > 0 ) {
545+ requestBuilderModel = UtAssembleModel (
546+ id = idGenerator(),
547+ classId = mockHttpServletRequestBuilderClassId,
548+ modelName = " requestBuilder" ,
549+ instantiationCall = UtExecutableCallModel (
550+ instance = requestBuilderModel,
551+ executable = mockHttpServletCookieMethodId(cookieClassId) ,
552+ params = listOf (cookieValuesModel)
553+ )
554+ )
555+ }
556+ return requestBuilderModel
557+ }
552558
553559 private fun addHeadersToRequestBuilderModel (
554560 headersContentModel : UtAssembleModel ,
@@ -676,6 +682,7 @@ object SpringModelUtils {
676682 }
677683
678684 private fun createCookieValuesModel (
685+ cookieClassId : ClassId ,
679686 methodId : MethodId ,
680687 arguments : List <UtModel >,
681688 idGenerator : () -> Int ,
0 commit comments