package org.testng.eclipse.refactoring; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.Annotation; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.MarkerAnnotation; import org.eclipse.jdt.core.dom.TypeDeclaration; import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; import org.eclipse.jdt.core.dom.rewrite.ListRewrite; import org.testng.eclipse.ui.conversion.IRewriteProvider; /** * A rewriter that pulls all the @Test annotations at the class level. * * @author Cedric Beust <cedric@beust.com> */ public class PullTestRewriter implements IRewriteProvider { public ASTRewrite createRewriter(CompilationUnit astRoot, AST ast) { final ASTRewrite result = ASTRewrite.create(astRoot.getAST()); TestNGVisitor visitor = new TestNGVisitor(); astRoot.accept(visitor); // // Remove all the @Test annotations // for (Annotation a: visitor.getTestMethods().values()) { result.remove(a, null); } // // Add @Test at the class level // MarkerAnnotation test = ast.newMarkerAnnotation(); test.setTypeName(ast.newName("Test")); ListRewrite lr = result.getListRewrite(visitor.getType(), TypeDeclaration.MODIFIERS2_PROPERTY); lr.insertFirst(test, null); return result; } public String getName() { return "Pull @Test annotations to the class level"; } }