`
plutluo
  • 浏览: 7564 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

JDT随记-ASTNode分类生成

阅读更多
现把一些 Java代码生成对应的ASTNode方式列出来,供参考:

List 1 生成Package
// package astexplorer;
java 代码
 
  1. PackageDeclaration packageDeclaration = ast.newPackageDeclaration();  
  2. unit.setPackage(packageDeclaration);  
  3. packageDeclaration.setName(ast.newSimpleName("astexplorer")); 
List 2 生成Import
// import org.eclipse.swt.SWT;
// import org.eclipse.swt.events.*;
// import org.eclipse.swt.graphics.*;
// import org.eclipse.swt.layout.*;
// import org.eclipse.swt.widgets.*;
java 代码
 
  1. for (int i = 0; i < IMPORTS.length; ++i) {  
  2. ImportDeclaration importDeclaration = ast.newImportDeclaration();  
  3. importDeclaration.setName(ast.newName(getSimpleNames(IMPORTS[i])));  
  4. if (IMPORTS[i].indexOf("*") > 0)  
  5. importDeclaration.setOnDemand(true);  
  6. else  
  7. importDeclaration.setOnDemand(false);  
  8.   
  9. unit.imports().add(importDeclaration);  
  10. }  
List 3 生成Class Declaration
// public class SampleComposite extends Composite 
java 代码
 
  1. TypeDeclaration classType = ast.newTypeDeclaration();  
  2. classType.setInterface(false);  
  3. classType.setModifiers(Modifier.PUBLIC);  
  4. classType.setName(ast.newSimpleName("SampleComposite"));  
  5. classType.setSuperclass(ast.newSimpleName("Composite"));  
  6. unit.types().add(classType);  


List 4 生成Constructor Declaration

// public SampleComposite(Composite parent,int style){}
java 代码
 
  1. MethodDeclaration methodConstructor = ast.newMethodDeclaration();  
  2. methodConstructor.setConstructor(true);  
  3. methodConstructor.setModifiers(Modifier.PUBLIC);  
  4. methodConstructor.setName(ast.newSimpleName("SampleComposite"));  
  5. classType.bodyDeclarations().add(methodConstructor);  
  6.   
  7. // constructor parameters  
  8.   
  9. SingleVariableDeclaration variableDeclaration = ast.newSingleVariableDeclaration();  
  10. variableDeclaration.setModifiers(Modifier.NONE);  
  11. variableDeclaration.setType(ast.newSimpleType(ast.newSimpleName("Composite")));  
  12. variableDeclaration.setName(ast.newSimpleName("parent"));  
  13. methodConstructor.parameters().add(variableDeclaration);  
  14.   
  15. variableDeclaration = ast.newSingleVariableDeclaration();  
  16. variableDeclaration.setModifiers(Modifier.NONE);  
  17. variableDeclaration.setType(ast.newPrimitiveType(PrimitiveType.INT));  
  18. variableDeclaration.setName(ast.newSimpleName("style"));  
  19. methodConstructor.parameters().add(variableDeclaration);  
  20. Block constructorBlock = ast.newBlock();  
  21. methodConstructor.setBody(constructorBlock);
 List 5 生成Spuer Invocation

// super(parent,style)
java 代码
 
  1. SuperConstructorInvocation superConstructorInvocation = ast.newSuperConstructorInvocation();  
  2. constructorBlock.statements().add(superConstructorInvocation);  
  3. Expression exp = ast.newSimpleName("parent");  
  4. superConstructorInvocation.arguments().add(exp);  
  5. superConstructorInvocation.arguments().add(ast.newSimpleName("style"));  

List 6 生成ClassInstanceCreation

// GridLayout gridLayout = new GridLayout();
java 代码
 
  1. VariableDeclarationFragment vdf = ast.newVariableDeclarationFragment();  
  2. vdf.setName(ast.newSimpleName("gridLayout"));  
  3. ClassInstanceCreation cc = ast.newClassInstanceCreation();  
  4. cc.setName(ast.newSimpleName("GridLayout"));  
  5. vdf.setInitializer(cc);  
  6. VariableDeclarationStatement vds = ast.newVariableDeclarationStatement(vdf);  
  7. vds.setType(ast.newSimpleType(ast.newSimpleName("GridLayout"))); 
  8. constructBlock.statements().add(vds);

// Label label = new Label(this,SWT.NONE);
java 代码
 
  1. VariableDeclarationFragment vdf = ast.newVariableDeclarationFragment();  
  2. vdf.setName(ast.newSimpleName("label"));  
  3. cc = ast.newClassInstanceCreation();  
  4. cc.setName(ast.newSimpleName("Label"));  
  5. cc.arguments().add(ast.newThisExpression());  
  6. cc.arguments().add(ast.newName(getSimpleNames("SWT.NONE")));  
  7. vdf.setInitializer(cc); 
  8. VariableDeclarationStatement vds = ast.newVariableDeclarationStatement(vdf);  
  9. vds.setType(ast.newSimpleType(ast.newSimpleName("Label")));
  10. constructBlock.statements().add(vds);

List 7生成MethodInvocation

// setLayout(gridLayout);
java 代码
 
  1. MethodInvocation mi = ast.newMethodInvocation();  
  2. mi.setName(ast.newSimpleName("setLayout"));  
  3. mi.arguments().add(ast.newSimpleName("gridLayout")); 
  4. constructorBlock.statements().add(ast.newExpressionStatement(mi));
// label.setText("Press the button to close:");
         java 代码
  1. mi = ast.newMethodInvocation();   
  2. mi.setExpression(ast.newSimpleName("label"));   
  3. mi.setName(ast.newSimpleName("setText"));   
  4. StringLiteral sl = ast.newStringLiteral();   
  5. sl.setLiteralValue("Press the button to close:");   
  6. mi.arguments().add(sl);   
  7. constructorBlock.statements().add(ast.newExpressionStatement(mi));  
// label.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER));
           java 代码
  1. mi = ast.newMethodInvocation();   
  2. mi.setExpression(ast.newSimpleName("label"));   
  3. mi.setName(ast.newSimpleName("setLayoutData"));   
  4.   
  5. cc = ast.newClassInstanceCreation();   
  6. cc.setName(ast.newSimpleName("GridData"));   
  7. cc.arguments().add(ast.newName(getSimpleNames("GridData.HORIZONTAL_ALIGN_CENTER")));   
  8. mi.arguments().add(cc);   
  9. constructorBlock.statements().add(ast.newExpressionStatement(mi));  

 // Button button = new Button(this,SWT.PUSH);

java 代码
  1. vdf = ast.newVariableDeclarationFragment();   
  2. vdf.setName(ast.newSimpleName("button"));   
  3. vds = ast.newVariableDeclarationStatement(vdf);   
  4. vds.setType(ast.newSimpleType(ast.newSimpleName("Button")));   
  5. constructorBlock.statements().add(vds);   
  6.   
  7. cc = ast.newClassInstanceCreation();   
  8. cc.setName(ast.newSimpleName("Button"));   
  9. vdf.setInitializer(cc);   
  10. cc.arguments().add(ast.newThisExpression());   
  11. cc.arguments().add(ast.newName(getSimpleNames("SWT.PUSH")));  

// button.addSelectionListener(new SelectionAdapter() {});

    java 代码

  1. mi = ast.newMethodInvocation();   
  2. constructorBlock.statements().add(ast.newExpressionStatement(mi));   
  3. mi.setExpression(ast.newSimpleName("button"));   
  4. mi.setName(ast.newSimpleName("addSelectionListener"));   
  5.   
  6. ClassInstanceCreation ci = ast.newClassInstanceCreation();   
  7. ci.setName(ast.newSimpleName("SelectionAdapter"));   
  8. mi.arguments().add(ci);   
  9. AnonymousClassDeclaration cd = ast.newAnonymousClassDeclaration();   
  10. ci.setAnonymousClassDeclaration(cd); 
分享到:
评论
1 楼 upupsky 2008-06-20  
怎么在一个java语句之前添加一个MethodInvocation?
比如有条语句 Sytem.out.println("World");

而我要在之前加入Sytem.out.print("Hello ");

相应的步骤应该是:
1.遍历源代码,找出Sytem.out.println("World");语句
2.在其之前加入Sytem.out.print("Hello ");
3.将修改后的代码存入文件.

具体应该怎么做?

有劳!

相关推荐

    jdt-compiler-3.1.1.jar

    java开发常用 jdt-compiler-3.1.1.jar

    基于Eclipse-JDT生成Java源代码的AST并可视化.zip

    本资料“基于Eclipse-JDT生成Java源代码的AST并可视化.zip”着重介绍了如何利用Eclipse JDT来生成Java源代码的抽象语法树(Abstract Syntax Tree, AST)并进行可视化展示。 首先,让我们深入了解什么是AST。AST是一...

    jdt-language-server-0.45.0-201910031256.tar.gz

    标题中的"jdt-language-server-0.45.0-201910031256.tar.gz"是一个软件包,基于其命名规则,我们可以推断它是一个使用tar.gz格式压缩的文件,这种格式在Linux和Unix环境中常见。"jdt-language-server"部分表明这是...

    jasper-compiler-jdt-5.5.15.jar

    《jasper-compiler-jdt-5.5.15.jar:解决IReporter编译问题的利器》 在IT行业中,报告生成是企业级应用的重要组成部分,而 JasperReports 是一款广泛使用的开源报表工具,它允许开发者创建复杂的报表并嵌入到Java...

    eclipse3.0.1 and NLpack-eclipse-JDT-SDK-3.0.x

    Eclipse 3.0.1 和 NLpack-eclipse-JDT-SDK-3.0.x 是两个重要的组件,它们在IT领域特别是Java开发中扮演着关键角色。Eclipse是一款开源的集成开发环境(IDE),而NLpack-eclipse-JDT-SDK则是针对Eclipse的一款插件,...

    homebrew-jdt-language-server:Eclipse JDT语言服务器的Homebrew公式

    **Homebrew-JDT-Language-Server:Eclipse JDT 语言服务器的Homebrew公式** Homebrew 是一个开源的包管理器,主要用于 macOS 系统,它允许用户方便地安装、管理和升级命令行工具。Eclipse JDT(Java Development ...

    Java解析语法树(AST)使用JDT相关库

    包括以下包:jdt-3.2.1-r321_v20060823.jar、 jdt-3.3.0-v20070607-1300.jar、jdt-3.4.2_r894.jar、jdt-compiler.jar、org.eclipse.datatools.enablement.jdt.classpath_1.0.1.v201107221501.jar、org.eclipse.jdt....

    AST整理.txt学习JDT的AST相关网站和资料收集

    - [Exploring Eclipse AST Parser](http://www.ibm.com/developerworks/cn/opensource/os-ast/index.html#resources) - [Eclipse JDT - AST and Java Model Tutorial]...

    eclipse-JDT-3.2.2免费下载 完全版

    eclipse-JDT-3.2.2 免费下载 完全版eclipse-JDT-3.2.2 免费下载 完全版eclipse-JDT-3.2.2 免费下载 完全版eclipse-JDT-3.2.2 免费下载 完全版eclipse-JDT-3.2.2 免费下载 完全版eclipse-JDT-3.2.2 免费下载 完全版...

    jdt-compiler-3.1.1 + itext-2.1.7 + iTextAsian的jar包组合

    总结来说,"jdt-compiler-3.1.1 + itext-2.1.7 + iTextAsian"的组合为Java开发提供了强大的PDF生成和中文显示功能,尤其是在ireport报表设计中。同时,正确配置字体是确保中文正确显示的关键。开发者需要理解这些库...

    eclipse-jdt-3.6.1-6.13.el6.i686.rpm

    eclipse-jdt-3.6.1-6.13.el6.i686.rpm

    clicy:使用JDT生成Java文件AST的点格式的Eclipse插件

    首先,使用Eclipse JDT(Java开发工具)生成并解析Abstract语法树,然后将其转换为点格式。 在您的eclipse文件夹中写入了一个包含点格式AST的新文件。 到目前为止,点格式仅包含有关Java代码的基本信息。 例子: ...

    jdt.rar_jdt-compiler.jar

    标题中的"jdt.rar_jdt-compiler.jar"指的是Java Development Toolkit (JDT) 的一部分,具体是JDT的编译器组件,即`jdt-compiler.jar`。JDT是Eclipse IDE的一个核心插件,它提供了强大的Java编程支持,包括代码编辑、...

    jdt需要的jar包

    总的来说,"jdt-needed"这个压缩包是Eclipse ASTView的运行必需组件,它涵盖了从Java源代码解析到图形化展示AST的全过程所涉及的关键技术,对于Java开发人员和语言处理工具的开发者来说,这些都是深入理解Java语言...

    Eclipse JDT AST使用方法(word)

    要获取ASTNode的子节点,我们不能直接调用`getChildren()`方法,因为ASTNode没有提供这个方法。相反,子节点通过特定的属性关联到父节点。例如,TypeDeclaration节点(表示类声明)可能包含一个SimpleName节点(表示...

    Eclipse jdt 2.0 plugin developer guide

    根据给定的文件信息,我们可以总结出以下关于Eclipse JDT 2.0插件开发者指南的相关知识点: ### 一、概述 Eclipse JDT(Java Development Tools)2.0 插件开发者指南是一份由OTI(Open Tooling Initiative)编写的...

    eclipse-JDT-3.3.1.zip

    在标题中提到的“eclipse-JDT-3.3.1.zip”是一个Eclipse JDT的特定版本,即3.3.1版本的归档文件。这个版本发布于2007年,作为Eclipse 3.3(Europa)的一部分,它包含了用于开发Java应用程序的各种工具和API。 ...

Global site tag (gtag.js) - Google Analytics