Eclipse如何生成JAVA代码

现把一些 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"));  

    // 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")));  

      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); 

    7. vdf.setInitializer(cc); 
    8. VariableDeclarationStatement vds = ast.newVariableDeclarationStatement(vdf);  
    9. vds.setType(ast.newSimpleType(ast.newSimpleName("Label")));
    10. constructBlock.statements().add(vds);
  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);

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值