package org.testng.eclipse.refactoring; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.MarkerAnnotation; import org.eclipse.jdt.core.dom.MethodDeclaration; 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 removes the @Test annotation on the class and moves it * to all the public methods. * * @author Cedric Beust <cedric@beust.com> */ public class PushTestRewriter implements IRewriteProvider { public ASTRewrite createRewriter(CompilationUnit astRoot, AST ast) { final ASTRewrite result = ASTRewrite.create(astRoot.getAST()); TestNGVisitor visitor = new TestNGVisitor(); astRoot.accept(visitor); // // Remove the class @Test annotation // result.remove(visitor.getTestClassAnnotation(), null); // // Add a @Test annotation on all the public methods that don't already // have a TestNG annotation. // for (MethodDeclaration md : visitor.getPublicMethods()) { ListRewrite lr = result.getListRewrite(md, MethodDeclaration.MODIFIERS2_PROPERTY); MarkerAnnotation test = ast.newMarkerAnnotation(); test.setTypeName(ast.newSimpleName("Test")); lr.insertFirst(test, null); } return result; } public String getName() { return "Move the @Test class annotation into the class"; } }