Как устранить неоднозначность разрешения перегрузки для context.report в пользовательских правилах lint?

#android #kotlin #static-analysis #lint

#Android #kotlin #статический анализ #lint

Вопрос:

Сегодня я начал изучать, как создавать несколько основных правил 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,
               scope = node,
               location = context.getNameLocation(node),
               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, который у меня есть?

Как мне устранить эту неоднозначность перегрузки?

Ответ №1:

Вы можете использовать его как UElement .

 context.report(
    issue = variableLengthIssue,
    scope = node as UElement,
    location = context.getNameLocation(node),
    message = "this variable can be better named"
)