@@ -67,7 +67,7 @@ class ObjectModelProvider : ModelProvider {
6767 .filterNot { it == stringClassId || it.isPrimitiveWrapper }
6868 .flatMap { classId ->
6969 collectConstructors(classId) { javaConstructor ->
70- isPublic(javaConstructor)
70+ isPublic(javaConstructor) || isPackagePrivateAndSameMethodPackage(javaConstructor, description)
7171 }.sortedWith(
7272 primitiveParameterizedConstructorsFirstAndThenByParameterCount
7373 ).take(limit)
@@ -81,7 +81,7 @@ class ObjectModelProvider : ModelProvider {
8181 .flatMap { (constructorId, fuzzedParameters) ->
8282 if (constructorId.parameters.isEmpty()) {
8383 sequenceOf(assembleModel(idGenerator.asInt, constructorId, emptyList())) +
84- generateModelsWithFieldsInitialization(constructorId, concreteValues)
84+ generateModelsWithFieldsInitialization(constructorId, description, concreteValues)
8585 }
8686 else {
8787 fuzzedParameters.map { params ->
@@ -98,8 +98,8 @@ class ObjectModelProvider : ModelProvider {
9898 }
9999 }
100100
101- private fun generateModelsWithFieldsInitialization (constructorId : ConstructorId , concreteValues : Collection <FuzzedConcreteValue >): Sequence <FuzzedValue > {
102- val fields = findSuitableFields(constructorId.classId)
101+ private fun generateModelsWithFieldsInitialization (constructorId : ConstructorId , description : FuzzedMethodDescription , concreteValues : Collection <FuzzedConcreteValue >): Sequence <FuzzedValue > {
102+ val fields = findSuitableFields(constructorId.classId, description )
103103 val syntheticClassFieldsSetterMethodDescription = FuzzedMethodDescription (
104104 " ${constructorId.classId.simpleName} <syntheticClassFieldSetter>" ,
105105 voidClassId,
@@ -115,16 +115,16 @@ class ObjectModelProvider : ModelProvider {
115115 fieldValues.asSequence().mapIndexedNotNull { index, value ->
116116 val field = fields[index]
117117 when {
118- field.setter != null -> UtExecutableCallModel (
119- fuzzedModel.model,
120- MethodId (constructorId.classId, field.setter.name, field.setter.returnType.id, listOf (field.classId)),
121- listOf (value.model)
122- )
123118 field.canBeSetDirectly -> UtDirectSetFieldModel (
124119 fuzzedModel.model,
125120 FieldId (constructorId.classId, field.name),
126121 value.model
127122 )
123+ field.setter != null -> UtExecutableCallModel (
124+ fuzzedModel.model,
125+ MethodId (constructorId.classId, field.setter.name, field.setter.returnType.id, listOf (field.classId)),
126+ listOf (value.model)
127+ )
128128 else -> null
129129 }
130130 }.forEach(modificationChain::add)
@@ -145,6 +145,14 @@ class ObjectModelProvider : ModelProvider {
145145 return javaConstructor.modifiers and Modifier .PUBLIC != 0
146146 }
147147
148+ private fun isPackagePrivateAndSameMethodPackage (javaConstructor : Constructor <* >, description : FuzzedMethodDescription ): Boolean {
149+ return javaConstructor.modifiers == 0 && javaConstructor.declaringClass.`package`.name == description.packageName
150+ }
151+
152+ private fun isPackagePrivateAndSameMethodPackage (field : Field , description : FuzzedMethodDescription ): Boolean {
153+ return field.modifiers == 0 && field.declaringClass.`package`.name == description.packageName
154+ }
155+
148156 private fun FuzzedMethodDescription.fuzzParameters (constructorId : ConstructorId , vararg modelProviders : ModelProvider ): Sequence <List <FuzzedValue >> {
149157 val fuzzedMethod = FuzzedMethodDescription (
150158 executableId = constructorId,
@@ -168,13 +176,13 @@ class ObjectModelProvider : ModelProvider {
168176 }
169177 }
170178
171- private fun findSuitableFields (classId : ClassId ): List <FieldDescription > {
179+ private fun findSuitableFields (classId : ClassId , description : FuzzedMethodDescription ): List <FieldDescription > {
172180 val jClass = classId.jClass
173181 return jClass.declaredFields.map { field ->
174182 FieldDescription (
175183 field.name,
176184 field.type.id,
177- field.isPublic && ! field.isFinal && ! field.isStatic,
185+ ( field.isPublic || isPackagePrivateAndSameMethodPackage(field, description)) && ! field.isFinal && ! field.isStatic,
178186 jClass.findPublicSetterIfHasPublicGetter(field)
179187 )
180188 }
0 commit comments