Skip to content

Commit 5af13ec

Browse files
authored
Properly use ApplicationInstantiatorFacade from SpringApplicationAnalyzer (#2267)
Properly use ApplicationInstantiatorFacade from SpringApplicationAnalyzer
1 parent f8c21ed commit 5af13ec

File tree

5 files changed

+33
-11
lines changed

5 files changed

+33
-11
lines changed

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

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,6 @@ class SpringUtExecutionInstrumentation(
7070

7171
// TODO: recreate context/app every time whenever we change method under test
7272
springContext = springFacadeInstance.instantiate(instantiationSettings)
73-
?: error("Failed to initialize Spring context")
7473
}
7574

7675
override fun invoke(

utbot-spring-analyzer/src/main/kotlin/org/utbot/spring/analyzer/SpringApplicationAnalyzer.kt

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.utbot.spring.analyzer
22

3-
import org.utbot.framework.plugin.api.util.utContext
43
import org.utbot.spring.api.instantiator.InstantiationSettings
54
import org.utbot.spring.api.ApplicationData
65
import org.utbot.spring.api.instantiator.ApplicationInstantiatorFacade
@@ -23,9 +22,11 @@ class SpringApplicationAnalyzer {
2322
.newInstance()
2423
springFacadeInstance as ApplicationInstantiatorFacade
2524

26-
return UtBotSpringShutdownException
27-
.catch { springFacadeInstance.instantiate(instantiationSettings) }
28-
.beanDefinitions
29-
.toTypedArray()
25+
return springFacadeInstance.instantiate(instantiationSettings) { instantiator ->
26+
UtBotSpringShutdownException
27+
.catch { instantiator.instantiate() }
28+
.beanDefinitions
29+
.toTypedArray()
30+
}
3031
}
3132
}

utbot-spring-commons-api/src/main/kotlin/org/utbot/spring/api/instantiator/ApplicationInstantiatorFacade.kt

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,5 +4,10 @@ import org.utbot.spring.api.context.ContextWrapper
44

55

66
interface ApplicationInstantiatorFacade {
7-
fun instantiate(instantiationSettings: InstantiationSettings): ContextWrapper?
7+
fun instantiate(instantiationSettings: InstantiationSettings): ContextWrapper
8+
9+
fun <T> instantiate(
10+
instantiationSettings: InstantiationSettings,
11+
instantiatorRunner: (ConfiguredApplicationInstantiator) -> T
12+
): T
813
}
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
package org.utbot.spring.api.instantiator
2+
3+
import org.utbot.spring.api.context.ContextWrapper
4+
5+
fun interface ConfiguredApplicationInstantiator {
6+
fun instantiate(): ContextWrapper
7+
}

utbot-spring-commons/src/main/kotlin/org/utbot/spring/instantiator/SpringApplicationInstantiatorFacade.kt

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,22 @@ import com.jetbrains.rd.util.getLogger
88
import com.jetbrains.rd.util.info
99
import org.springframework.boot.SpringBootVersion
1010
import org.springframework.core.SpringVersion
11+
import org.utbot.spring.api.context.ContextWrapper
1112
import org.utbot.spring.api.instantiator.ApplicationInstantiatorFacade
13+
import org.utbot.spring.api.instantiator.ConfiguredApplicationInstantiator
1214
import org.utbot.spring.context.SpringContextWrapper
1315

1416
private val logger = getLogger<SpringApplicationInstantiatorFacade>()
1517

1618
class SpringApplicationInstantiatorFacade : ApplicationInstantiatorFacade {
1719

18-
override fun instantiate(instantiationSettings: InstantiationSettings): SpringContextWrapper? {
20+
override fun instantiate(instantiationSettings: InstantiationSettings): ContextWrapper =
21+
instantiate(instantiationSettings) { it.instantiate() }
22+
23+
override fun <T> instantiate(
24+
instantiationSettings: InstantiationSettings,
25+
instantiatorRunner: (ConfiguredApplicationInstantiator) -> T
26+
): T {
1927
logger.info { "Current Java version is: " + System.getProperty("java.version") }
2028
logger.info { "Current Spring version is: " + runCatching { SpringVersion.getVersion() }.getOrNull() }
2129
logger.info { "Current Spring Boot version is: " + runCatching { SpringBootVersion.getVersion() }.getOrNull() }
@@ -26,14 +34,16 @@ class SpringApplicationInstantiatorFacade : ApplicationInstantiatorFacade {
2634
if (instantiator.canInstantiate()) {
2735
logger.info { "Instantiating with $instantiator" }
2836
try {
29-
val context = instantiator.instantiate(instantiationSettings.configurationClasses, environment)
30-
return SpringContextWrapper(context)
37+
return instantiatorRunner(ConfiguredApplicationInstantiator {
38+
val context = instantiator.instantiate(instantiationSettings.configurationClasses, environment)
39+
SpringContextWrapper(context)
40+
})
3141
} catch (e: Throwable) {
3242
logger.error("Instantiating with $instantiator failed", e)
3343
}
3444
}
3545
}
3646

37-
return null
47+
error("Failed to initialize Spring context")
3848
}
3949
}

0 commit comments

Comments
 (0)