java - 使用 CheckStyle 阻止对内部接口/类的公共访问
问题描述
有没有办法更新 checkstyle 设置以只允许封装私有内部接口或类?例如
public class A {
...
public interface B { // should flag it as error
..
}
}
public class A {
...
interface B { // valid syntax
..
}
}
解决方案
您可以为此使用MatchXPath:
<?xml version="1.0"?>
<!DOCTYPE module PUBLIC "-//Puppy Crawl//DTD Check Configuration 1.3//EN"
"http://checkstyle.sourceforge.net/dtds/configuration_1_3.dtd">
<module name="Checker">
<property name="charset" value="UTF-8"/>
<property name="haltOnException" value="true"/>
<property name="severity" value="error"/>
<module name="TreeWalker">
<module name="MatchXpath">
<property name="query" value="/CLASS_DEF/OBJBLOCK/(CLASS_DEF | INTERFACE_DEF)/MODIFIERS[(*)]"/>
<message key="matchxpath.match"
value="Only package private inner interfaces or classes are allowed."/>
</module>
</module>
</module>
public class A {
public interface B { // violation
}
public class C { // violation
}
public enum D { // ok, enum not specified in config
}
class E { // ok, no modifier
}
interface F { ok, no modifier
}
private class G { // violation
}
private interface H { // violation
}
}
➜ src java -jar checkstyle-8.41-all.jar -c config.xml A.java
Starting audit...
[ERROR] A.java:3:5: Only package private inner interfaces or classes are allowed. [MatchXpath]
[ERROR] A.java:7:5: Only package private inner interfaces or classes are allowed. [MatchXpath]
[ERROR] A.java:23:5: Only package private inner interfaces or classes are allowed. [MatchXpath]
[ERROR] A.java:27:5: Only package private inner interfaces or classes are allowed. [MatchXpath]
Audit done.
Checkstyle ends with 4 errors.
推荐阅读
- python - 尝试将“pending_xref”节点附加到signode时发生异常
- database - JavaFX label.getText() 不返回任何内容
- filter - 如何在 Google 表格的 FILTER 中应用多个条件?
- python - 熊猫的几个月
- swift - 在 macOS 中截屏不保存图像
- java - 代码无法运行,说有问题,只说“找不到符号”
- typescript - 在转换为 typescript 时修复 Ember 加载初始化器
- c - 调用strtok的段错误?
- python - 在 raspberrypi 中安装 MySql 并使用 python3 将数据放入表中
- c# - 将变量与 UI 控件同步的最佳方式是什么?