Skip to content

Commit 8c75cac

Browse files
committed
tmp
1 parent d3974e9 commit 8c75cac

File tree

3 files changed

+15
-42
lines changed

3 files changed

+15
-42
lines changed

utbot-framework-test/src/test/kotlin/org/utbot/framework/modificators/UtBotFieldModificatorsTest.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ internal class UtBotFieldModificatorsTest {
192192

193193
//We use sorting here to make comparing with sorted in advance expected collections easier
194194
private fun runFieldModificatorsSearch(analysisMode: AnalysisMode) =
195-
fieldsModificatorsSearcher.findModificators(analysisMode, null)
195+
fieldsModificatorsSearcher.findModificators(analysisMode)
196196
.map { (key, value) ->
197197
val modificatorNames = value.filterNot { it.name.startsWith("direct_set_") }.map { it.name }
198198
key.name to modificatorNames.toSortedSet()

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

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ import org.utbot.framework.plugin.api.hasDefaultValue
3636
import org.utbot.framework.plugin.api.isMockModel
3737
import org.utbot.framework.plugin.api.util.defaultValueModel
3838
import org.utbot.framework.plugin.api.util.executableId
39+
import org.utbot.framework.plugin.api.util.isSubtypeOf
3940
import org.utbot.framework.plugin.api.util.jClass
4041
import org.utbot.framework.util.nextModelName
4142
import java.lang.reflect.Constructor
@@ -440,11 +441,11 @@ class AssembleModelGenerator(private val basePackageName: String) {
440441
* Finds setters and direct accessors for fields of particular class.
441442
*/
442443
private fun findSettersAndDirectAccessors(classId: ClassId): Map<FieldId, StatementId> {
443-
val allModificatorsOfClass = modificatorsSearcher.findModificators(SettersAndDirectAccessors, classId)
444+
val allModificatorsOfClass = modificatorsSearcher.findModificators(SettersAndDirectAccessors)
444445

445446
return allModificatorsOfClass
446447
.mapNotNull { (fieldId, possibleModificators) ->
447-
chooseModificator(fieldId, possibleModificators)?.let { fieldId to it }
448+
chooseModificator(fieldId, possibleModificators, classId)?.let { fieldId to it }
448449
}
449450
.toMap()
450451
}
@@ -456,9 +457,17 @@ class AssembleModelGenerator(private val basePackageName: String) {
456457
*/
457458
private fun chooseModificator(
458459
fieldId: FieldId,
459-
settersAndDirectAccessors: Set<StatementId>
460+
settersAndDirectAccessors: Set<StatementId>,
461+
acceptorClassId: ClassId
460462
): StatementId? {
461-
val directAccessors = settersAndDirectAccessors.filterIsInstance<DirectFieldAccessId>()
463+
val directAccessors = settersAndDirectAccessors
464+
.filterIsInstance<DirectFieldAccessId>()
465+
.filter {
466+
it.fieldId.isPublic ||
467+
it.fieldId.isPackagePrivate && it.fieldId.declaringClass.packageName == basePackageName ||
468+
it.fieldId.isProtected && (it.fieldId.declaringClass.packageName == basePackageName || acceptorClassId.isSubtypeOf(it.fieldId.declaringClass))
469+
}
470+
462471
if (directAccessors.any()) {
463472
return directAccessors.singleOrNull()
464473
?: throw AssembleException(

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

Lines changed: 1 addition & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -14,43 +14,7 @@ class UtBotFieldsModificatorsSearcher {
1414

1515
fun delete(classIds: Set<ClassId>) = statementsStorage.delete(classIds)
1616

17-
/**
18-
* Finds field modificators.
19-
*
20-
* @param analysisMode represents which type of modificators (e.g. setters) are considered.
21-
* @param methodUnderTest describes an analyzed method an it's location.
22-
*/
23-
fun findModificators(analysisMode: AnalysisMode, classUnderTest: ClassId? = null): Map<FieldId, Set<StatementId>> {
24-
val modificators = findModificators(analysisMode)
25-
26-
if (classUnderTest == null) {
27-
return modificators
28-
}
29-
30-
val filteredModifications = mutableMapOf<FieldId, Set<StatementId>>()
31-
for ((fieldId, statements) in modificators) {
32-
val filteredStmts = statements.filter { stmt -> fieldId.isAccessibleBy(stmt, classUnderTest!!) }
33-
filteredModifications[fieldId] = filteredStmts.toSet()
34-
}
35-
36-
return filteredModifications
37-
}
38-
39-
/**
40-
* Verifies that this field is accessible with [statementId] from the location of [methodUnderTest].
41-
*/
42-
private fun FieldId.isAccessibleBy(statementId: StatementId, classUnderTest: ClassId): Boolean {
43-
val basePackageName = classUnderTest.packageName
44-
val classPackageName = statementId.classId.packageName
45-
46-
if (this.isPublic) return true
47-
if (this.isProtected) return classPackageName == basePackageName || statementId.classId.isSubtypeOf(classUnderTest)
48-
if (this.isPackagePrivate) return classPackageName == basePackageName
49-
if (this.isPrivate) return classUnderTest == statementId.classId
50-
return error("Unexpected modifier for field $this")
51-
}
52-
53-
private fun findModificators(analysisMode: AnalysisMode): Map<FieldId, Set<StatementId>> {
17+
fun findModificators(analysisMode: AnalysisMode): Map<FieldId, Set<StatementId>> {
5418
statementsStorage.updateCaches()
5519
return findModificatorsInCache(analysisMode)
5620
}

0 commit comments

Comments
 (0)