checkstyle - 禁止初始化

时间:2016-04-22 01:39:19

标签: checkstyle

假设我有一个名为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模块似乎都没有做任何事情。

我做错了什么?

1 个答案:

答案 0 :(得分:1)

IllegalTokenText检查令牌本身的非法文本,而不是后续IDENT令牌或其他类似物。所以这就是为什么它似乎在你的情况下什么都不做。

在您的情况下,您可能想尝试使用SevNTU Checkstyle扩展程序,该扩展程序提供了一个名为ForbidInstantiation的检查,可以解决您的问题。他们没有我所知道的文档,因此我将源代码与Javadoc链接起来。当您使用SevNTU Checkstyle时,请务必使用正确的Checkstyle和SevNTU Checkstyle版本,因为并非所有组合都兼容(overview)。

如果这没有帮助,您必须roll your own