做注解处理时如何查看“注”级别的诊断?

时间:2018-10-23 10:10:49

标签: kotlin annotation-processing

概述

我正在尝试让Kotlin熟悉我正在从事的项目,并逐渐熟悉注释处理。我想知道当注释处理器运行时如何查看诊断,以便我可以轻松地查看过程中不同阶段的情况。

环境

  • Windows 10 64位
  • IntelliJ 2018.2.5作为我的IDE
  • 4.10.2版(使用kapt插件配置用于注释处理)
  • 科特林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文档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"
}

1 个答案:

答案 0 :(得分:0)

使用--debug选项运行

gradle build --debug

不幸的是,您可能会发现该选项附带的所有其他调试日志记录都非常冗长,以致您找不到自己的输出,因此使用该选项不切实际。我感到沮丧的是,在我们的案例中,我们对注释处理器中的所有无错误级别日志消息使用WARNING级别。