/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.util.annotation; import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.Set; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.Task; import org.apache.tools.ant.types.Path; import org.apache.tools.ant.types.Reference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * Scans for annotations and writes the names of classes using them to a file. */ public class AnnotationScannerTask extends Task { private static final Logger s_logger = LoggerFactory.getLogger(AnnotationScannerTask.class); private String _outputFile; private String _annotationClassName; private String[] _classpath; private String getOutputFile() { return _outputFile; } public void setOutputFile(String outputFile) { _outputFile = outputFile; } public String getAnnotationClassName() { return _annotationClassName; } public void setAnnotationClassName(String annotationClassName) { _annotationClassName = annotationClassName; } public void setClasspathref(Reference classpathref) { Path classpath = new Path(getProject()); classpath.setRefid(classpathref); _classpath = classpath.list(); } //------------------------------------------------------------------------- @Override public void execute() throws BuildException { if (getOutputFile() == null) { throw new BuildException("outputFile must be set"); } File outputFile = new File(getOutputFile()); if (outputFile.exists() && !outputFile.canWrite()) { throw new BuildException("Cannot write to file '" + outputFile + "'"); } if (getAnnotationClassName() == null) { throw new BuildException("annotationClassName must be set"); } Set<String> classNames; try { classNames = ClassNameAnnotationScannerUtils.scan(_classpath, getAnnotationClassName()); } catch (Exception e) { throw new BuildException("Error scanning for annotated classes", e); } try { PrintWriter writer = new PrintWriter(outputFile); for (String className : classNames) { writer.println(className); } writer.close(); } catch (IOException e) { s_logger.error("Error writing to output file", e); throw new BuildException("Error writing to output file", e); } } }