문제

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

(이것은 체크 스타일의 출력을 만지는 방법으로 제한하는 데 유용합니다).

나는 당신이 line#-> methodname을 수행하기 위해 추상 구문 트리를 사용해야한다고 가정합니다.

도움이 되었습니까?

해결책

(Java-specific)

클래스 파일이 디버그 정보로 컴파일 된 경우 줄 번호 테이블에는 코드 <-> 줄 번호의 매핑이 포함됩니다. 런타임에 이것을 얻을 수있는 내장 API가 있다고 생각하지는 않지만 ASM 또는 BCEL과 같은 바이트 코드 엔지니어링 리브와 함께 할 수 있다고 확신합니다.

다른 팁

Java에 대해 잘 모르지만 .NET 어셈블리에는 메타 데이터 테이블에 줄 번호가 저장되어 있지 않습니다. 해당 정보에 대한 PDB (프로그램 데이터베이스) 파일이 필요합니다.

예, 당신이 말했듯이, 올바른 종류의 AST를 사용합니다. 그만큼 DMS 소프트웨어 리엔지니어링 툴킷 Java 및 C#용 ASTS를 구축 할 수 있습니다. 각 AST 노드는 줄 번호 데이터로 장식되어 있습니다. 각 AST 노드는 문법 규칙에 해당합니다.

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

이 트릭은 DMS를 사용하여 구축 된 정적 분석 도구에 크게 사용되어 특정 줄 번호로 진단 된 문제의 문제에 대한 문제의 방법 이름을보고합니다. DMS는 다른 사람들이 이러한 정적 분석 도구를 구축 할 수 있도록 설계되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top