Skip to content

Commit abb6268

Browse files
authored
Add utbot-spring-commons-shadow.jar to engine process utContext (#2543)
1 parent dce7039 commit abb6268

File tree

4 files changed

+31
-10
lines changed

4 files changed

+31
-10
lines changed

utbot-framework/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ plugins {
44

55
configurations {
66
fetchSpringAnalyzerJar
7+
fetchSpringCommonsJar
78
fetchInstrumentationJar
89
}
910

@@ -51,6 +52,7 @@ dependencies {
5152
implementation project(':utbot-spring-commons-api')
5253
implementation project(':utbot-spring-analyzer')
5354
fetchSpringAnalyzerJar project(path: ':utbot-spring-analyzer', configuration: 'springAnalyzerJar')
55+
fetchSpringCommonsJar project(path: ':utbot-spring-commons', configuration: 'springCommonsJar')
5456
}
5557

5658
processResources {
@@ -61,4 +63,8 @@ processResources {
6163
from(configurations.fetchSpringAnalyzerJar) {
6264
into "lib"
6365
}
66+
67+
from(configurations.fetchSpringCommonsJar) {
68+
into "lib"
69+
}
6470
}

utbot-instrumentation/src/main/kotlin/org/utbot/instrumentation/instrumentation/spring/SpringUtExecutionInstrumentation.kt

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import org.utbot.instrumentation.instrumentation.execution.context.Instrumentati
2222
import org.utbot.instrumentation.instrumentation.execution.phases.ExecutionPhaseFailingOnAnyException
2323
import org.utbot.instrumentation.instrumentation.execution.phases.PhasesController
2424
import org.utbot.spring.api.SpringApi
25+
import java.io.File
2526
import java.net.URL
2627
import java.net.URLClassLoader
2728
import java.security.ProtectionDomain
@@ -50,6 +51,14 @@ class SpringUtExecutionInstrumentation(
5051
companion object {
5152
private val logger = getLogger<SpringUtExecutionInstrumentation>()
5253
private const val SPRING_COMMONS_JAR_FILENAME = "utbot-spring-commons-shadow.jar"
54+
55+
val springCommonsJar: File by lazy {
56+
JarUtils.extractJarFileFromResources(
57+
jarFileName = SPRING_COMMONS_JAR_FILENAME,
58+
jarResourcePath = "lib/$SPRING_COMMONS_JAR_FILENAME",
59+
targetDirectoryName = "spring-commons"
60+
)
61+
}
5362
}
5463

5564
fun tryLoadingSpringContext(): ConcreteContextLoadingResult {
@@ -147,11 +156,7 @@ class SpringUtExecutionInstrumentation(
147156
private val buildDirs: Array<URL>,
148157
) : UtExecutionInstrumentation.Factory<SpringUtExecutionInstrumentation> {
149158
override val additionalRuntimeClasspath: Set<String>
150-
get() = super.additionalRuntimeClasspath + JarUtils.extractJarFileFromResources(
151-
jarFileName = SPRING_COMMONS_JAR_FILENAME,
152-
jarResourcePath = "lib/$SPRING_COMMONS_JAR_FILENAME",
153-
targetDirectoryName = "spring-commons"
154-
).path
159+
get() = super.additionalRuntimeClasspath + springCommonsJar.path
155160

156161
// TODO may be we can use some alternative sandbox that has more permissions
157162
// (at the very least we need `ReflectPermission("suppressAccessChecks")`

utbot-intellij/src/main/kotlin/org/utbot/intellij/plugin/generator/UtTestsDialogProcessor.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ import org.utbot.framework.plugin.api.util.LockFile
5959
import org.utbot.framework.plugin.api.util.withStaticsSubstitutionRequired
6060
import org.utbot.framework.plugin.services.JdkInfoService
6161
import org.utbot.framework.plugin.services.WorkingDirService
62+
import org.utbot.instrumentation.instrumentation.spring.SpringUtExecutionInstrumentation
6263
import org.utbot.intellij.plugin.generator.CodeGenerationController.generateTests
6364
import org.utbot.intellij.plugin.models.GenerateTestsModel
6465
import org.utbot.intellij.plugin.process.EngineProcess
@@ -263,7 +264,11 @@ object UtTestsDialogProcessor {
263264
updateIndicator(indicator, ProgressRange.INITIALIZATION, fraction = 0.2)
264265

265266
process.terminateOnException { _ ->
266-
val classpathForClassLoader = buildDirs + classpathList
267+
val classpathForClassLoader = buildDirs + classpathList + when (model.projectType) {
268+
Spring -> listOf(SpringUtExecutionInstrumentation.springCommonsJar.path)
269+
else -> emptyList<String>()
270+
}
271+
267272
process.setupUtContext(classpathForClassLoader)
268273
val simpleApplicationContext = SimpleApplicationContext(
269274
SimpleMockerContext(mockFrameworkInstalled, staticMockingConfigured)

utbot-spring-commons/build.gradle.kts

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,16 @@ java {
1919

2020
dependencies {
2121
implementation(project(":utbot-spring-commons-api"))
22-
implementation(project(":utbot-core"))
2322

24-
// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot
23+
24+
// these dependencies are compilieOnly, because they should
25+
// already be present on the classpath in all utbot processes
26+
compileOnly(project(":utbot-core"))
27+
compileOnly("com.jetbrains.rd:rd-core:$rdVersion") { exclude(group = "org.slf4j", module = "slf4j-api") }
28+
29+
30+
// these dependencies are compilieOnly, because they should
31+
// be picked up from user classpath if they are present there
2532
compileOnly("org.springframework.boot:spring-boot:$springBootVersion")
2633
compileOnly("org.springframework.boot:spring-boot-test-autoconfigure:$springBootVersion")
2734
compileOnly("org.springframework:spring-test:$springVersion")
@@ -32,8 +39,6 @@ dependencies {
3239

3340
compileOnly("javax.persistence:javax.persistence-api:$javaxVersion")
3441
compileOnly("jakarta.persistence:jakarta.persistence-api:$jakartaVersion")
35-
36-
implementation("com.jetbrains.rd:rd-core:$rdVersion") { exclude(group = "org.slf4j", module = "slf4j-api") }
3742
}
3843

3944
tasks.shadowJar {

0 commit comments

Comments
 (0)