方法引用使用的方法 - 识别为未使用

时间:2017-02-21 16:41:21

标签: java intellij-idea java-8 sonarqube

所以,我有Class个实例列表。我想将它转换为由类声明的Constructor列表。

我将类映射到它们声明的构造函数并用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]);
}

好处是,一切正常。不好的是,IntelliJ和SonarQube都告诉我,方法collectConstructors没有被使用。丑陋的,或者说很有趣的是,IntelliJ完全知道该方法的使用,当我点击它并突出显示匹配的对应物时。

工具如何告诉我,该方法未被使用?缺少工具支持?我的糟糕的代码?它是什么?

2 个答案:

答案 0 :(得分:1)

它已被确定为SonarQube中的已知issue。它说它们已经修复了4.0版。这是语义分析的一个问题。

您的代码中没有问题,只有工具。

答案 1 :(得分:0)

也许可以静态分析serivces.isEmpty()始终为true,因此stream()将为空并且不会执行collectConstructors调用?