Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ object UtVoidModel : UtModel(voidClassId)
* Model for enum constant
*/
data class UtEnumConstantModel(
override val id: Int?,
override val id: Int,
override val classId: ClassId,
val value: Enum<*>
) : UtReferenceModel(id, classId) {
Expand All @@ -351,7 +351,7 @@ data class UtEnumConstantModel(
* Model for class reference
*/
data class UtClassRefModel(
override val id: Int?,
override val id: Int,
override val classId: ClassId,
val value: Class<*>
) : UtReferenceModel(id, classId) {
Expand Down Expand Up @@ -455,9 +455,7 @@ data class UtArrayModel(
return true
}

override fun hashCode(): Int {
return id
}
override fun hashCode(): Int = id
}

/**
Expand Down Expand Up @@ -524,9 +522,7 @@ data class UtAssembleModel private constructor(
return id == other.id
}

override fun hashCode(): Int {
return id ?: 0
}
override fun hashCode(): Int = id ?: 0
}

/**
Expand Down Expand Up @@ -554,7 +550,7 @@ data class UtAssembleModel private constructor(
*/
// TODO: what about support for Kotlin lambdas and function types? See https://github.com/UnitTestBot/UTBotJava/issues/852
class UtLambdaModel(
override val id: Int?,
override val id: Int,
val samType: ClassId,
val declaringClass: ClassId,
val lambdaName: String,
Expand All @@ -569,6 +565,19 @@ class UtLambdaModel(
?: error("More than one method with name $lambdaName found in class: ${declaringClass.canonicalName}")

override fun toString(): String = "Anonymous function $lambdaName implementing functional interface $declaringClass"

override fun equals(other: Any?): Boolean {
if (this === other) return true
if (javaClass != other?.javaClass) return false

other as UtLambdaModel

if (id != other.id) return false

return true
}

override fun hashCode(): Int = id
}

/**
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,33 @@ object OpenModulesContainer {
openPackage("java.base", "java.lang")
openPackage("java.base", "java.lang.reflect")
openPackage("java.base", "sun.security.provider")
openPackage("java.base", "jdk.internal.event")
openPackage("java.base", "jdk.internal.jimage")
openPackage("java.base", "jdk.internal.jimage.decompressor")
openPackage("java.base", "jdk.internal.jmod")
openPackage("java.base", "jdk.internal.jtrfs")
openPackage("java.base", "jdk.internal.loader")
openPackage("java.base", "jdk.internal.logger")
openPackage("java.base", "jdk.internal.math")
openPackage("java.base", "jdk.internal.misc")
openPackage("java.base", "jdk.internal.module")
openPackage("java.base", "jdk.internal.org.objectweb.asm.commons")
openPackage("java.base", "jdk.internal.org.objectweb.asm.signature")
openPackage("java.base", "jdk.internal.org.objectweb.asm.tree")
openPackage("java.base", "jdk.internal.org.objectweb.asm.tree.analysis")
openPackage("java.base", "jdk.internal.org.objectweb.asm.util")
openPackage("java.base", "jdk.internal.org.xml.sax")
openPackage("java.base", "jdk.internal.org.xml.sax.helpers")
openPackage("java.base", "jdk.internal.perf")
openPackage("java.base", "jdk.internal.platform")
openPackage("java.base", "jdk.internal.ref")
openPackage("java.base", "jdk.internal.reflect")
openPackage("java.base", "jdk.internal.util")
openPackage("java.base", "jdk.internal.util.jar")
openPackage("java.base", "jdk.internal.util.xml")
openPackage("java.base", "jdk.internal.util.xml.impl")
openPackage("java.base", "jdk.internal.vm")
openPackage("java.base", "jdk.internal.vm.annotation")
add("--illegal-access=warn")
}
}
Expand Down
10 changes: 7 additions & 3 deletions utbot-framework/src/main/kotlin/org/utbot/engine/Resolver.kt
Original file line number Diff line number Diff line change
Expand Up @@ -662,12 +662,15 @@ class Resolver(
builder.toString()
}

return UtLambdaModel(
val lambdaModel = UtLambdaModel(
id = addr,
samType = samType,
declaringClass = declaringClass.id,
lambdaName = lambdaName
)
addConstructedModel(addr, lambdaModel)

return lambdaModel
}

private fun constructEnum(addr: Address, type: RefType, clazz: Class<*>): UtEnumConstantModel {
Expand Down Expand Up @@ -1136,12 +1139,13 @@ fun Traverser.toMethodResult(value: Any?, sootType: Type): MethodResult {
else -> {
workaround(RUN_CONCRETE) {
val className = value.javaClass.id.name
val superclassName = value.javaClass.superclass.name
val superClass = value.javaClass.superclass

val refTypeName = when {
// hardcoded string is used cause class is not public
className in typesOfObjectsToRecreate -> className
superclassName == PrintStream::class.qualifiedName -> superclassName
// superClass is null for Object class
superClass != null && superClass.name == PrintStream::class.qualifiedName -> superClass.name
// we want to generate an unbounded symbolic variable for every unknown class as well
else -> workaround(MAKE_SYMBOLIC) { className }
}
Expand Down