我正在尝试让Kotlin熟悉我正在从事的项目,并逐渐熟悉注释处理。我想知道当注释处理器运行时如何查看诊断,以便我可以轻松地查看过程中不同阶段的情况。
我发现我可以在处理器中访问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文档here,并查看也进行注释处理的项目的源代码(例如this one),但找不到任何能解释如何查看诊断信息的内容。此级别的邮件。
如果有帮助,这是包含我的注释处理器的子项目的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
}
这是我的“ sample-main”项目的build.gradle.kts
文件,其中包含我的入口点:
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"
}
答案 0 :(得分:0)
使用--debug选项运行
gradle build --debug
不幸的是,您可能会发现该选项附带的所有其他调试日志记录都非常冗长,以致您找不到自己的输出,因此使用该选项不切实际。我感到沮丧的是,在我们的案例中,我们对注释处理器中的所有无错误级别日志消息使用WARNING
级别。