Я довольно долго играл с AST и пытался получить информацию о строке и столбце, связанную с данным узлом, проанализированным в этом плагине из eclipse. Согласно задокументированному API здесь я обнаружил, что метод getStartPosition()
может дать мне позицию по символам проанализированного файла, но это не то, что я хотел .
Я пошел по документация API класса CompilationUnit, чтобы узнать методы getLineNumber(int position)
и getColumnNumber(int position)
, которые, насколько я понимаю, могут помочь. параметр position
— это не что иное, как то, что возвращает метод getStartPosition()
, выполняя node.getStartPosition()
.
Теперь проблема заключается в том, что два метода получения строки и столбца в исходном файле не доступны для всех узлов. Например, узлов объявления методов их нет!
Как я могу получить такую информацию обо всем дереве? Я знаю, что это не невозможно, так как я мог использовать синтаксические анализаторы для других языков, которые для каждого узла ast имели строку и связанный с ним столбец. Фактически, я считаю, что javaparser является одним из них для java, поскольку класс содержит атрибуты для строки и столбец жестко запрограммирован. Увидев Eclipse 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'>
Спасибо.