Как просмотреть диагностику уровня «ПРИМЕЧАНИЕ» при обработке аннотаций? - PullRequest
0 голосов
/ 23 октября 2018

Обзор

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

Среда

  • Windows 10 64-бит
  • IntelliJ 2018.2.5 как моя IDE
  • Gradle 4.10.2 (настроен с плагином kapt для обработки аннотаций)
  • Kotlin 1.2.71

Подробности

Я обнаружил, что могу получить доступ к объекту messenger в моем процессоре, который позволяет мне выводить диагностические сообщения.Это то, что я реализовал до сих пор:

override fun process(annotations: MutableSet<out TypeElement>?, roundEnv: RoundEnvironment): Boolean {
    roundEnv.getElementsAnnotatedWith(ElementaryNode::class.java).forEach {
        if (it !is ExecutableElement) {
            processingEnv.messager.printMessage(
                    Diagnostic.Kind.ERROR,
                    "Cannot generate elementary node from non-executable element"
            )
            return false
        }

        processingEnv.messager.printMessage(Diagnostic.Kind.WARNING, "Test that this works")

        val packageName = processingEnv.elementUtils.getPackageOf(it).toString()
        val definition = ElementaryNodeDefinition.fromFunction(it)
        outputElementaryNode(definition, packageName)
    }

    return true
}

Если я запускаю gradle build из командной строки, я вижу, что это выводит диагностические сообщения уровня предупреждения:

$ gradle build
...
> Task :sample-main:kaptGenerateStubsKotlin
w: warning: Test that this works
w: warning: Test that this works
w: warning: Test that this works
w: warning: Test that this works
w: warning: Test that this works
w: warning: Test that this works
w: warning: Test that this works
...

Тем не менее, я не вижу никакой диагностики, если я вывожу эту диагностику на каком-либо более низком уровне, например Diagnostic.Kind.NOTE.

Я пытался просмотреть документацию javac здесь иглядя на исходный код проектов, которые также выполняют обработку аннотаций (например, этот ), но я не могу найти ничего, что объясняет, как просматривать диагностические сообщения на этом уровне.

В случае, если этополезно, это файл build.gradle.kts для подпроекта, содержащий мой процессор аннотаций:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm")
    kotlin("kapt")
}

dependencies {
    implementation(kotlin("stdlib-jdk8"))
    implementation("com.google.auto.service:auto-service:1.0-rc4")
    implementation("com.squareup:kotlinpoet:1.0.0-RC1")
    implementation(project(":model"))
    kapt("com.google.auto.service:auto-service:1.0-rc4")
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

kapt {
    correctErrorTypes = true
}

Это файл build.gradle.kts для моего проекта "sample-main", который содержит мою точку входа:

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

plugins {
    kotlin("jvm")
    kotlin("kapt")
}

dependencies {
    kapt(project(":node-generation"))
    implementation(project(":node-generation"))
    implementation(project(":model"))
    implementation(kotlin("stdlib-jdk8"))
}

tasks.withType<KotlinCompile> {
    kotlinOptions.jvmTarget = "1.8"
}

1 Ответ

0 голосов
/ 19 июня 2019

Запуск с параметром --debug

gradle build --debug

К сожалению, вы можете обнаружить, что все другие журналы отладки, которые идут вместе с этим параметром, настолько многословны, что вы не можете найти свой собственный вывод и использованиевариант не практиченСмущаюсь, что в нашем случае мы используем уровень WARNING для всех сообщений журнала без ошибок в нашем процессоре аннотаций.

...