我正在尝试为detekt project创建新规则。为此,我必须知道 Kotlin 属性的确切类型。例如,val x: Int
有类型Int
。
不幸的是,对于类型的财产,private val a = 3
我收到以下信息:
property.typeReference
是null
property.typeParameters
是空的property.typeConstraints
是空的property.typeParameterList
是空的property.text
是private val a = 3
property.node.children().joinToString()
具有上一项的对象符号property.delegate
一片空白property.getType(bindingContext)
为 null(该属性bindingContext
是KtTreeVisitorVoid
used的一部分
问题:如何获取类型名称(或者,更好的是 object KClass
)以将实际属性类型与Boolean
类类型进行比较?(例如,我只需要获取属性布尔值是否为非)
代码:
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")
)
}
}