2017-02-21 28 views
0

所以,我有這個列表的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完全知道這個方法被使用,當我點擊它時,匹配的對應被突出顯示。

它是怎麼來的,工具告訴我,該方法沒有被使用?缺少工具支持?我的糟糕的代碼?它是什麼?

+1

缺少工具支持 – Holger

+2

將新功能添加到您下面的圖層時總會有一個bug尾巴;我敢肯定,這只是他們的一小部分(而且很容易解決)的遺漏。 IntelliJ對錯誤報告非常敏感,因此您可以考慮向他們報告此問題。 –

+0

我猜你在使用sonarLint並且問題來自它?如果我是正確的:哪個版本? – benzonico

回答

0

也許可以靜態分析serivces.isEmpty()始終爲真,因此stream()將爲空,並且不會執行collectConstructors調用?

+1

它將不得不*運行該代碼*,但即使如此,這是一個無限小的可能性。這很可能是工具。 – Eugene

1

在SonarQube中它已被確定爲已知issue。它說他們已經修復了4.0版本。這是語義分析的一個問題。

代碼中沒有問題,只是工具。