Skip to content

Commit bc1edcd

Browse files
authored
Support for both Cookie libraries for different versions of Spring #2542 (#2606)
1 parent 36c23ff commit bc1edcd

File tree

1 file changed

+43
-36
lines changed

1 file changed

+43
-36
lines changed

utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/util/SpringModelUtils.kt

Lines changed: 43 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
package org.utbot.framework.plugin.api.util
22

3+
import mu.KotlinLogging
34
import org.utbot.common.tryLoadClass
45
import org.utbot.common.withToStringThreadLocalReentrancyGuard
56
import org.utbot.framework.plugin.api.isNotNull
@@ -17,6 +18,8 @@ import org.utbot.framework.plugin.api.mapper.UtModelDeepMapper
1718
import org.utbot.framework.plugin.api.mapper.mapModels
1819
import java.util.Optional
1920

21+
private val logger = KotlinLogging.logger {}
22+
2023
object 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

Comments
 (0)