まだフィールドに対してはやっていないが,CompilationUnitではなく,TypeDeclarationに対してコードを追加することに成功.おそらくFieldDeclarationに対しても行けそう?
メモ
1 対象のASTNodeを対応するサブクラスの型で取得する(コミット時のコードではTypeDeclaration)
2 ListRewriteのコンストラクタの引数はその取得したASTNodeと,そのクラス内にあるChildListPropertyDescriptor型のフィールドを参照
rewrite.insertで追加
1 parent 710f348 commit 1effa03d2b599d6c15d2551605c122a8416f7b39
Shinji authored on 15 Dec 2022
Showing 1 changed file
View
32
src/org/ntlab/pushPullRefactoring/PushPullProcessor.java
import org.eclipse.jdt.core.dom.ReturnStatement;
import org.eclipse.jdt.core.dom.SingleMemberAnnotation;
import org.eclipse.jdt.core.dom.Statement;
import org.eclipse.jdt.core.dom.Type;
import org.eclipse.jdt.core.dom.TypeDeclaration;
import org.eclipse.jdt.core.dom.VariableDeclaration;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.eclipse.jdt.core.dom.rewrite.ASTRewrite;
import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
CompilationUnit unit = descriptor.getDistinationClass();
///unit.recordModifications();
//動作した分
/*
ASTRewrite rewrite = ASTRewrite.create(unit.getAST());
ListRewrite rewrites = rewrite.getListRewrite(unit, CompilationUnit.TYPES_PROPERTY);
Statement mycomment = (Statement) rewrite.createStringPlaceholder("//mycomment", ASTNode.EMPTY_STATEMENT);
Statement statement = (Statement) rewrite.createStringPlaceholder("Object obj = new Object();", ASTNode.VARIABLE_DECLARATION_STATEMENT);
PackageDeclaration packageDeclaration = unit.getPackage();
FieldDeclaration fd = searchFieldDeclaration(unit, "State");
*/
final ASTNode[] typedec=new ASTNode[1];
unit.accept(new ASTVisitor() {
public boolean visit(TypeDeclaration node) {
typedec[0] = node;
return false;
}
});
final TypeDeclaration typeDeclaration = (TypeDeclaration)typedec[0];
ASTRewrite rewrite = ASTRewrite.create(typeDeclaration.getAST());
ListRewrite rewrites = rewrite.getListRewrite(typeDeclaration, TypeDeclaration.MODIFIERS2_PROPERTY);
Statement mycomment = (Statement) rewrite.createStringPlaceholder("//mycomment"+System.getProperty("line.separator"), ASTNode.EMPTY_STATEMENT);
Statement statement = (Statement) rewrite.createStringPlaceholder("Object obj = new Object();", ASTNode.VARIABLE_DECLARATION_STATEMENT);
PackageDeclaration packageDeclaration = unit.getPackage();
FieldDeclaration fd = searchFieldDeclaration(unit, "State");
rewrite.set(unit, CompilationUnit.PACKAGE_PROPERTY,packageDeclaration, null);
TextEditGroup editGroup = new TextEditGroup("new class edit group");