From 226782f8a3fb9a806808bac1ce00d75c540feb4f Mon Sep 17 00:00:00 2001 From: Kamenev Yury Date: Wed, 5 Oct 2022 21:52:13 +0800 Subject: [PATCH 1/3] Fixed UtLambdaModel caching --- .../kotlin/org/utbot/framework/plugin/api/Api.kt | 15 +++++++++++++++ .../src/main/kotlin/org/utbot/engine/Resolver.kt | 5 ++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/Api.kt b/utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/Api.kt index 491e87cb1b..5ceb4aa28e 100644 --- a/utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/Api.kt +++ b/utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/Api.kt @@ -569,6 +569,21 @@ 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 { + return id ?: 0 + } } /** diff --git a/utbot-framework/src/main/kotlin/org/utbot/engine/Resolver.kt b/utbot-framework/src/main/kotlin/org/utbot/engine/Resolver.kt index af7450b98d..50f2c3f6fe 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/engine/Resolver.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/engine/Resolver.kt @@ -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 { From 071fb38d27401467dde9e8ef2577c6ab36aa8702 Mon Sep 17 00:00:00 2001 From: Kamenev Yury Date: Wed, 5 Oct 2022 21:52:38 +0800 Subject: [PATCH 2/3] Fixed NPE in super class name for Object in resolver --- utbot-framework/src/main/kotlin/org/utbot/engine/Resolver.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/utbot-framework/src/main/kotlin/org/utbot/engine/Resolver.kt b/utbot-framework/src/main/kotlin/org/utbot/engine/Resolver.kt index 50f2c3f6fe..7d4fc70163 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/engine/Resolver.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/engine/Resolver.kt @@ -1139,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 } } From 772f9c14d8e68adac72be0aa9f4c7208139f909c Mon Sep 17 00:00:00 2001 From: Yury Kamenev Date: Tue, 18 Oct 2022 10:18:37 +0800 Subject: [PATCH 3/3] Fixed rebase errors and review issues --- .../org/utbot/framework/plugin/api/Api.kt | 18 +++++-------- .../framework/process/OpenModulesContainer.kt | 27 +++++++++++++++++++ 2 files changed, 33 insertions(+), 12 deletions(-) diff --git a/utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/Api.kt b/utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/Api.kt index 5ceb4aa28e..b50e0ff4fd 100644 --- a/utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/Api.kt +++ b/utbot-framework-api/src/main/kotlin/org/utbot/framework/plugin/api/Api.kt @@ -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) { @@ -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) { @@ -455,9 +455,7 @@ data class UtArrayModel( return true } - override fun hashCode(): Int { - return id - } + override fun hashCode(): Int = id } /** @@ -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 } /** @@ -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, @@ -581,9 +577,7 @@ class UtLambdaModel( return true } - override fun hashCode(): Int { - return id ?: 0 - } + override fun hashCode(): Int = id } /** diff --git a/utbot-framework-api/src/main/kotlin/org/utbot/framework/process/OpenModulesContainer.kt b/utbot-framework-api/src/main/kotlin/org/utbot/framework/process/OpenModulesContainer.kt index fb53e2fd10..650e7d40c4 100644 --- a/utbot-framework-api/src/main/kotlin/org/utbot/framework/process/OpenModulesContainer.kt +++ b/utbot-framework-api/src/main/kotlin/org/utbot/framework/process/OpenModulesContainer.kt @@ -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") } }