2009-06-22 5 views
4

특정 클래스 소스 코드 (Java/C#)의 행 번호가 주어지면이 메소드의 이름을 쉽게 가져올 수 있습니까? (아마도 하나의 추상 구문 트리를 사용하는 경우)행 번호의 메소드 이름

(이는 checkstyle의 출력을 터치 한 메서드로 제한하는 데 유용합니다).

Line # -> MethodName을 수행하기 위해 추상 구문 트리를 사용해야한다고 가정합니다.

답변

2

(자바 특정) 클래스 파일, 행 번호 테이블 코드 <의 매핑이 포함됩니다 디버그 정보로 컴파일 된

경우 -> 행 번호를. 아마도 ASM이나 BCEL과 같은 바이트 코드 엔지니어링 라이브러리와 함께 할 수 있을지는 모르겠지만 런타임시이 API를 사용하기위한 기본 제공 API는 없다고 생각합니다.

2

Java에 대해서는 잘 모르지만 .NET 어셈블리에는 해당 메타 데이터 테이블에 줄 번호가 저장되어 있지 않으므로 해당 종류의 정보에 대한 PDB (Program Database) 파일이 필요합니다.

0

예, 말씀 드렸듯이 올바른 종류의 AST를 사용하십시오. DMS Software Reengineering Toolkit은 Java 및 C# 용 AST를 작성할 수 있습니다. 각 AST 노드는 줄 번호 데이터로 장식되어 있습니다. 각 AST 노드는 문법 규칙에 해당합니다.

줄 번호의 메서드 이름을 결정하는 문제는 매우 쉽습니다. 해당 줄 번호가있는 AST에서 노드를 찾고 메서드 선언을 나타내는 AST 노드가 발견 될 때까지 트리를 오릅니다. 해당 노드에서 method-name 서브 트리를 찾아서 인쇄하십시오.

이 트릭은 DMS를 사용하여 빌드 된 정적 분석 도구에서 특정 행 번호에서 진단 된 문제에 대한 잘못된 메서드 이름을보고하는 데 많이 사용됩니다. DMS는 다른 사람들이 정적 분석 도구를 만들 수 있도록 설계된 입니다.

관련 문제