Как разрешить «Устаревшую пользовательскую проверку пуха» для моего пользовательского IssueRegistry, написанного на Kotlin, и заставить его работать (Android) - PullRequest
1 голос
/ 23 апреля 2019

Я пытаюсь реализовать пользовательские проверки пуха (используя Kotlin).Я установил модуль для своих пользовательских проверок и добавил классы для проверки моей первой проверки с использованием lew lint, в основном, следуя этим двум учебникам здесь и здесь .

теперь у меня есть модуль, у меня есть собственный IssueRegistry, я создал проблему и класс Detector для нее.Пока это кажется завершенным.Я добавил тест, чтобы проверить, работает ли моя проверка пуха, и выглядит ли она нормально.

Я добавил свой модуль в проект, сославшись на него в settings.gradle следующим образом: include ':app', ':somemodule', ':mylintmodule'

Теперь, если я запускаю линтер, используя ./gradlew lint, я получаю файл результата lint, сообщающий мне следующее:

Lint found an issue registry (com.myproject.mylintmodule) which requires a newer API level. That means that the custom lint checks are intended for a newer lint version; please upgrade
Lint can be extended with "custom checks": additional checks implemented by developers and libraries to for example enforce specific API usages required by a library or a company coding style guideline.

The Lint APIs are not yet stable, so these checks may either cause a performance degradation, or stop working, or provide wrong results.

This warning flags custom lint checks that are found to be using obsolete APIs and will need to be updated to run in the current lint environment.

It may also flag issues found to be using a newer version of the API, meaning that you need to use a newer version of lint (or Android Studio or Gradle plugin etc) to work with these checks.
To suppress this error, use the issue id "ObsoleteLintCustomCheck" as explained in the Suppressing Warnings and Errors section.

Итак, это говорит мне о том, что я использую более новую версию API в своей пользовательской проверке lint, верно?Это мой пользовательский IssueRegistry (за исключением некоторых частей, не относящихся к данной проблеме):

class MyCustomIssueRegistry : IssueRegistry() {
    override val issues: List<Issue>
        get() = listOf(ISSUE_NAMING_PATTERN)

    override val api: Int = com.android.tools.lint.detector.api.CURRENT_API
    override val minApi: Int = 1 
}

После поиска этой проблемы и поиска этой проблемы я решил переопределить и установить правильную версию API (и, возможно, min API?) С помощьюпереопределяя эти свойства, как я делал выше (эта версия - моя последняя попытка, прямо взятая из этой проблемы).Таким образом, этому свойству можно присвоить значения от -1 до 5, что означает следующее (взято прямо из класса lint.detector.api):

/** Describes the given API level */
fun describeApi(api: Int): String {
    return when (api) {
        5 -> "3.5+" // 3.5.0-alpha07
        4 -> "3.4" // 3.4.0-alpha03
        3 -> "3.3" // 3.3.0-alpha12
        2 -> "3.2" // 3.2.0-alpha07
        1 -> "3.1" // Initial; 3.1.0-alpha4
        0 -> "3.0 and older"
        -1 -> "Not specified"
        else -> "Future: $api"
    }

Я перепробовал все из них, а также приведенный выше, добавив также переопределение minApi, и я продолжаю получать одинаковые результаты для каждого из них.

Также я не могу определить, с какой другой версией API это сравнивается.Есть ли место, где это установлено для обычного линтера в проекте Android?

Мне также неясно, что я должен сделать, чтобы убедиться, что мои изменения были применены - достаточно ли изменить какой-то код, тогдазапустить lint, или мне сначала нужно скомпилировать проект, или build & clean?

Следуя инструкциям, я добавил свою собственную проверку lint, добавив ее в build.gradle приложения: lintChecks project(":mylintmodule") Это дажеправо?Проблема с API в моем классе реестра обнаруживается независимо от того, ссылаются ли (и мы надеемся, что используются) на проверку lint или нет.Я также попробовал другой метод, описанный в первом уроке, добавив эту задачу в модуль linter build.gradle:

defaultTasks 'assemble'

task copyLintJar(type: Copy) {
    description = 'Copies the lint jar file into the {user.home}/.android/lint folder.'
    from('build/libs/')
    into(System.getProperty("user.home") + '/.android/lint')
    include("*.jar")
}

// Runs the copyLintJar task after build has completed.
build.finalizedBy(copyLintJar)

Но так как я не могу понять, как проверить, действительно ли выполняются мои пользовательские проверки, я не знаю, работает ли это как задумано.

Итак, как мне разрешить это предупреждение (поскольку я интерпретирую текст как «Пока версии не совпадают, я не буду пытаться запустить проверку на наличие ворса»), и как я могу убедиться в том, что проверка на наличие в действительности выполняетсяуправляется линтером?

...