Java 方法参考使用的方法-确认为未使用
因此,我有一个Java 方法参考使用的方法-确认为未使用,java,intellij-idea,java-8,sonarqube,Java,Intellij Idea,Java 8,Sonarqube,因此,我有一个Class实例列表。我想将其转换为类声明的构造函数的列表 我将类映射到它们声明的构造函数,并使用collect将其展平: services.stream() .map(Class::getDeclaredConstructors) .collect(ArrayList::new, this::collectConstructors, List::addAll) 对于收集,我使用一个方法,它需要访问类上下文,这就是为什么它不是静态的
Class
实例列表。我想将其转换为类声明的构造函数的列表
我将类映射到它们声明的构造函数,并使用collect
将其展平:
services.stream()
.map(Class::getDeclaredConstructors)
.collect(ArrayList::new,
this::collectConstructors,
List::addAll)
对于收集,我使用一个方法,它需要访问类上下文,这就是为什么它不是静态的
private void collectConstructors(List<Constructor> l, Constructor<?>[] arr) {
if (arr.length == 0) {
return;
}
Class<?> clz = arr[0].getDeclaringClass();
if (arr.length > 1) {
throw new MoreThanOneConstructor(clz);
}
if (!Modifier.isPublic(arr[0].getModifiers())) {
throw new NoVisibleConstructor(clz);
}
l.add(arr[0]);
findDefinition(clz).setConstructor(arr[0]);
}
private void收集器构造函数(列表l,构造函数[]arr){
如果(arr.length==0){
返回;
}
类clz=arr[0]。getDeclaringClass();
如果(arr.length>1){
抛出新的多个构造函数(clz);
}
如果(!Modifier.isPublic(arr[0].getModifiers()){
抛出新的NoVisibleConstructor(clz);
}
l、 添加(arr[0]);
findDefinition(clz).setConstructor(arr[0]);
}
好的是,一切都很好。IntelliJ和SonarQube都告诉我,坏消息是没有使用方法collectConstructors
。丑陋的,或者更有趣的是,IntelliJ完全知道使用了这个方法,当我点击它时,匹配的对应项会高亮显示
工具告诉我,方法没有被使用,这是怎么回事?缺少工具支持?我那该死的密码?它是什么?也许可以静态分析serivces.isEmpty()始终为真,因此stream()将为空,并且不会执行collectConstructors调用?它已被识别为SonarQube中已知的。它说他们已经用版本4.0解决了这个问题。这是语义分析的问题
您的代码中没有问题,只有工具。缺少工具支持当新功能添加到您下面的层时,总会有一个bug尾巴;我相信这只是他们的一个小疏忽(而且很容易纠正)。因特利利对bug报告非常敏感,所以你可以考虑向他们报告这一点。我猜你是在使用SangARLLT,这个问题来自于它。如果我是正确的:哪个版本?@benzonico我使用maven sonar插件和sonarqube.com作为目标。Sonar版本是6.2.1,它必须运行该代码,但即使如此,这种可能性也非常小。很可能是工具。