From a7adac384bef6964f85ce3baa23b5ead549e0fcc Mon Sep 17 00:00:00 2001 From: Ivan Volkov Date: Fri, 19 Aug 2022 13:06:24 +0300 Subject: [PATCH 1/2] corrected ClassId.isAccessibleFrom behavior on arrays #743 --- .../org/utbot/framework/codegen/model/util/ClassIdUtil.kt | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt index 6203ed01c7..16375b9e14 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt @@ -2,6 +2,7 @@ package org.utbot.framework.codegen.model.util import org.utbot.framework.plugin.api.ClassId import org.utbot.framework.plugin.api.util.id +import org.utbot.framework.plugin.api.util.isArray /** * For now we will count class accessible if it is: @@ -13,13 +14,16 @@ import org.utbot.framework.plugin.api.util.id * @param packageName name of the package we check accessibility from */ infix fun ClassId.isAccessibleFrom(packageName: String): Boolean { + val isContainedElementsClassAccessible = elementClassId?.isAccessibleFrom(packageName) ?: true + + // TODO: isNested checks that jClass.enclosingClass != null, outerClass returns jClass.enclosingClass, maybe simplify this? val isOuterClassAccessible = if (isNested) { outerClass!!.id.isAccessibleFrom(packageName) } else { true } - val isAccessibleFromPackageByModifiers = isPublic || (this.packageName == packageName && (isPackagePrivate || isProtected)) + val isAccessibleFromPackageByModifiers = isArray || isPublic || (this.packageName == packageName && (isPackagePrivate || isProtected)) - return isOuterClassAccessible && isAccessibleFromPackageByModifiers && !isLocal && !isSynthetic + return isContainedElementsClassAccessible && isOuterClassAccessible && isAccessibleFromPackageByModifiers && !isLocal && !isSynthetic } \ No newline at end of file From d79405eefafa7533f80f607fe42dc74798d6f7f2 Mon Sep 17 00:00:00 2001 From: Egor Kulikov Date: Mon, 22 Aug 2022 17:41:19 +0300 Subject: [PATCH 2/2] Attempts to improve ClassIdUtil --- .../codegen/model/util/ClassIdUtil.kt | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt index 16375b9e14..54bbbf53f1 100644 --- a/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt +++ b/utbot-framework/src/main/kotlin/org/utbot/framework/codegen/model/util/ClassIdUtil.kt @@ -14,16 +14,19 @@ import org.utbot.framework.plugin.api.util.isArray * @param packageName name of the package we check accessibility from */ infix fun ClassId.isAccessibleFrom(packageName: String): Boolean { - val isContainedElementsClassAccessible = elementClassId?.isAccessibleFrom(packageName) ?: true - // TODO: isNested checks that jClass.enclosingClass != null, outerClass returns jClass.enclosingClass, maybe simplify this? - val isOuterClassAccessible = if (isNested) { - outerClass!!.id.isAccessibleFrom(packageName) - } else { - true + if (this.isLocal || this.isSynthetic) { + return false } - val isAccessibleFromPackageByModifiers = isArray || isPublic || (this.packageName == packageName && (isPackagePrivate || isProtected)) + val outerClassId = outerClass?.id + if (outerClassId != null && !outerClassId.isAccessibleFrom(packageName)) { + return false + } - return isContainedElementsClassAccessible && isOuterClassAccessible && isAccessibleFromPackageByModifiers && !isLocal && !isSynthetic + return if (this.isArray) { + elementClassId!!.isAccessibleFrom(packageName) + } else { + isPublic || (this.packageName == packageName && (isPackagePrivate || isProtected)) + } } \ No newline at end of file