Обзор
Я пытаюсь ознакомиться с 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"
}