如何解决如何解决自定义棉绒规则中context.report的重载分辨率歧义?
今天,我开始学习如何制定一些基本的lint规则,尝试为变量创建lint规则,以检查其名称的长度。
@Suppress("UnstableApiUsage")
class VariableLengthDetector : Detector(),Detector.UastScanner {
override fun getApplicableUastTypes() = listOf(UVariable::class.java)
override fun createUastHandler(context: JavaContext) =
VariableLengthHandler(context)
class VariableLengthHandler(private val context: JavaContext) :
UElementHandler() {
private val variableMinimumLength = 3
override fun visitVariable(node: UVariable) {
node.name?.let {
if (it.length < variableMinimumLength) {
context.report(
issue = variableLengthIssue,scope = node,location = context.getNameLocation(node),message = "this variable can be better named"
)
}
}
}
}
}
由于此处引起的过载歧义,该代码无法编译:
context.report(issue = variableLengthIssue,message = "this variable can be better named")
据我了解,这是因为context.report的重载可能是
public final fun report(issue: Issue,scope: PsiElement?,...
或者可以是
public final fun report(issue: Issue,scope: UElement?,...
但是我不确定如何使用我拥有的Uvariable元素来定义它们?
如何解决这种过载歧义?
解决方法
您可以将其投射为UElement
。
context.report(
issue = variableLengthIssue,scope = node as UElement,location = context.getNameLocation(node),message = "this variable can be better named"
)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。