快速业务通道

探索Eclipse的ASTParser - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
ASTParser(4) 时间:2011-04-11 IBM Manoel Marques

要注意节点的组合,整个语句是一个 GridLayout 类型的 VariableDeclarationStatement。它包含一个 VariableDeclarationFragment,后者包含 ClassInstanceCreation。

使用 Assignment 表达式也可以创建同样的语句,如清单 7 所示。

清单 7. 创建同一语句的另一种方法

Assignment a = ast.newAssignment(); a.setOperator(Assignment.Operator.ASSIGN); VariableDeclarationFragment vdf = ast.newVariableDeclarationFragment(); vdf.setName(ast.newSimpleName("gridLayout")); VariableDeclarationExpression vde = ast.newVariableDeclarationExpression (vdf); vde.setType(ast.newSimpleType(ast.newSimpleName("GridLayout"))); a.setLeftHandSide(vde); ClassInstanceCreation cc = ast.newClassInstanceCreation(); cc.setName(ast.newSimpleName("GridLayout")); a.setRightHandSide(cc); constructorBlock.statements().add(ast.newExpressionStatement(a));

可以将其看作一个 Assignment 表达式,左侧是包含 VariableDeclarationFragment 的 VariableDeclarationExpression,右侧是一个 ClassInstanceCreation。要注意,在 添加到语句列表之前,Assignment 表达式首先要通过 newExpressionStatement() 方法使 用 Statement 包装起来。

两种方法都生成同样的源代码,但是应该使用第一种方法。如果解析已有的代码,就会 看到节点是按照第一种方法创建的。这也是为何强调使用 ASTExplorer 这个例子的原因。 这样您可以看到解析器为特定代码片段创建的节点,从而按照同样的方式创建自己的节点 。

仔细看一看 ASTMain 类,就可以了解在几种情况下如何创建不同的节点。我尽量包含 所有所需技巧的结构,比如内部类、try 块、数组参数,等等。我将介绍我曾经遇到问题 ,同时还将介绍您可能需要帮助的地方。

获得实际的源代码

有了编译单元之后,就可以很轻松地获得实际的源代码。

调用 recordModifications() 可以完成一半的工作,剩下的工作可以在编译单元中调 用 rewrite() 方法来完成。该方法需要一个 org.eclipse.jface.text.IDocument 实例和 格式化选项 Map。IDocument 实例包含原来的源代码 —— 该例中没有这样的源代码, rewrite() 方法将合并编译单元中的修改和文档文本,返回包含所有更改内容的 org.eclipse.jface.text.edits.TextEdit 实例。

通过格式化选项可以规定括号和缩进的位置等。在 org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants 类中可以找到所有的 选项列表。

获得 TextEdit 实例之后,可以用它来查看作了哪些更改。不过在该例中,仅仅将这些 更改用于原来的文档。

现在,所有的代码都放在了将准备提取的文档中,这个过程如清单 8 所示。

探索Eclipse的ASTParser(5)

时间:2011-04-11 IBM Manoel Marques

清单 8. 访问编译单元的内容

public char[] getContents() {   char[] contents = null;   try {     Document doc = new Document();     TextEdit edits = unit.rewrite(doc,null);     edits.apply(doc);     String sourceCode = doc.get();     if (sourceCode != null)      contents = sourceCode.toCharArray();   }   catch (BadLocationException e) {     throw new RuntimeException(e);   }   return contents; }

编译生成的代码

Eclipse IDE 在工作区中处理项目。构建整个项目后,要依靠 JDT 检查依赖性和编译 所有的类。Eclipse 帮助中有详细的说明,可以将这些归结如下:

清单 9. 构建 Eclipse 项目

IProj

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号