@@ -49,6 +49,7 @@ import org.utbot.framework.plugin.api.util.booleanClassId
49
49
import org.utbot.framework.plugin.api.util.booleanWrapperClassId
50
50
import org.utbot.framework.plugin.api.util.classClassId
51
51
import org.utbot.framework.plugin.api.util.defaultValueModel
52
+ import org.utbot.framework.plugin.api.util.executable
52
53
import org.utbot.framework.plugin.api.util.jField
53
54
import org.utbot.framework.plugin.api.util.findFieldByIdOrNull
54
55
import org.utbot.framework.plugin.api.util.id
@@ -188,7 +189,7 @@ open class CgVariableConstructor(val context: CgContext) :
188
189
}
189
190
190
191
for ((fieldId, fieldModel) in model.fields) {
191
- val variableForField = getOrCreateVariable(fieldModel)
192
+ val variableForField = getOrCreateVariable(fieldModel, name = fieldId.name )
192
193
if (! variableForField.hasDefaultValue())
193
194
setFieldValue(obj, fieldId, variableForField)
194
195
}
@@ -259,9 +260,12 @@ open class CgVariableConstructor(val context: CgContext) :
259
260
for (statementModel in model.modificationsChain) {
260
261
when (statementModel) {
261
262
is UtDirectSetFieldModel -> {
262
- val instance = declareOrGet (statementModel.instance)
263
+ val instance = getOrCreateVariable (statementModel.instance)
263
264
// fields here are supposed to be accessible, so we assign them directly without any checks
264
- instance[statementModel.fieldId] `= ` declareOrGet(statementModel.fieldModel)
265
+ instance[statementModel.fieldId] `= ` getOrCreateVariable(
266
+ model = statementModel.fieldModel,
267
+ name = statementModel.fieldId.name,
268
+ )
265
269
}
266
270
is UtStatementCallModel -> {
267
271
val call = createCgExecutableCallFromUtExecutableCall(statementModel)
@@ -284,23 +288,22 @@ open class CgVariableConstructor(val context: CgContext) :
284
288
when (statementModel) {
285
289
is UtExecutableCallModel -> {
286
290
val executable = statementModel.executable
291
+ val paramNames = runCatching {
292
+ executable.executable.parameters.map { if (it.isNamePresent) it.name else null }
293
+ }.getOrNull()
287
294
val params = statementModel.params
295
+ val caller = statementModel.instance?.let { getOrCreateVariable(it) }
296
+ val args = params.mapIndexed { i, param ->
297
+ getOrCreateVariable(param, name = paramNames?.getOrNull(i))
298
+ }
288
299
289
300
when (executable) {
290
- is MethodId -> {
291
- val caller = statementModel.instance?.let { declareOrGet(it) }
292
- val args = params.map { declareOrGet(it) }
293
- caller[executable](* args.toTypedArray())
294
- }
295
-
296
- is ConstructorId -> {
297
- val args = params.map { declareOrGet(it) }
298
- executable(* args.toTypedArray())
299
- }
301
+ is MethodId -> caller[executable](* args.toTypedArray())
302
+ is ConstructorId -> executable(* args.toTypedArray())
300
303
}
301
304
}
302
305
is UtDirectGetFieldModel -> {
303
- val instance = declareOrGet (statementModel.instance)
306
+ val instance = getOrCreateVariable (statementModel.instance)
304
307
val fieldAccess = statementModel.fieldAccess
305
308
utilsClassId[getFieldValue](instance, fieldAccess.fieldId.declaringClass.canonicalName, fieldAccess.fieldId.name)
306
309
}
@@ -508,13 +511,6 @@ open class CgVariableConstructor(val context: CgContext) :
508
511
return newVar(Class ::class .id, baseName) { init }
509
512
}
510
513
511
- /* *
512
- * Either declares a new variable or gets it from context's cache
513
- * Returns the obtained variable
514
- */
515
- private fun declareOrGet (model : UtModel ): CgValue =
516
- valueByUtModelWrapper[model.wrap()] ? : getOrCreateVariable(model)
517
-
518
514
private fun basicForLoop (start : Any , until : Any , body : (i: CgExpression ) -> Unit ) {
519
515
forLoop {
520
516
val (i, init ) = loopInitialization(intClassId, " i" , start.resolve())
0 commit comments