/** {@inheritDoc} */
  @Override
  public BuildResult perform(final AbstractBuild<?, ?> build, final PluginLogger logger)
      throws InterruptedException, IOException {
    File logFile = build.getLogFile();

    Set<String> validParsers = Sets.newHashSet(getParserNames());
    ParserResult project;
    if (StringUtils.isNotBlank(getPattern())) {
      logger.log("Parsing warnings in files: " + getPattern());
      FilesParser parser =
          new FilesParser(
              logger,
              getPattern(),
              new FileWarningsParser(
                  validParsers, getDefaultEncoding(), getIncludePattern(), getExcludePattern()),
              isMavenBuild(build),
              isAntBuild(build));
      project = build.getWorkspace().act(parser);
    } else {
      project = new ParserResult(build.getWorkspace());
    }

    if (!ignoreConsole || StringUtils.isBlank(getPattern())) {
      logger.log("Parsing warnings in console log...");
      ParserRegistry registry =
          new ParserRegistry(
              ParserRegistry.getParsers(validParsers),
              getDefaultEncoding(),
              getIncludePattern(),
              getExcludePattern());
      Collection<FileAnnotation> warnings = registry.parse(logFile);
      if (!build.getWorkspace().isRemote()) {
        String workspace = build.getWorkspace().getRemote();
        ModuleDetector detector = new ModuleDetector(new File(workspace));
        for (FileAnnotation annotation : warnings) {
          String module = detector.guessModuleName(annotation.getFileName());
          annotation.setModuleName(module);
        }
      }

      project.addAnnotations(warnings);
    }
    project = build.getWorkspace().act(new AnnotationsClassifier(project, getDefaultEncoding()));
    for (FileAnnotation annotation : project.getAnnotations()) {
      annotation.setPathName(build.getWorkspace().getRemote());
    }

    WarningsResult result = new WarningsResult(build, getDefaultEncoding(), project);
    build.getActions().add(new WarningsResultAction(build, this, result));

    return result;
  }
  /**
   * Runs all parsers and logs the results to the console.
   *
   * @throws IOException Signals that an I/O exception has occurred.
   */
  @Test
  public void testAllParsersOnOneFile() throws IOException {
    for (ParserDescription parser : ParserRegistry.getAvailableParsers()) {
      List<AbstractWarningsParser> parsers = ParserRegistry.getParsers(parser.getGroup());
      if (!(parsers.get(0) instanceof ViolationsAdapter)) {
        ParserRegistry parserRegistry = createRegistry(parsers);

        long start = System.currentTimeMillis();
        parserRegistry.parse(new File(""));
        long end = System.currentTimeMillis();
        System.out.println(parser.getName() + ": " + (end - start) + "ms"); // NOCHECKSTYLE NOPMD
      }
    }
  }
 /** {@inheritDoc} */
 public String getDisplayName() {
   if (group == null) {
     return Messages.Warnings_ProjectAction_Name();
   } else {
     return ParserRegistry.getParser(group).getLinkName().toString();
   }
 }
 /**
  * Returns the names of the configured parsers of this publisher.
  *
  * @return the parser names
  */
 public List<String> getParserNames() {
   return ParserRegistry.filterExistingParserNames(parserNames);
 }
 @Override
 protected String getSerializationFileName() {
   FileChecker fileChecker = new FileChecker(getOwner().getRootDir());
   return getFileName(fileChecker, ParserRegistry.getUrl(group));
 }
 @Override
 public String getSummary() {
   return ParserRegistry.getParser(group).getLinkName()
       + ": "
       + createDefaultSummary(getUrl(), getNumberOfAnnotations(), getNumberOfModules());
 }
 @Override
 public String getHeader() {
   return ParserRegistry.getParser(group).getLinkName().toString();
 }