@@ -36,20 +36,21 @@ import org.utbot.framework.plugin.api.hasDefaultValue
36
36
import org.utbot.framework.plugin.api.isMockModel
37
37
import org.utbot.framework.plugin.api.util.defaultValueModel
38
38
import org.utbot.framework.plugin.api.util.executableId
39
+ import org.utbot.framework.plugin.api.util.isSubtypeOf
39
40
import org.utbot.framework.plugin.api.util.jClass
40
41
import org.utbot.framework.util.nextModelName
41
42
import java.lang.reflect.Constructor
42
43
import java.util.IdentityHashMap
43
44
44
45
/* *
45
46
* 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 ].
47
48
*
48
49
* Needs utContext be set and Soot be initialized.
49
50
*
50
51
* Note: Caches class related information, can be reused if classes don't change.
51
52
*/
52
- class AssembleModelGenerator (private val packageName : String ) {
53
+ class AssembleModelGenerator (private val basePackageName : String ) {
53
54
54
55
// Instantiated models are stored to avoid cyclic references during reference graph analysis
55
56
private val instantiatedModels: IdentityHashMap <UtModel , UtReferenceModel > =
@@ -100,8 +101,7 @@ class AssembleModelGenerator(private val packageName: String) {
100
101
* Note: Two identity equal [UtModel]s are represented by one instance model.
101
102
*/
102
103
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) {
105
105
return IdentityHashMap <UtModel , UtModel >().apply { models.forEach { put(it, it) } }
106
106
}
107
107
@@ -172,7 +172,7 @@ class AssembleModelGenerator(private val packageName: String) {
172
172
private fun assembleModel (utModel : UtModel ): UtModel {
173
173
val collectedCallChain = callChain.toMutableList()
174
174
175
- // we cannot create an assemble model for an anonymous class instance
175
+ // We cannot create an assemble model for an anonymous class instance
176
176
if (utModel.classId.isAnonymous) {
177
177
return utModel
178
178
}
@@ -257,7 +257,7 @@ class AssembleModelGenerator(private val packageName: String) {
257
257
if (fieldId.isFinal) {
258
258
throw AssembleException (" Final field $fieldId can't be set in an object of the class $classId " )
259
259
}
260
- if (! fieldId.type.isAccessibleFrom(packageName )) {
260
+ if (! fieldId.type.isAccessibleFrom(basePackageName )) {
261
261
throw AssembleException (
262
262
" Field $fieldId can't be set in an object of the class $classId because its type is inaccessible"
263
263
)
@@ -399,10 +399,10 @@ class AssembleModelGenerator(private val packageName: String) {
399
399
}
400
400
401
401
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 )
403
403
404
404
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 )
406
406
407
407
/* *
408
408
* Creates setter or direct setter call to set a field.
@@ -441,7 +441,7 @@ class AssembleModelGenerator(private val packageName: String) {
441
441
* Finds setters and direct accessors for fields of particular class.
442
442
*/
443
443
private fun findSettersAndDirectAccessors (classId : ClassId ): Map <FieldId , StatementId > {
444
- val allModificatorsOfClass = modificatorsSearcher.findModificators(SettersAndDirectAccessors , classId )
444
+ val allModificatorsOfClass = modificatorsSearcher.findModificators(SettersAndDirectAccessors )
445
445
446
446
return allModificatorsOfClass
447
447
.mapNotNull { (fieldId, possibleModificators) ->
@@ -457,9 +457,12 @@ class AssembleModelGenerator(private val packageName: String) {
457
457
*/
458
458
private fun chooseModificator (
459
459
fieldId : FieldId ,
460
- settersAndDirectAccessors : Set <StatementId >
460
+ settersAndDirectAccessors : Set <StatementId >,
461
461
): StatementId ? {
462
- val directAccessors = settersAndDirectAccessors.filterIsInstance<DirectFieldAccessId >()
462
+ val directAccessors = settersAndDirectAccessors
463
+ .filterIsInstance<DirectFieldAccessId >()
464
+ .filter {it.fieldId.isAccessibleFrom(basePackageName) }
465
+
463
466
if (directAccessors.any()) {
464
467
return directAccessors.singleOrNull()
465
468
? : throw AssembleException (
@@ -468,7 +471,9 @@ class AssembleModelGenerator(private val packageName: String) {
468
471
}
469
472
470
473
if (settersAndDirectAccessors.any()) {
471
- return settersAndDirectAccessors.singleOrNull()
474
+ return settersAndDirectAccessors
475
+ .filterIsInstance<ExecutableId >()
476
+ .singleOrNull { it.isAccessibleFrom(basePackageName) }
472
477
? : throw AssembleException (
473
478
" Field $fieldId has more than one setter: ${settersAndDirectAccessors.joinToString(" " )} "
474
479
)
0 commit comments