2016-02-26 11 views
10

Ho la seguente logica;SonarQube che emette un problema di metodo privato non utilizzato per l'utilizzo lambda

.. 
if(list.stream() 
     .filter(MyClass::isEnabled) 
     .filter(this::isActive) 
     .count() > 0) { 
    //do smth 
} 
.. 
private boolean isActive(MyClass obj) { 
    return bool; 
} 

Come si vede, isActive metodo viene utilizzato nella struttura di flusso, ma quando ho costruire questa classe su Jenkins, ottengo la questione metodo privato inutilizzato da SonarQube, si dice che si dovrebbe cancellare questo metodo privato ridondante. è un insetto? In caso negativo, perché non hanno ancora incluso la logica lambda nella loro struttura di analisi?

L'unica soluzione è, ovviamente, fare questo;

.filter(obj -> isActive(obj)), ma distrugge l'uniformità e persino la leggibilità (imo).

+0

Strano. Lambdas sembra essere ok perché sembra accettare 'MyClass :: isEnabled', che è un riferimento al metodo. Prova la rotta 'className :: instanceMethod' dove' className' è il nome della classe in cui 'isActive', cioè' instanceMethod = isActive' è definito. –

risposta

9

Questo è un problema noto di SonarQube analizzatore java: https://jira.sonarsource.com/browse/SONARJAVA-583

Ciò è dovuto alla mancanza di analisi semantica per risolvere correttamente metodo di riferimento (quindi identificare a quale metodo questo :: isActive riferisce a).