2017-02-21 3 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

新しい機能があなたの下にあるレイヤーに追加されると、常にバグがあります。私はこれがちょっとした(そして簡単に修正可能な)省略であったと確信しています。 IntelliJはバグ報告に非常に敏感ですので、報告することを検討してください。 –

+0

私はあなたがsonarLintを使用していると思いますが、その問題はそれから来ていると思いますか?私が正しい場合:どのバージョンですか? – benzonico

答えて

0

おそらく、serivces.isEmpty()が常にtrueであることが静的に解析できるため、stream()は空になり、collectConstructors呼び出しは実行されません。

+1

です。そのコードを*実行する必要がありますが、それでもこれは無限に小さい可能性があります。これはおそらくツールです。 – Eugene

1

これは、SonarQubeにおいて既知のissueとして同定されていた。そして、彼らはバージョン4.0でそれを修正したと言います。それは意味解析の問題です。

あなたのコードに問題はありませんが、ツールだけです。

関連する問題