Können Findbugs nicht verwendete öffentliche Methoden erkennen

8

Ist es möglich, unbenutzte Methoden in einem Quellbaum mithilfe von FindBugs zu erkennen? Ich sehe einige Beiträge in SO, wo Benutzer dies behaupten, andere fragen, wie man das in FB und anderen tut, wo sie behaupten, FB könne das nicht tun.

Weiß jemand genau, wie das gemacht wird? Ich interessiere mich nur für Methoden, die nicht explizit von anderswo aufgerufen werden, mir ist die Reflexion egal.

    
Miserable Variable 18.01.2011, 06:32
quelle

8 Antworten

12

Als ein Mitglied des FindBugs-Teams kann ich Ihnen sagen, dass FindBugs das leider nicht tut nicht . Wenn Sie die Fehlermuster auf unserer Website durchsuchen, werden nur "unbenutzte" Detektoren für nicht verwendete -Felder erwähnt .

    
Keith 20.01.2011, 20:08
quelle
2

Ich habe ein Projekt, an dem ich gerade arbeite, das macht genau das ... Es ist sehr früh am Tag, also wahrscheinlich eine Menge Bugs übrig geblieben:

Ссылка

    
MeBigFatGuy 24.01.2011 04:19
quelle
1

Nun, ab findbugs-1.3.9 scheint es, dass nicht ungenutzte Methoden abfängt.

Als ich Fannebugs auf dieser kleinen Probe lief:

%Vor%

Es hat nicht verstanden, dass weder foo noch bar ungenutzt sind. Es hat festgestellt, dass TestJava.j ein nicht verwendetes Feld ist.

%Vor%

findbugs ist bei weitem nicht perfekt, aber es ist immer noch ein ziemlich nützliches Werkzeug.

    
Zach L 18.01.2011 06:50
quelle
1

Nun, da Sie trotz Warnungen der anderen, die geantwortet haben, diesen Weg gehen wollen, können Sie die UPM-Detektor zu tun, was Sie brauchen.

Es ist wirklich einfach, einen Detektor für FindBugs zu schreiben (besonders, wenn Sie einen guten Ausgangspunkt haben). Lesen Sie dies , um loszulegen

    
Ryan Fernandes 18.01.2011 07:00
quelle
1

Ich nehme an, es wäre durchaus möglich, dass Findbugs über öffentliche Methoden, die nicht verwendet werden, auf die gleiche Weise berichten, wie es über private Daten berichtet (entweder das oder ich denke an einen Compiler-Flag :-).

Die wirkliche Frage ist, warum würden Sie auch wollen? Wenn Sie ein Programm schreiben, das geschlossen ist und niemals erweitert wird, können Sie nach dem Auffinden unbenutzter Methoden diese entfernen. Aber wenn Sie eine API schreiben, können Sie nicht vorhersagen, wer diese Methoden benötigt. Es macht also wenig Sinn, darüber zu berichten.

    
drekka 18.01.2011 06:42
quelle
0

Der beste Ansatz (zu mir), um Kandidaten für nicht verwendete Methoden zu finden, ist Coverage-Tools wie emma.

Instrumentieren Sie Ihre Anwendung, verwenden Sie sie exzessiv und untersuchen Sie die Emma-Protokolle - Methoden, die während der Sitzung nicht verwendet wurden können unbenutzt sein und Sie können Ihre bevorzugte IDE (Eclipse, ...) verwenden Untersuchen Sie die Aufrufhierarchien der nicht besuchten Methoden.

Ich bezweifle, dass Fehler finden oder andere Code-Analyzer können nicht verwendete Methoden wirklich erkennen, weil Methoden möglicherweise

sind
  • von anderen Bibliotheken aufgerufen (für alle nicht-privaten Methoden)
  • wird remote
  • aufgerufen
  • wird über die Reflection-API aufgerufen (auch private Methoden, technisch gesprochen)
Andreas_D 18.01.2011 06:42
quelle
0

Das Entfernen von unbenutztem Code (einschließlich nicht verwendeter öffentlicher Methoden) ist eine Sache, die Verschleierungsprogramme erledigt. Das Problem ist, dass Sie nicht wirklich feststellen können, ob eine öffentliche Methode verwendet wird, indem Sie nur die Klasse betrachten, die sie enthält. Sie müssen sich das gesamte System ansehen, das ausgeführt werden soll, da eine öffentliche Methode von überall aufgerufen werden kann.

Wenn Sie den Obfuscator gegen das ganze System ausführen (dh Ihren Code und alle Bibliotheken, die zum Ausführen des Systems verwendet werden), können Sie öffentliche Methoden finden, die nie aufgerufen werden (Achtung: Spiegelung kann natürlich mit diesem Ergebnis verwechselt werden!).

    
Joachim Sauer 18.01.2011 07:23
quelle
0

Vielleicht ist crap4j das, was Sie brauchen. Es entfernt den gesamten Code, der nicht durch Komponententests erreicht wird. Dies ist natürlich der harte Weg, um Ihre App zu minimieren.

    
Daniel 18.01.2011 07:27
quelle

Tags und Links