使用Eclipse AST

最近,我需要修改一些Java代码(添加方法,更改某些字段的签名并除去方法),并且我认为所有这些都可以通过使用Eclipse SDK的AST来实现。

通过一些研究,我知道如何在源文件中进行解析,但是我不知道如何执行上述操作。有谁知道一个好的教程,或者有人可以给我简短的解释如何解决这些问题?

非常感谢,

ExtremeCoder


我现在开始对JCodeModel进行更多研究,我认为这可能更容易使用,但是我不知道是否可以将现有文档加载到其中?

如果可以解决,请告诉我;)

再次感谢。

回答:

我不会将整个源代码发布到这个问题上,因为它很长,但是我会让人们开始。

您将需要的所有文档都在这里:http :

//publib.boulder.ibm.com/infocenter/iadthelp/v6r0/index.jsp?topic=/org.eclipse.jdt.doc.isv/reference/api/org

/eclipse/jdt/core/dom/package-

summary.html

Document document = new Document("import java.util.List;\n\nclass X\n{\n\n\tpublic void deleteme()\n\t{\n\t}\n\n}\n");

ASTParser parser = ASTParser.newParser(AST.JLS3);

parser.setSource(document.get().toCharArray());

CompilationUnit cu = (CompilationUnit)parser.createAST(null);

cu.recordModifications();

这将根据您传入的源代码为您创建一个编译单元。

现在,这是一个简单的函数,它按照您所传递的内容打印出类定义内的所有方法:

List<AbstractTypeDeclaration> types = cu.types();

for(AbstractTypeDeclaration type : types) {

if(type.getNodeType() == ASTNode.TYPE_DECLARATION) {

// Class def found

List<BodyDeclaration> bodies = type.bodyDeclarations();

for(BodyDeclaration body : bodies) {

if(body.getNodeType() == ASTNode.METHOD_DECLARATION) {

MethodDeclaration method = (MethodDeclaration)body;

System.out.println("method declaration: ");

System.out.println("name: " + method.getName().getFullyQualifiedName());

System.out.println("modifiers: " + method.getModifiers());

System.out.println("return type: " + method.getReturnType2().toString());

}

}

}

}

这应该使您入门。

确实需要一些时间来适应这一点(以我为例)。但这确实有效,并且是我可以尝试的最佳方法。

祝好运 ;)

ExtremeCoder


在我忘记之前,这些是我用来完成此工作的导入文件(我花了很多时间来整理这些文件):

org.eclipse.jdt.core_xxxx.jar

org.eclipse.core.resources_xxxx.jar

org.eclipse.core.jobs_xxxx.jar

org.eclipse.core.runtime_xxxx.jar

org.eclipse.core.contenttype_xxxx.jar

org.eclipse.equinox.common_xxxx.jar

org.eclipse.equinox.preferences_xxxx.jar

org.eclipse.osgi_xxxx.jar

org.eclipse.text_xxxx.jar

其中xxxx表示版本号。

以上是 使用Eclipse AST 的全部内容, 来源链接: utcz.com/qa/416843.html

回到顶部