package org.jboss.seam.wicket.ioc; import java.io.File; import java.util.HashSet; import java.util.Set; import javassist.ClassPool; import javassist.LoaderClassPath; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.FileSet; import org.apache.tools.ant.types.Path; public class WicketInstrumentationTask extends Task { Path buildPath; public Path getBuildPath() { return buildPath; } public void setBuildPath(Path buildPath) { this.buildPath = buildPath; } public void addClasspath(Path path) { buildPath = path; } private File outputDirectory; public File getOutputDirectory() { return outputDirectory; } public void setOutputDirectory(File outputDirectory) { this.outputDirectory = outputDirectory; } private FileSet fileset; public void addFileset(FileSet fileset) { this.fileset = fileset; } private boolean useAnnotations = false; public boolean isUseAnnotations() { return useAnnotations; } public void setUseAnnotations(boolean useAnnotations) { this.useAnnotations = useAnnotations; } @Override public void execute() { try { ClassPool classPool = new ClassPool(); classPool.insertClassPath(new LoaderClassPath(getProject().createClassLoader(buildPath))); //List<CtClass> instrumentedClasses = new ArrayList<CtClass>(); JavassistInstrumentor instrumentor = new JavassistInstrumentor(classPool,useAnnotations); Set<String> toInstrument = new HashSet<String>(); for (String file : fileset.getDirectoryScanner(getProject()).getIncludedFiles()) { if (file.endsWith(".class")) { toInstrument.add(filenameToClassname(file)); } } instrumentor.instrumentClassSet(toInstrument,outputDirectory.getPath()); } catch (Exception e) { throw new RuntimeException(e); } } protected static String filenameToClassname(String filename) { return filename.substring(0, filename.lastIndexOf(".class")).replace('/', '.').replace('\\', '.'); } }