Este tutorial pertenece a Eclipse JDT Tutorial Series.
ASTParser puede usar su método setKind () para configurar la fuente para que sea analizada como una unidad de compilación, expresión única, una secuencia de declaraciones o una secuencia de declaraciones del cuerpo de la clase.
parser.setKind(ASTParser.K_COMPILATION_UNIT); |
Cualquiera de esos cuatro no puede manejar un solo método independiente. Esto no es agradable. Siguiendo la lógica de una unidad de compilación, se puede analizar una clase. Entonces podemos agregar un nombre de clase falso como un shell a cada método, luego el método envuelto en una clase falsa se puede analizar correctamente usando ASTParser.
El código se ve así:
String sourceStart = "public class A {"; //add a fake class A as a shell, to meet the requirement of ASTParser String sourceMiddle = ""; for(String s : tempMiddle){ s = s.trim(); if(s.trim().length()>0 && !s.startsWith("---") && !s.startsWith("/") && !s.startsWith("*") ) sourceMiddle += s.trim() + "n"; } String sourceEnd = "}"; String source = sourceStart + sourceMiddle + sourceEnd; parser.setSource(source.toCharArray()); parser.setKind(ASTParser.K_COMPILATION_UNIT); final CompilationUnit cu = (CompilationUnit) parser.createAST(null); cu.accept(new ASTVisitor() { //by add more visit method like the following below, then all king of statement can be visited. public boolean visit(ForStatement node) { System.out.println("ForStatement -- content:" + node.toString()); ArrayList<Integer> al = new ArrayList<Integer>(); al.add(node.getStartPosition()); al.add(node.getLength()); statements.add(al); return false; } /* IfStatement ForStatement WhileStatement DoStatement TryStatement SwitchStatement SynchronizedStatement */ } |
Puede haber una mejor manera de hacer esto, pero seguramente esto funciona y es mucho mejor que escribir un analizador desde cero.
Salud.
Aquí hay una publicación sobre el uso de JDT ASTParser para analizar una clase que reside en un archivo .java.