假设我有一个名为Foo的类的外部库。我无法改变Foo以拥有私有构造函数,但我有一个我写的FooFactory类。
所以我有FooFactory.getAFoo()
但是我希望checkstyle在我的其余代码中捕获任何new Foo()
,以强制使用工厂。
我有这个:
<module name="IllegalTokenText">
<property name="tokens" value="LITERAL_NEW"/>
<property name="format" value="Foo"/>
</module>
但这似乎没有检测到new Foo()
。
我可以使用正则表达式,但这更清晰。
我在防止扩展课时遇到了类似的问题:
<module name="IllegalTokenText">
<property name="tokens" value="EXTENDS_CLAUSE"/>
<property name="format" value="AndroidTestCase"/>
</module>
这些checkstyle模块似乎都没有做任何事情。
我做错了什么?
答案 0 :(得分:1)
IllegalTokenText检查令牌本身的非法文本,而不是后续IDENT令牌或其他类似物。所以这就是为什么它似乎在你的情况下什么都不做。
在您的情况下,您可能想尝试使用SevNTU Checkstyle扩展程序,该扩展程序提供了一个名为ForbidInstantiation的检查,可以解决您的问题。他们没有我所知道的文档,因此我将源代码与Javadoc链接起来。当您使用SevNTU Checkstyle时,请务必使用正确的Checkstyle和SevNTU Checkstyle版本,因为并非所有组合都兼容(overview)。
如果这没有帮助,您必须roll your own。