2010-11-15 111 views
1

鉴于我可以访问IField字段(从另一个Java文件解析),我如何创建FieldDeclaration以将其添加到AST?如何给IField创建FieldDeclaration(Eclipe插件)

String varName = field.getElementName(); 
    String typeName = Signature.toString(field.getTypeSignature()); 

    VariableDeclarationFragment fieldFrag = ast.newVariableDeclarationFragment(); 
    fieldFrag.setName(ast.newSimpleName(varName)); 
    FieldDeclaration field = ast.newFieldDeclaration(fieldFrag); 
    Type fieldType = ast.newSimpleType(ast.newSimpleName(typeName)); 
    field.setType(fieldType); 
    field.modifiers().add(ast.newModifier(modifierKeyword)); 

上面

类型的字段类型= ast.newSimpleType(ast.newSimpleName(typeName的));

仅当typeName不是java关键字时才有效。有另一种方式来简单地创建了所有IField信息一fieldDeclaration(改性剂,类型,变量)

感谢

回答

1

我发现使用copySubtree方式:

AST ast = targetCompilationUnit.getAST(); 

    FieldDeclaration oldFieldDeclaration = ASTNodeSearchUtil.getFieldDeclarationNode(field, sourceCompilationUnit); 
    Type oldType = oldFieldDeclaration.getType(); 

    Type newType = (Type) ASTNode.copySubtree(ast, oldType); 

然后NEWTYPE可用于将其插入FieldDeclaration

0

你可以做这样的事情:

VariableDeclarationFragment fragment = ast.newVariableDeclarationFragment(); 
fragment.setName(ast.newSimpleName("log")); 
final FieldDeclaration declaration = ast.newFieldDeclaration(fragment); 
declaration.setType(ast.newSimpleType(ast.newName("Logger"))); 
declaration.modifiers().addAll(ASTNodeFactory.newModifiers(ast, Modifier.PRIVATE | Modifier.STATIC | Modifier.FINAL)); 

如果你想初始化它:

MethodInvocation methodInvocation = ast.newMethodInvocation(); 
methodInvocation.setName(ast.newSimpleName("getLogger")); 
methodInvocation.setExpression(ast.newSimpleName("Logger")); 
TypeLiteral typeLiteral = ast.newTypeLiteral(); 
typeLiteral.setType(ast.newSimpleType(ast.newName(className))); 
methodInvocation.arguments().add(typeLiteral); 
fragment.setInitializer(methodInvocation); 
+0

我不认为这将工作时,SimpleType是一个原语 – javacoder 2010-11-29 23:17:40