作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试编写一个简单的 Android lint 检查,以确保您使用特定的可空性注释。但由于某种原因,我无法获得注释的完全限定名称。
这是测试用例:
val input = """
package foo;
import org.jetbrains.annotations.NotNull;
public class Bar {
@NotNull String text;
Bar(@NotNull String text) {
this.text = text;
}
}
""".trimIndent()
lint().files(java(input))
.issues(NullAnnotationDetector.ISSUE)
.run()
// expect and all the info
class NullAnnotationDetector: Detector(), SourceCodeScanner {
// companion object with the Issue itself
private lateinit var uastHandler: UElementHandler
override fun getApplicableUastTypes(): List<Class<out UElement>>? =
listOf(UAnnotation::class.java)
override fun createUastHandler(context: JavaContext): UElementHandler? {
uastHandler = NullHandler(context)
return uastHandler
}
private class NullHandler(val context: JavaContext) : UElementHandler() {
override fun visitAnnotation(node: UAnnotation) {
val x = node.qualifiedName // for some reason this is just "NotNull"
// context.report and all those kind of stuff
}
}
}
node.qualifiedName
返回完全限定名称 (
org.jetbrains.annotations.NotNull
)。如何使用
java()
获得相同的结果? ?
最佳答案
我换了
node.qualifiedName
node.javaPsi?.qualifiedName
lint()
.files(
notNullClass(),
java( """
package foo;
import org.jetbrains.annotations.NotNull;
public class Bar {
@NotNull String text;
Bar(@NotNull String text) {
this.text = text;
}
}
""".trimIndent()
)
)
.run()
.expectErrorCount(1)
companion object {
fun notNullClass(): TestFile = java(
"src/org/jetbrains/annotations/NotNull.java",
"""
package org.jetbrains.annotations;
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.CLASS)
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER, ElementType.LOCAL_VARIABLE, ElementType.TYPE_USE})
public @interface NotNull {
String value() default "";
Class<? extends Exception> exception() default Exception.class;
}
""".trimIndent()
)
}
关于android - 如何从 Java 源代码中获取 UAnnotation 的限定名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59394261/
我是一名优秀的程序员,十分优秀!