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,它必须运行该代码,但即使如此,这种可能性也非常小。很可能是工具。