Я пытаюсь создать новое правило для проекта детект . Для этого мне необходимо знать точный тип свойства Kotlin. Например, val x: Int
имеет тип Int
.
К сожалению, для свойства типа private val a = 3
я получаю следующее:
property.typeReference
is null
property.typeParameters
пусто property.typeConstraints
пусто property.typeParameterList
пусто property.text
равно private val a = 3
property.node.children().joinToString()
имеет объектную нотацию предыдущего элемента property.delegate
равно нулю property.getType(bindingContext)
равно нулю (свойство bindingContext
является частью KtTreeVisitorVoid
использовано
Вопрос : как я могу получить имя типа (или, что лучше, объект KClass
) для сравнения фактического типа свойства с типом Boolean
класса? (Например, мне просто нужно получить если свойство boolean равно not)
Код:
override fun visitProperty(property: org.jetbrains.kotlin.psi.KtProperty) {
val type: String = ??? //property.typeReference?.text - doesn't work
if(property.identifierName().startsWith("is") && type != "Boolean") {
report(CodeSmell(
issue,
Entity.from(property),
message = "Non-boolean properties shouldn't start with 'is' prefix. Actual type: $type")
)
}
}