@@ -41,6 +41,8 @@ import org.utbot.framework.plugin.api.UtPrimitiveModel
4141import org.utbot.framework.plugin.api.UtReferenceModel
4242import org.utbot.framework.plugin.api.UtStatementCallModel
4343import org.utbot.framework.plugin.api.UtVoidModel
44+ import org.utbot.framework.plugin.api.util.booleanClassId
45+ import org.utbot.framework.plugin.api.util.booleanWrapperClassId
4446import org.utbot.framework.plugin.api.util.classClassId
4547import org.utbot.framework.plugin.api.util.defaultValueModel
4648import org.utbot.framework.plugin.api.util.jField
@@ -51,6 +53,8 @@ import org.utbot.framework.plugin.api.util.isArray
5153import org.utbot.framework.plugin.api.util.isEnum
5254import org.utbot.framework.plugin.api.util.isPrimitiveWrapperOrString
5355import org.utbot.framework.plugin.api.util.isStatic
56+ import org.utbot.framework.plugin.api.util.primitiveWrappers
57+ import org.utbot.framework.plugin.api.util.primitives
5458import org.utbot.framework.plugin.api.util.stringClassId
5559import org.utbot.framework.plugin.api.util.supertypeOfAnonymousClass
5660import org.utbot.framework.plugin.api.util.wrapperByPrimitive
@@ -171,12 +175,13 @@ open class CgVariableConstructor(val context: CgContext) :
171175
172176for ((fieldId, fieldModel)in model.fields) {
173177val variableForField= getOrCreateVariable(fieldModel)
174- setFieldValue(obj, fieldId, variableForField)
178+ if (! variableForField.hasDefaultValue())
179+ setFieldValue(obj, fieldId, variableForField)
175180 }
176181return obj
177182 }
178183
179- fun setFieldValue (obj : CgValue ,fieldId : FieldId ,variableForField : CgValue ){
184+ fun setFieldValue (obj : CgValue ,fieldId : FieldId ,valueForField : CgValue ) {
180185val field= fieldId.jField
181186val fieldFromVariableSpecifiedType= obj.type.findFieldByIdOrNull(fieldId)
182187
@@ -187,14 +192,27 @@ open class CgVariableConstructor(val context: CgContext) :
187192// branchRegisterRequest.byteBuffer = heapByteBuffer;
188193// byteBuffer is field of type ByteBuffer and upper line is incorrect
189194val canFieldBeDirectlySetByVariableAndFieldTypeRestrictions=
190- fieldFromVariableSpecifiedType!= null && fieldFromVariableSpecifiedType.type.id== variableForField .type
195+ fieldFromVariableSpecifiedType!= null && fieldFromVariableSpecifiedType.type.id== valueForField .type
191196if (canFieldBeDirectlySetByVariableAndFieldTypeRestrictions&& fieldId.canBeSetFrom(context, obj.type)) {
192197// TODO: check if it is correct to use declaringClass of a field here
193198val fieldAccess= if (field.isStatic)CgStaticFieldAccess (fieldId)else CgFieldAccess (obj, fieldId)
194- fieldAccess `= `variableForField
199+ fieldAccess `= `valueForField
195200 }else {
196201// 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)
202+ + utilsClassId[setField](obj, fieldId.declaringClass.name, fieldId.name, valueForField)
203+ }
204+ }
205+
206+ private fun CgValue.hasDefaultValue ():Boolean {
207+ if (this !is CgLiteral ) {
208+ return false ;
209+ }
210+
211+ return when {
212+ this .value== null -> true
213+ (this .type== booleanClassId|| this .type== booleanWrapperClassId)&& this .value== false -> true
214+ (this .typein primitives|| this .typein primitiveWrappers)&& this .value== 0 -> true
215+ else -> false
198216 }
199217 }
200218