Skip to content

Commit 512e6da

Browse files
committed
Further corrections
1 parent 4928997 commit 512e6da

File tree

3 files changed

+16
-15
lines changed

3 files changed

+16
-15
lines changed

utbot-framework-test/src/test/kotlin/org/utbot/framework/assemble/AssembleModelGeneratorTests.kt

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ class AssembleModelGeneratorTests {
411411
val baseClassId = PrimitiveFields::class.id
412412

413413
val thisFields = fields(inheritedFieldClassId, "i" to 5, "d" to 3.0)
414-
val baseFields = fields(baseClassId, "a" to 2, "b" to 4)
414+
val baseFields = fields(baseClassId, "b" to 4)
415415

416416
val compositeModel = UtCompositeModel(
417417
modelIdCounter.incrementAndGet(),
@@ -423,7 +423,6 @@ class AssembleModelGeneratorTests {
423423
val v1 = statementsChain.addExpectedVariableDecl<InheritedField>()
424424
statementsChain.add("$v1." + ("i" `=` 5))
425425
statementsChain.add("$v1." + ("d" `=` 3.0))
426-
statementsChain.add("$v1." + addExpectedSetter("a", 2))
427426
statementsChain.add("$v1." + ("b" `=` 4))
428427

429428
val expectedRepresentation = printExpectedModel(inheritedFieldClassId.simpleName, v1, statementsChain)

utbot-framework/src/main/kotlin/org/utbot/framework/assemble/AssembleModelGenerator.kt

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -43,13 +43,13 @@ import java.util.IdentityHashMap
4343

4444
/**
4545
* Creates [UtAssembleModel] from any [UtModel] or it's inner models if possible
46-
* during generation test for [methodPackageName].
46+
* during generation test for [packageName].
4747
*
4848
* Needs utContext be set and Soot be initialized.
4949
*
5050
* Note: Caches class related information, can be reused if classes don't change.
5151
*/
52-
class AssembleModelGenerator(private val methodPackageName: String) {
52+
class AssembleModelGenerator(private val packageName: String) {
5353

5454
//Instantiated models are stored to avoid cyclic references during reference graph analysis
5555
private val instantiatedModels: IdentityHashMap<UtModel, UtReferenceModel> =
@@ -100,7 +100,7 @@ class AssembleModelGenerator(private val methodPackageName: String) {
100100
* Note: Two identity equal [UtModel]s are represented by one instance model.
101101
*/
102102
fun createAssembleModels(models: List<UtModel>): IdentityHashMap<UtModel, UtModel> {
103-
val allModelsAreLocatedInPackage = models.all { it.classId.packageName.startsWith(methodPackageName)}
103+
val allModelsAreLocatedInPackage = models.all { it.classId.packageName.startsWith(packageName)}
104104
if (!UtSettings.useAssembleModelGenerator || !allModelsAreLocatedInPackage) {
105105
return IdentityHashMap<UtModel, UtModel>().apply { models.forEach { put(it, it) } }
106106
}
@@ -257,7 +257,7 @@ class AssembleModelGenerator(private val methodPackageName: 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(methodPackageName)) {
260+
if (!fieldId.type.isAccessibleFrom(packageName)) {
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 methodPackageName: String) {
399399
}
400400

401401
private val ClassId.isVisible : Boolean
402-
get() = this.isPublic || !this.isPrivate && this.packageName.startsWith(methodPackageName)
402+
get() = this.isPublic || !this.isPrivate && this.packageName.startsWith(this@AssembleModelGenerator.packageName)
403403

404404
private val Constructor<*>.isVisible : Boolean
405-
get() = this.isPublic || !this.isPrivate && this.declaringClass.packageName.startsWith(methodPackageName)
405+
get() = this.isPublic || !this.isPrivate && this.declaringClass.packageName.startsWith(packageName)
406406

407407
/**
408408
* Creates setter or direct setter call to set a field.
@@ -416,7 +416,7 @@ class AssembleModelGenerator(private val methodPackageName: String) {
416416
): UtStatementModel {
417417
val declaringClassId = fieldId.declaringClass
418418

419-
val modifiers = getOrFindSettersAndDirectAccessors(declaringClassId)
419+
val modifiers = getOrFindSettersAndDirectAccessors(instance.classId)
420420
val modifier = modifiers[fieldId]
421421
?: throw AssembleException("No setter for field ${fieldId.name} of class ${declaringClassId.name}")
422422

@@ -441,9 +441,7 @@ class AssembleModelGenerator(private val methodPackageName: 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
445-
.findModificators(SettersAndDirectAccessors, classId)
446-
.map { it.key to it.value.filter { st -> st.classId == classId } }
444+
val allModificatorsOfClass = modificatorsSearcher.findModificators(SettersAndDirectAccessors, classId)
447445

448446
return allModificatorsOfClass
449447
.mapNotNull { (fieldId, possibleModificators) ->
@@ -459,7 +457,7 @@ class AssembleModelGenerator(private val methodPackageName: String) {
459457
*/
460458
private fun chooseModificator(
461459
fieldId: FieldId,
462-
settersAndDirectAccessors: List<StatementId>
460+
settersAndDirectAccessors: Set<StatementId>
463461
): StatementId? {
464462
val directAccessors = settersAndDirectAccessors.filterIsInstance<DirectFieldAccessId>()
465463
if (directAccessors.any()) {

utbot-framework/src/main/kotlin/org/utbot/framework/modifications/DirectAccessorsAnalyzer.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,15 @@ class DirectAccessorsAnalyzer {
2525
* Collect all fields with different non-private modifiers from class [classId].
2626
*/
2727
private fun collectFieldsInPackage(classId: ClassId): Set<FieldId> {
28-
val clazz = classId.jClass
28+
var clazz = classId.jClass
2929

3030
val fieldIds = mutableSetOf<Field>()
31-
fieldIds += clazz.fields
3231
fieldIds += clazz.declaredFields.filterNot { Modifier.isPrivate(it.modifiers) }
32+
while (clazz.superclass != null) {
33+
clazz = clazz.superclass
34+
fieldIds += clazz.declaredFields.filter { Modifier.isPublic(it.modifiers) || Modifier.isProtected(it.modifiers) }
35+
}
36+
3337

3438
return fieldIds.map { it.fieldId }.toSet()
3539
}

0 commit comments

Comments
 (0)