저는 AST와 함께 꽤 오랫동안 놀았으며 이클립스에서이 플러그인으로 파싱 된 주어진 노드와 관련된 줄과 열 정보를 얻으려고했습니다. 문서화 된 api here에 따르면 getStartPosition()
메서드는 파싱 된 파일의 문자에 대한 위치를 알려줄 수 있지만 이것이 내가 원하는 것만은 아니라는 사실을 발견했습니다.모든 노드에서 Eclipse JDT Parser에서 파싱 된 자바 소스로부터 라인 및/또는 컬럼을 얻는 방법?
CompilationUnit class api documentation 나는 getLineNumber(int position)
과 getColumnNumber(int position)
을 알아 냈는데, 그 중 하나가 트릭을 할 수 있습니다. position
매개 변수는 node.getStartPosition()
을 수행하여 getStartPosition()
메서드가 반환하는 것 이상입니다.
이제, 문제는 소스 파일에 라인과 열을 얻는 두 가지 방법입니다하지 않습니다 모든 노드에 사용할 것으로 보인다. 예를 들어, method declaration nodes에는 이러한 기능이 없습니다.
모든 트리에서 어떻게 정보를 얻을 수 있습니까? ast 노드마다 줄과 열이있는 다른 언어의 파서를 사용할 수 있었기 때문에 불가능하지 않다는 것을 알고 있습니다. 사실, 나는 클래스에 행과 열에 대한 속성이 포함되어 있기 때문에 javaparser이 자바에 대한 것 중 하나라고 생각한다. 이클립스를 본 JDT는 나에게 훨씬 더 강건 해 보였고 꽤 오랫동안 거기에 있었기 때문에 이러한 정보를 얻을 수 없다는 사실에 놀라곤했다.
편집 :
<type 'org.eclipse.jdt.core.dom.CompilationUnit'> 1 <type 'org.eclipse.jdt.core.dom.TypeDeclaration'> <type 'org.eclipse.jdt.core.dom.Javadoc'> <type 'org.eclipse.jdt.core.dom.TagElement'> <type 'org.eclipse.jdt.core.dom.TextElement'> <type 'org.eclipse.jdt.core.dom.TextElement'> <type 'org.eclipse.jdt.core.dom.TextElement'> <type 'org.eclipse.jdt.core.dom.TextElement'> <type 'org.eclipse.jdt.core.dom.TextElement'> <type 'org.eclipse.jdt.core.dom.TextElement'>
감사합니다 : 다시, 문제는 루트에 표시되는 컴파일 단위의 여러 가지의 줄 번호를 얻을 수있다.
CU가 주어진 java 파일과 연관되어 있다는 사실을 알지 못해서 그 파일과 관련된 ast의 노드에 대한 줄 위치 정보를 얻는 것이 합리적 일 것입니다. 나는 각 노드가 관련된 행과 열을 가질 정신 모형에 더 익숙했습니다. 그 행과 열은 내가 본 유일한 모델 이었기 때문에 속한 것입니다. 그것은 모두 클래스의 책임을 설정하는 방법으로 귀결되며,이 새로운 것은 의미가 없습니다. 이제 모든 것이 실행되고 작동합니다. 나는 당신의 대답에서 그것을 깨닫기 위해 왔기 때문에 투표를하고 당신의 대답을 대답으로 설정했습니다. –