Frage

eine Zeilennummer einer bestimmten Klasse Quellcode Given (Java / C #) - gibt es eine einfache Möglichkeit, den Namen des Verfahrens es fällt in bekommen? (Wenn es fällt innerhalb eines) (Vermutlich mit einem Abstract Syntax-Baum)

(Dies würde bei der Begrenzung der Ausgabe von check nur auf die Methode berührt nützlich sein).

Ich nehme an, Sie müssten einen Abstract Syntax-Baum verwenden Linie zu tun. # -> Method

War es hilfreich?

Lösung

(Java-spezifisch)

Wenn die Klassendatei mit Debug-Informationen kompiliert wurde, dann wird die Zeilennummer Tabelle, die eine Zuordnung von Code enthalten <-> Zeilennummer. Ich glaube nicht, dass es bei diesem einem integrierten API ist zur Laufzeit für immer, obwohl ich sicher bin, Sie wahrscheinlich mit mit einigen der Bytecode-Engineering-Libs gibt, wie ASM oder BCEL tun können.

Andere Tipps

Ich weiß nicht, über Java, aber .NET-Assemblies haben keine Zeilennummern in ihren Metadaten Tabellen gespeichert -. Sie müssen eine PDB (Programmdatenbank) für diese Art von Datei-Informationen

Ja, wie Sie gesagt haben, die richtige Art von AST mit. Die DMS Software Reengineering Toolkit kann Äste für Java und C # für bauen. Jeder AST-Knoten wird mit Zeilenzahldaten eingerichtet. Jeder AST-Knoten entspricht einer Grammatikregel.

So ist das Problem für eine Zeilennummer des Namen der Methode der Bestimmung ist recht einfach: einen Knoten in dem AST mit entsprechender Zeilennummer finden, und klettern auf den Baum, bis ein AST-Knoten gefunden wird, der eine Methode Erklärung darstellt; findet den Methodennamen subtree von diesem Knoten und drucken Sie es aus.

Dieser Trick ist stark in statischen Analysetools verwendet DMS gebaut unter Verwendung eines anstößigen Methodennamen für ein Problem bei einer bestimmten Zeilennummer diagnostiziert zu melden. DMS ist entworfen, andere zu ermöglichen, solche statischen Analyse-Tools zu bauen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top