@@ -37,11 +37,13 @@ import org.utbot.framework.plugin.api.BuiltinClassId
3737import org.utbot.framework.plugin.api.ClassId
3838import org.utbot.framework.plugin.api.CodegenLanguage
3939import org.utbot.framework.plugin.api.ConstructorId
40+ import org.utbot.framework.plugin.api.DirectFieldAccessId
4041import org.utbot.framework.plugin.api.MethodId
4142import org.utbot.framework.plugin.api.UtArrayModel
4243import org.utbot.framework.plugin.api.UtAssembleModel
4344import org.utbot.framework.plugin.api.UtClassRefModel
4445import org.utbot.framework.plugin.api.UtCompositeModel
46+ import org.utbot.framework.plugin.api.UtDirectGetFieldModel
4547import org.utbot.framework.plugin.api.UtDirectSetFieldModel
4648import org.utbot.framework.plugin.api.UtEnumConstantModel
4749import org.utbot.framework.plugin.api.UtExecutableCallModel
@@ -50,6 +52,7 @@ import org.utbot.framework.plugin.api.UtModel
5052import org.utbot.framework.plugin.api.UtNullModel
5153import org.utbot.framework.plugin.api.UtPrimitiveModel
5254import org.utbot.framework.plugin.api.UtReferenceModel
55+ import org.utbot.framework.plugin.api.UtStatementCallModel
5356import org.utbot.framework.plugin.api.UtVoidModel
5457import org.utbot.framework.plugin.api.util.classClassId
5558import org.utbot.framework.plugin.api.util.defaultValueModel
@@ -215,7 +218,7 @@ open class CgVariableConstructor(val context: CgContext) :
215218 // fields here are supposed to be accessible, so we assign them directly without any checks
216219 instance[statementModel.fieldId] `= ` declareOrGet(statementModel.fieldModel)
217220 }
218- is UtExecutableCallModel -> {
221+ is UtStatementCallModel -> {
219222 val call = createCgExecutableCallFromUtExecutableCall(statementModel)
220223 val equivalentFieldAccess = replaceCgExecutableCallWithFieldAccessIfNeeded(call)
221224 if (equivalentFieldAccess != null )
@@ -231,21 +234,22 @@ open class CgVariableConstructor(val context: CgContext) :
231234
232235 private fun processInstantiationStatement (
233236 model : UtAssembleModel ,
234- executableCall : UtExecutableCallModel ,
237+ statementCall : UtStatementCallModel ,
235238 baseName : String?
236239 ) {
237- val executable = executableCall.executable
238- val params = executableCall .params
240+ val executable = statementCall.statement
241+ val params = statementCall .params
239242
240243 val type = when (executable) {
241244 is MethodId -> executable.returnType
245+ is DirectFieldAccessId -> executable.fieldId.type
242246 is ConstructorId -> executable.classId
243247 }
244248 // Don't use redundant constructors for primitives and String
245249 val initExpr = if (isPrimitiveWrapperOrString(type)) {
246250 cgLiteralForWrapper(params)
247251 } else {
248- createCgExecutableCallFromUtExecutableCall(executableCall )
252+ createCgExecutableCallFromUtExecutableCall(statementCall )
249253 }
250254 newVar(type, model, baseName) {
251255 initExpr
@@ -255,22 +259,31 @@ open class CgVariableConstructor(val context: CgContext) :
255259 }
256260
257261
258- private fun createCgExecutableCallFromUtExecutableCall (statementModel : UtExecutableCallModel ): CgExecutableCall {
259- val executable = statementModel.executable
260- val params = statementModel.params
261- val cgCall = when (executable) {
262- is MethodId -> {
263- val caller = statementModel.instance?.let { declareOrGet(it) }
264- val args = params.map { declareOrGet(it) }
265- caller[executable](* args.toTypedArray())
262+ private fun createCgExecutableCallFromUtExecutableCall (statementModel : UtStatementCallModel ): CgExecutableCall =
263+ when (statementModel) {
264+ is UtExecutableCallModel -> {
265+ val executable = statementModel.executable
266+ val params = statementModel.params
267+
268+ when (executable) {
269+ is MethodId -> {
270+ val caller = statementModel.instance?.let { declareOrGet(it) }
271+ val args = params.map { declareOrGet(it) }
272+ caller[executable](* args.toTypedArray())
273+ }
274+
275+ is ConstructorId -> {
276+ val args = params.map { declareOrGet(it) }
277+ executable(* args.toTypedArray())
278+ }
279+ }
266280 }
267- is ConstructorId -> {
268- val args = params.map { declareOrGet(it) }
269- executable(* args.toTypedArray())
281+ is UtDirectGetFieldModel -> {
282+ val instance = declareOrGet(statementModel.instance)
283+ val fieldAccess = statementModel.fieldAccess
284+ utilsClassId[getFieldValue](instance, fieldAccess.fieldId.declaringClass.canonicalName, fieldAccess.fieldId.name)
270285 }
271286 }
272- return cgCall
273- }
274287
275288 /* *
276289 * If executable is getter/setter that should be syntactically replaced with field access
0 commit comments