我一直在做一些注释处理工作,能够警告用户使用某些带注释的方法会非常有用。这基本上是创建@Deprecated
注释的自定义版本。我认为一个好的起点可能是@Deprecated
的实际注释处理器,但我似乎找不到它。 :_
(请注意,这与How to intentionally cause a custom java compiler warning message?)
类似,但不相同谢谢!
答案 0 :(得分:2)
考虑一些代码检查警告,例如将null传递给varargs方法。
对于此用例,请查看现有检查器的Checker Framework(如nullness检查程序)以及如何创建自定义检查程序(或其他类型的注释处理程序)。
我使用此工具及其捆绑的检查程序并非常喜欢它。
如果不确切地知道你的想法,如果一些跳棋已经解决了你的一些想法,我不会感到惊讶。您可以创建一些可插拔类型来解决您的其他想法。至少,它可能会给你一些关于如何或如何不接近你想要做的事情的想法。
答案 1 :(得分:1)
感谢大家的反馈。查看编译器API,它绝对可行(但不是那么简单)。 This article为编译器API提供了良好的开端。我想将来我会考虑编写一个可扩展的规则检查器。顺便说一下,试图劫持@Deprecated
注释是行不通的,因为在编译器内部它会与其他“平台注释”一起被删除。
目前,我正在采用相当粗略的解决方案,使用详细的检查异常来对程序员进行大肆攻击。虽然它会使代码混乱,但它也避免了实际分析其意图的复杂性。类似的东西:
try {
doWork(workUnit, 15, Style.STRICT);
} catch (MakeSureYouOverrodeEverythingYouWantedToFirst warning) {
; // will never actually reach here, but you have been warned!
}
如果程序员没有按照指示做,程序的输出可能是伪随机错误的,因此调试相当繁琐。虽然这个解决方案肯定是对异常处理(包括我)的破解,但它只是简单地满足了我的需求。
此外,额外的努力可能会鼓励程序员实际做他们应该做的事情!
如果您有其他想法,我仍然有兴趣听取其他想法。
答案 2 :(得分:-1)
注释处理器在javac中,您可以在OpenJDK中找到源代码。但是,它并非设计成可扩展的。
你最好做的是使用像FindBugs或PMD这样的代码分析,因为这些代码分析旨在扩展,如果某些条件失败,你的构建就会失败。