Java 使用AST解析所选代码
我已经选择了一段代码,我想用AST进行解析,目的是识别所选代码中的方法Java 使用AST解析所选代码,java,eclipse,Java,Eclipse,我已经选择了一段代码,我想用AST进行解析,目的是识别所选代码中的方法 public void run(IAction action) { SelectedText selectedText; IEditorPart editor = getActiveEditor(); if (editor instanceof AbstractTextEditor) { selectedText = getSelectedText(editor);
public void run(IAction action) {
SelectedText selectedText;
IEditorPart editor = getActiveEditor();
if (editor instanceof AbstractTextEditor) {
selectedText = getSelectedText(editor);
creteAST(selectedText);
}
}
private void creteAST(SelectedText selectedText) {
CompilationUnit parse = parse(selectedText);
MethodVisitor visitor = new MethodVisitor();
parse.accept(visitor);
System.out.println("Printing methods from the selected code");
for (MethodDeclaration method : visitor.getMethods()) {
System.out.println("Method name: " + method.getName()+ ". Return type: " + method.getReturnType2());
System.out.println(method);
}
}
private static CompilationUnit parse(SelectedText selectedText) {
String s_text = selectedText.getSelectedText();
char[] c_text = s_text.toCharArray();
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(c_text);
parser.setResolveBindings(true);
return (CompilationUnit) parser.createAST(null);
}
如您所见,在解析之前,我必须将类型从SelectedText
更改为char[]
我做错了,因为解析器没有找到任何方法
我做错了什么 ASTParser.setResolveBindings()的javadoc说明: 绑定信息是从Java模型获得的。这意味着 编译单元必须相对于Java模型定位。这 当源代码来自其中一个源代码时自动发生 setSource(ICompilationUnit)或setSource(IClassFile)。当来源是 由setSource(char[])提供,该位置必须是可扩展的 通过调用setProject(IJavaProject)和 setUnitName(字符串)。请注意,影响文档的编译器选项 注释检查也可能会影响是否解析任何绑定 文档注释中的节点
谢谢,有用的信息!!!但是你知道如何获取javaProject和名称吗???我试图找到一些信息,但没有办法:-(可能
JavaModelManager.getJavaModelManager().getJavaModelManager().getJavaModel().getJavaProject()
应该返回活动项目。在grepcode上查找ASTParser用法示例:
IJavaProject javaProject = ...obtain it somehow, possibly through getAdapter() on editor?
String name = ...from editor?...
ASTParser parser = ASTParser.newParser(AST.JLS3);
parser.setKind(ASTParser.K_COMPILATION_UNIT);
parser.setSource(c_text);
parser.setResolveBindings(true);
parser.setProject(javaProject);
parser.setUnitName(name);
return (CompilationUnit) parser.createAST(null);