2017-02-21 8 views
0

Итак, у меня есть этот список Class экземпляров. Я хочу преобразовать его в список Constructor s, который объявляется классами.Метод, используемый ссылкой на метод - признан не использован

Я сопоставить классы заявленных конструкторов и придавить его 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() всегда истинно, поэтому stream() будет пустым и вызов collectConstructors не будет выполнен?

+1

, она должна будет * запустить этот код *, но даже тогда это бесконечно малая возможность. Это, скорее всего, инструменты. – Eugene

1

Он был идентифицирован как известный issue в SonarQube. И в нем говорится, что они исправили это с версией 4.0. Это проблема с семантическим анализом.

В вашем коде нет проблем, просто инструмент.

Смежные вопросы