Программный доступ к абстрактному синтаксическому дереву Eclipse

Не могли бы вы привести пример программного доступа к абстрактному синтаксическому дереву Eclipse для данного фрагмента кода?

например, получение AST для:


Класс1.java

package parseable;

public class Class1 {

/**
 * @param args
 */
public static void main(String[] args) {
    System.out.println("Hello world!");
}

}


person hawkeye    schedule 13.10.2008    source источник


Ответы (2)


Это не точный ответ, который может подсказать вам, с чего начать:

Как сказано в этом вопросе,

Полный пример доступен в этой угловой статье о затмении, а также дополнительные сведения в справка по eclipse. А на слайде 59 из в этой презентации вы увидите, как внести изменения в исходный код.

person VonC    schedule 13.10.2008

// get an ICompilationUnit by some means
// you might drill down from an IJavaProject, for instance 
ICompilationUnit iunit = ...

// create a new parser for the latest Java Language Spec
ASTParser parser = ASTParser.newParser(AST.JLS3);

// tell the parser you are going to pass it some code where the type level is a source file
// you might also just want to parse a block, or a method ("class body declaration"), etc
parser.setKind(ASTParser.K_COMPILATION_UNIT);

// set the source to be parsed to the ICompilationUnit
// we could also use a character array
parser.setSource(iunit);

// parse it.
// the output will be a CompilationUnit (also an ASTNode)
// the null is because we're not using a progress monitor
CompilationUnit unit = (CompilationUnit) parser.createAST(null);

Не смущайтесь различием ICompilationUnit и CompilationUnit, которое кажется просто результатом нетворческого именования с их стороны. CompilationUnit — это тип ASTNode. ICompilationUnit в этом контексте напоминает дескриптор файла. Дополнительную информацию о различиях см. здесь: http://wiki.eclipse.org/FAQ_How_do_I_manipulate_Java_code%3F

person johncip    schedule 03.07.2011