package hudson.plugins.warnings.parser; import hudson.plugins.analysis.core.AnnotationParser; import hudson.plugins.analysis.util.model.FileAnnotation; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.Collection; import java.util.Set; /** * A {@link WarningsParser} that scans files. * * @author Ulli Hafner */ public class FileWarningsParser implements AnnotationParser { /** Unique ID of this parser. */ private static final long serialVersionUID = -262047528431480332L; /** Ant file-set pattern of files to include in report. */ private final String includePattern; /** Ant file-set pattern of files to exclude from report. */ private final String excludePattern; /** The parsers to scan the files with. */ @edu.umd.cs.findbugs.annotations.SuppressWarnings("Se") private final Set<String> parserNames; /** The default encoding to be used when reading and parsing files. */ private final String defaultEncoding; /** * Creates a new instance of {@link FileWarningsParser}. * * @param parserNames * the parsers to scan the files with * @param defaultEncoding * the default encoding to be used when reading and parsing files * @param includePattern * ant file-set pattern of files to include in report * @param excludePattern * ant file-set pattern of files to exclude from report */ public FileWarningsParser(final Set<String> parserNames, final String defaultEncoding, final String includePattern, final String excludePattern) { this.parserNames = parserNames; this.includePattern = includePattern; this.excludePattern = excludePattern; this.defaultEncoding = defaultEncoding; } /** {@inheritDoc} */ public Collection<FileAnnotation> parse(final File file, final String moduleName) throws InvocationTargetException { try { Collection<FileAnnotation> annotations = new ParserRegistry(ParserRegistry.getParsers(parserNames), defaultEncoding, includePattern, excludePattern).parse(file); for (FileAnnotation annotation : annotations) { annotation.setModuleName(moduleName); } return annotations; } catch (IOException exception) { throw new InvocationTargetException(exception, "Can't scan file for warnings: " + file.getAbsolutePath()); } } }