1
1
package org.utbot.fuzzing.providers
2
2
3
3
import mu.KotlinLogging
4
+ import org.utbot.common.isStatic
4
5
import org.utbot.framework.UtSettings
5
6
import org.utbot.framework.plugin.api.*
6
7
import org.utbot.framework.plugin.api.util.*
@@ -47,32 +48,31 @@ class ObjectValueProvider(
47
48
type : FuzzedType
48
49
) = sequence {
49
50
val classId = type.classId
50
- val constructors = classId.allConstructors
51
- .filter {
52
- isAccessible(it.constructor , description.description.packageName)
53
- }
54
- constructors.forEach { constructorId ->
55
- yield (createValue(classId, constructorId, description))
51
+ findAccessibleCreators(description, classId).forEach { creatorExecutableId ->
52
+ yield (createValue(classId, creatorExecutableId, description))
56
53
}
57
54
}
58
55
59
- private fun createValue (classId : ClassId , constructorId : ConstructorId , description : FuzzedDescription ): Seed .Recursive <FuzzedType , FuzzedValue > {
56
+ private fun createValue (classId : ClassId , creatorExecutableId : ExecutableId , description : FuzzedDescription ): Seed .Recursive <FuzzedType , FuzzedValue > {
60
57
return Seed .Recursive (
61
- construct = Routine .Create (constructorId .executable.genericParameterTypes.map {
58
+ construct = Routine .Create (creatorExecutableId .executable.genericParameterTypes.map {
62
59
toFuzzerType(it, description.typeCache)
63
60
}) { values ->
64
61
val id = idGenerator.createId()
65
62
UtAssembleModel (
66
63
id = id,
67
64
classId = classId,
68
- modelName = " ${constructorId .classId.name}${constructorId.parameters } #" + id.hex(),
65
+ modelName = " ${creatorExecutableId .classId.name} . ${creatorExecutableId.signature } #" + id.hex(),
69
66
instantiationCall = UtExecutableCallModel (
70
67
null ,
71
- constructorId ,
68
+ creatorExecutableId ,
72
69
values.map { it.model }),
73
70
modificationsChainProvider = { mutableListOf () }
74
71
).fuzzed {
75
- summary = " %var% = ${classId.simpleName} (${constructorId.parameters.joinToString { it.simpleName }} )"
72
+ summary = " %var% = ${when (creatorExecutableId) {
73
+ is ConstructorId -> classId.simpleName
74
+ is MethodId -> creatorExecutableId.simpleNameWithClass
75
+ }} (${creatorExecutableId.parameters.joinToString { it.simpleName }} )"
76
76
}
77
77
},
78
78
modify = sequence {
@@ -164,7 +164,7 @@ class AbstractsObjectValueProvider(
164
164
}
165
165
val jClass = sc.id.jClass
166
166
return isAccessible(jClass, description.description.packageName) &&
167
- jClass.declaredConstructors.any { isAccessible(it, description.description.packageName) }
167
+ findAccessibleCreators(description, jClass.id).any()
168
168
} catch (ignore: Throwable ) {
169
169
return false
170
170
}
@@ -186,6 +186,12 @@ class AbstractsObjectValueProvider(
186
186
}
187
187
}
188
188
189
+ private fun findAccessibleCreators (description : FuzzedDescription , classId : ClassId ): Sequence <ExecutableId > =
190
+ (classId.allConstructors + (classId.jClass.methods
191
+ .filter { it.isStatic && it.returnType.id.isSubtypeOf(classId) }
192
+ .map { it.executableId })
193
+ ).filter { isAccessible(it.executable, description.description.packageName) }
194
+
189
195
internal class PublicSetterGetter (
190
196
val setter : Method ,
191
197
val getter : Method ,
0 commit comments