请帮助我解决这些问题。只需我只想将现有的声纳法规则应用于某些类型的类。据我所知,我们可以使用类树来获取类并确定目标类。我不知道的是如何在自定义规则中启用或禁用现有声纳规则?。
下一个问题是确定扩展了子类的基类。作为示例,类A扩展了类B,B扩展了类C,现在我想确定从类C(基类)扩展的所有类。
即使是小的指南,链接,技巧也将不胜感激。
答案 0 :(得分:1)
我认为您可以禁用自定义插件中默认Java插件的现有规则。您可以在配置文件中禁用该规则,并用自定义规则替换默认规则。 (实际上,可以在插件中创建自定义问题过滤器)
规则是这样实现的。
@Rule(key =“ S1948”) 公共类SerializableFieldInSerializableClassCheck扩展了IssuableSubscriptionVisitor
@Service
public class AlmConnectivity {
Logger log = LoggerFactory.getLogger(AlmConnectivity.class);
@Autowired
@Qualifier("config")
Config config;
private Proxy proxy;
private OkHttpClient client;
@PostConstruct
private void initProxyBean() {
System.err.println("Config: " + config);
proxy = new Proxy(Proxy.Type.HTTP, new InetSocketAddress(config.getProxyHost(), config.getProxyPort()));
}
}
只需将现有规则复制(并更改规则键等)到您的自定义插件中,并添加对类超类型的检查
public List<Tree.Kind> nodesToVisit() {
return ImmutableList.of(Tree.Kind.CLASS);
}
public void visitNode(Tree tree) {
if(!hasSemantic()) {
return;
}
... rule logic
}