package org.testng.eclipse.refactoring; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.CompilationUnit; import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; import org.eclipse.ltk.core.refactoring.Change; import org.eclipse.ltk.core.refactoring.CompositeChange; import org.eclipse.ltk.core.refactoring.TextFileChange; import org.eclipse.text.edits.TextEdit; import org.testng.eclipse.ui.conversion.AnnotationRewriter; import java.util.Collection; /** * A composite change that applies to a source folder. * * @author Cedric Beust <cedric@beust.com> */ public class SourceFolderChange extends CompositeChange { public SourceFolderChange(String path, Collection<IResource> resources) { super(path); for (IResource resource : resources) { add(createChange(resource)); } // Unchecking all non test folders. I wish I could also collaps them in the // tree but I haven't found how to do this yet. setEnabled(path.contains("test/")); } private Change createChange(IResource resource) { TextFileChange result = null; // creation of DOM/AST from a ICompilationUnit ASTParser parser = ASTParser.newParser(AST.JLS3); // We need the binding to be able to retrieve the types of the expressions in // the visitor (this is used to determine whether the assert() and fail() method // invocations can be found on the AssertJUnit class or not. If not, we don't // rewrite them since they are probably defined on the super class. parser.setResolveBindings(true); parser.setSource((ICompilationUnit) JavaCore.create(resource)); CompilationUnit astRoot = (CompilationUnit) parser.createAST(null); // AST ast = context.getASTRoot().getAST(); AST ast = astRoot.getAST(); ASTRewrite rewriter = new AnnotationRewriter().createRewriter(astRoot, ast); try { TextEdit edit = rewriter.rewriteAST(); result = new TextFileChange(resource.getName(), (IFile) resource); result.setEdit(edit); } catch (JavaModelException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } return result; } }