Skip to content
Prev Previous commit
Next Next commit
Treat java-accessible fields as accessible properties in Kotlin
  • Loading branch information
volivan239 committed Sep 27, 2022
commit c8a84075be32645fd6770be6d5d5dab449810f2c
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,10 @@ import org.utbot.framework.plugin.api.util.voidClassId
*/
// TODO: change parameter from packageName: String to context: CgContext in ClassId.isAccessibleFrom and ExecutableId.isAccessibleFrom ?
internal infix fun FieldId.isAccessibleFrom(context: CgContext): Boolean {
if (!isStatic && context.codegenLanguage == CodegenLanguage.KOTLIN) {
if (context.codegenLanguage == CodegenLanguage.KOTLIN) {
// Here we call field accessible iff its getter is accessible, checks for setter are made in FieldId.canBeSetIn
return declaringClass.allMethods.contains(getter) && getter.isAccessibleFrom(context.testClassPackageName)
if (!isStatic && declaringClass.allMethods.contains(getter) && getter.isAccessibleFrom(context.testClassPackageName))
return true
}
val packageName = context.testClassPackageName
val isClassAccessible = declaringClass.isAccessibleFrom(packageName)
Expand All @@ -31,10 +32,17 @@ internal infix fun FieldId.isAccessibleFrom(context: CgContext): Boolean {
* Whether or not a field can be set without reflection
*/
internal fun FieldId.canBeSetIn(context: CgContext): Boolean {
if (!isStatic && context.codegenLanguage == CodegenLanguage.KOTLIN) {
return declaringClass.allMethods.contains(setter) && setter.isAccessibleFrom(context.testClassPackageName)
if (!isAccessibleFrom(context)) {
return false
}
return isAccessibleFrom(context) && !isFinal

if (context.codegenLanguage == CodegenLanguage.KOTLIN) {
if (!isStatic && declaringClass.allMethods.contains(setter) && setter.isAccessibleFrom(context.testClassPackageName)) {
return true
}
}

return !isFinal
}

/**
Expand Down