@@ -36,20 +36,21 @@ import org.utbot.framework.plugin.api.hasDefaultValue
3636import org.utbot.framework.plugin.api.isMockModel
3737import org.utbot.framework.plugin.api.util.defaultValueModel
3838import org.utbot.framework.plugin.api.util.executableId
39+ import org.utbot.framework.plugin.api.util.isSubtypeOf
3940import org.utbot.framework.plugin.api.util.jClass
4041import org.utbot.framework.util.nextModelName
4142import java.lang.reflect.Constructor
4243import java.util.IdentityHashMap
4344
4445/* *
4546 * Creates [UtAssembleModel] from any [UtModel] or it's inner models if possible
46- * during generation test for [packageName ].
47+ tmp * during generation test for [basePackageName ].
4748 *
4849 * Needs utContext be set and Soot be initialized.
4950 *
5051 * Note: Caches class related information, can be reused if classes don't change.
5152 */
52- class AssembleModelGenerator (private val packageName : String ) {
53+ class AssembleModelGenerator (private val basePackageName : String ) {
5354
5455 // Instantiated models are stored to avoid cyclic references during reference graph analysis
5556 private val instantiatedModels: IdentityHashMap <UtModel , UtReferenceModel > =
@@ -100,8 +101,7 @@ class AssembleModelGenerator(private val packageName: String) {
100101 * Note: Two identity equal [UtModel]s are represented by one instance model.
101102 */
102103 fun createAssembleModels (models : List <UtModel >): IdentityHashMap <UtModel , UtModel > {
103- val allModelsAreLocatedInPackage = models.all { it.classId.packageName.startsWith(packageName)}
104- if (! UtSettings .useAssembleModelGenerator || ! allModelsAreLocatedInPackage) {
104+ if (! UtSettings .useAssembleModelGenerator) {
105105 return IdentityHashMap <UtModel , UtModel >().apply { models.forEach { put(it, it) } }
106106 }
107107
@@ -172,7 +172,7 @@ class AssembleModelGenerator(private val packageName: String) {
172172 private fun assembleModel (utModel : UtModel ): UtModel {
173173 val collectedCallChain = callChain.toMutableList()
174174
175- // we cannot create an assemble model for an anonymous class instance
175+ // We cannot create an assemble model for an anonymous class instance
176176 if (utModel.classId.isAnonymous) {
177177 return utModel
178178 }
@@ -257,7 +257,7 @@ class AssembleModelGenerator(private val packageName: String) {
257257 if (fieldId.isFinal) {
258258 throw AssembleException (" Final field $fieldId can't be set in an object of the class $classId " )
259259 }
260- if (! fieldId.type.isAccessibleFrom(packageName )) {
260+ if (! fieldId.type.isAccessibleFrom(basePackageName )) {
261261 throw AssembleException (
262262 " Field $fieldId can't be set in an object of the class $classId because its type is inaccessible"
263263 )
@@ -399,10 +399,10 @@ class AssembleModelGenerator(private val packageName: String) {
399399 }
400400
401401 private val ClassId .isVisible : Boolean
402- get() = this .isPublic || ! this .isPrivate && this .packageName.startsWith(this @AssembleModelGenerator.packageName )
402+ get() = this .isPublic || ! this .isPrivate && this .packageName.startsWith(basePackageName )
403403
404404 private val Constructor <* >.isVisible : Boolean
405- get() = this .isPublic || ! this .isPrivate && this .declaringClass.packageName.startsWith(packageName )
405+ get() = this .isPublic || ! this .isPrivate && this .declaringClass.packageName.startsWith(basePackageName )
406406
407407 /* *
408408 * Creates setter or direct setter call to set a field.
@@ -441,7 +441,7 @@ class AssembleModelGenerator(private val packageName: String) {
441441 * Finds setters and direct accessors for fields of particular class.
442442 */
443443 private fun findSettersAndDirectAccessors (classId : ClassId ): Map <FieldId , StatementId > {
444- val allModificatorsOfClass = modificatorsSearcher.findModificators(SettersAndDirectAccessors , classId )
444+ val allModificatorsOfClass = modificatorsSearcher.findModificators(SettersAndDirectAccessors )
445445
446446 return allModificatorsOfClass
447447 .mapNotNull { (fieldId, possibleModificators) ->
@@ -457,9 +457,12 @@ class AssembleModelGenerator(private val packageName: String) {
457457 */
458458 private fun chooseModificator (
459459 fieldId : FieldId ,
460- settersAndDirectAccessors : Set <StatementId >
460+ settersAndDirectAccessors : Set <StatementId >,
461461 ): StatementId ? {
462- val directAccessors = settersAndDirectAccessors.filterIsInstance<DirectFieldAccessId >()
462+ val directAccessors = settersAndDirectAccessors
463+ .filterIsInstance<DirectFieldAccessId >()
464+ .filter {it.fieldId.isAccessibleFrom(basePackageName) }
465+
463466 if (directAccessors.any()) {
464467 return directAccessors.singleOrNull()
465468 ? : throw AssembleException (
@@ -468,7 +471,9 @@ class AssembleModelGenerator(private val packageName: String) {
468471 }
469472
470473 if (settersAndDirectAccessors.any()) {
471- return settersAndDirectAccessors.singleOrNull()
474+ return settersAndDirectAccessors
475+ .filterIsInstance<ExecutableId >()
476+ .singleOrNull { it.isAccessibleFrom(basePackageName) }
472477 ? : throw AssembleException (
473478 " Field $fieldId has more than one setter: ${settersAndDirectAccessors.joinToString(" " )} "
474479 )
0 commit comments