@@ -22,6 +22,7 @@ import org.utbot.framework.codegen.util.nullLiteral
2222import org.utbot.framework.codegen.util.resolve
2323import org.utbot.framework.plugin.api.BuiltinClassId
2424import org.utbot.framework.plugin.api.ClassId
25+ import org.utbot.framework.plugin.api.FieldId
2526import org.utbot.framework.plugin.api.CodegenLanguage
2627import org.utbot.framework.plugin.api.ConstructorId
2728import org.utbot.framework.plugin.api.MethodId
@@ -169,30 +170,34 @@ open class CgVariableConstructor(val context: CgContext) :
169170 }
170171
171172 for ((fieldId, fieldModel) in model.fields) {
172- val field = fieldId.jField
173173 val variableForField = getOrCreateVariable(fieldModel)
174- val fieldFromVariableSpecifiedType = obj.type.findFieldByIdOrNull(fieldId)
175-
176- // we cannot set field directly if variable declared type does not have such field
177- // or we cannot directly create variable for field with the specified type (it is private, for example)
178- // Example:
179- // Object heapByteBuffer = createInstance("java.nio.HeapByteBuffer");
180- // branchRegisterRequest.byteBuffer = heapByteBuffer;
181- // byteBuffer is field of type ByteBuffer and upper line is incorrect
182- val canFieldBeDirectlySetByVariableAndFieldTypeRestrictions =
183- fieldFromVariableSpecifiedType != null && fieldFromVariableSpecifiedType.type.id == variableForField.type
184- if (canFieldBeDirectlySetByVariableAndFieldTypeRestrictions && fieldId.canBeSetFrom(context, obj.type)) {
185- // TODO: check if it is correct to use declaringClass of a field here
186- val fieldAccess = if (field.isStatic) CgStaticFieldAccess (fieldId) else CgFieldAccess (obj, fieldId)
187- fieldAccess `= ` variableForField
188- } else {
189- // composite models must not have info about static fields, hence only non-static fields are set here
190- + utilsClassId[setField](obj, fieldId.declaringClass.name, fieldId.name, variableForField)
191- }
174+ setFieldValue(obj, fieldId, variableForField)
192175 }
193176 return obj
194177 }
195178
179+ protected fun setFieldValue (obj : CgValue , fieldId : FieldId , variableForField : CgValue ){
180+ val field = fieldId.jField
181+ val fieldFromVariableSpecifiedType = obj.type.findFieldByIdOrNull(fieldId)
182+
183+ // we cannot set field directly if variable declared type does not have such field
184+ // or we cannot directly create variable for field with the specified type (it is private, for example)
185+ // Example:
186+ // Object heapByteBuffer = createInstance("java.nio.HeapByteBuffer");
187+ // branchRegisterRequest.byteBuffer = heapByteBuffer;
188+ // byteBuffer is field of type ByteBuffer and upper line is incorrect
189+ val canFieldBeDirectlySetByVariableAndFieldTypeRestrictions =
190+ fieldFromVariableSpecifiedType != null && fieldFromVariableSpecifiedType.type.id == variableForField.type
191+ if (canFieldBeDirectlySetByVariableAndFieldTypeRestrictions && fieldId.canBeSetFrom(context, obj.type)) {
192+ // TODO: check if it is correct to use declaringClass of a field here
193+ val fieldAccess = if (field.isStatic) CgStaticFieldAccess (fieldId) else CgFieldAccess (obj, fieldId)
194+ fieldAccess `= ` variableForField
195+ } else {
196+ // composite models must not have info about static fields, hence only non-static fields are set here
197+ + utilsClassId[setField](obj, fieldId.declaringClass.name, fieldId.name, variableForField)
198+ }
199+ }
200+
196201 private fun constructAssemble (model : UtAssembleModel , baseName : String? ): CgValue {
197202 instantiateAssembleModel(model, baseName)
198203 return constructAssembleForVariable(model)
0 commit comments