@@ -49,6 +49,7 @@ import org.utbot.framework.plugin.api.util.booleanClassId
4949import org.utbot.framework.plugin.api.util.booleanWrapperClassId
5050import org.utbot.framework.plugin.api.util.classClassId
5151import org.utbot.framework.plugin.api.util.defaultValueModel
52+ import org.utbot.framework.plugin.api.util.executable
5253import org.utbot.framework.plugin.api.util.jField
5354import org.utbot.framework.plugin.api.util.findFieldByIdOrNull
5455import org.utbot.framework.plugin.api.util.id
@@ -188,7 +189,7 @@ open class CgVariableConstructor(val context: CgContext) :
188189 }
189190
190191 for ((fieldId, fieldModel) in model.fields) {
191- val variableForField = getOrCreateVariable(fieldModel)
192+ val variableForField = getOrCreateVariable(fieldModel, name = fieldId.name )
192193 if (! variableForField.hasDefaultValue())
193194 setFieldValue(obj, fieldId, variableForField)
194195 }
@@ -259,9 +260,12 @@ open class CgVariableConstructor(val context: CgContext) :
259260 for (statementModel in model.modificationsChain) {
260261 when (statementModel) {
261262 is UtDirectSetFieldModel -> {
262- val instance = declareOrGet (statementModel.instance)
263+ val instance = getOrCreateVariable (statementModel.instance)
263264 // 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+ )
265269 }
266270 is UtStatementCallModel -> {
267271 val call = createCgExecutableCallFromUtExecutableCall(statementModel)
@@ -284,23 +288,22 @@ open class CgVariableConstructor(val context: CgContext) :
284288 when (statementModel) {
285289 is UtExecutableCallModel -> {
286290 val executable = statementModel.executable
291+ val paramNames = runCatching {
292+ executable.executable.parameters.map { if (it.isNamePresent) it.name else null }
293+ }.getOrNull()
287294 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+ }
288299
289300 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())
300303 }
301304 }
302305 is UtDirectGetFieldModel -> {
303- val instance = declareOrGet (statementModel.instance)
306+ val instance = getOrCreateVariable (statementModel.instance)
304307 val fieldAccess = statementModel.fieldAccess
305308 utilsClassId[getFieldValue](instance, fieldAccess.fieldId.declaringClass.canonicalName, fieldAccess.fieldId.name)
306309 }
@@ -508,13 +511,6 @@ open class CgVariableConstructor(val context: CgContext) :
508511 return newVar(Class ::class .id, baseName) { init }
509512 }
510513
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-
518514 private fun basicForLoop (start : Any , until : Any , body : (i: CgExpression ) -> Unit ) {
519515 forLoop {
520516 val (i, init ) = loopInitialization(intClassId, " i" , start.resolve())
0 commit comments