@@ -19,6 +19,8 @@ import org.utbot.framework.plugin.api.UtNullModel
19
19
import org.utbot.framework.plugin.api.UtPrimitiveModel
20
20
import org.utbot.framework.plugin.api.UtVoidModel
21
21
import org.utbot.framework.plugin.api.isMockModel
22
+ import org.utbot.framework.plugin.api.UtStatementCallModel
23
+ import org.utbot.framework.plugin.api.UtDirectSetFieldModel
22
24
import org.utbot.framework.plugin.api.util.SpringModelUtils.isAutowiredFromContext
23
25
import org.utbot.framework.plugin.api.canBeSpied
24
26
@@ -59,7 +61,7 @@ class SpringTestClassModelBuilder(val context: CgContext) :
59
61
60
62
(execution.stateBefore.parameters + execution.stateBefore.thisInstance)
61
63
.filterNotNull()
62
- .forEach { model -> stateBeforeDependentModels + = collectDependentModels (model) }
64
+ .forEach { model -> stateBeforeDependentModels + = collectAutowiredModels (model) }
63
65
}
64
66
}
65
67
}
@@ -88,11 +90,24 @@ class SpringTestClassModelBuilder(val context: CgContext) :
88
90
)
89
91
}
90
92
93
+ private fun collectAutowiredModels (model : UtModel ): Set <UtModelWrapper > {
94
+ val allDependentModels = mutableSetOf<UtModelWrapper >()
95
+
96
+ collectRecursively(model, allDependentModels)
97
+
98
+ return allDependentModels
99
+ }
100
+
101
+ private fun collectRecursively (model : UtModel , allDependentModels : MutableSet <UtModelWrapper >){
102
+ if (! allDependentModels.add(model.wrap())){
103
+ return
104
+ }
105
+ collectDependentModels(model).forEach { collectRecursively(it.model, allDependentModels) }
106
+ }
107
+
91
108
private fun collectDependentModels (model : UtModel ): Set <UtModelWrapper > {
92
109
val dependentModels = mutableSetOf<UtModelWrapper >()
93
110
94
- dependentModels.add(model.wrap())
95
-
96
111
when (model) {
97
112
is UtNullModel ,
98
113
is UtPrimitiveModel ,
@@ -118,6 +133,16 @@ class SpringTestClassModelBuilder(val context: CgContext) :
118
133
is UtAssembleModel -> {
119
134
model.instantiationCall.instance?.let { dependentModels.add(it.wrap()) }
120
135
model.instantiationCall.params.forEach { dependentModels.add(it.wrap()) }
136
+
137
+ if (model.isAutowiredFromContext()) {
138
+ model.modificationsChain.forEach { stmt ->
139
+ stmt.instance?.let { dependentModels.add(it.wrap()) }
140
+ when (stmt) {
141
+ is UtStatementCallModel -> stmt.params.forEach { dependentModels.add(it.wrap()) }
142
+ is UtDirectSetFieldModel -> dependentModels.add(stmt.fieldModel.wrap())
143
+ }
144
+ }
145
+ }
121
146
}
122
147
}
123
148
0 commit comments