关键字: JDT Eclipse 现把一些 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);