protected List getRootHandlers()

in agent/src/jetbrains/buildServer/xmlReportPlugin/parsers/findBugs/FindBugsReportXmlParser.java [26:117]


  protected List<XmlXppAbstractParser.XmlHandler> getRootHandlers() {
    return new ORHandler(elementsPath(new XmlXppAbstractParser.Handler() {
      public XmlXppAbstractParser.XmlReturn processElement(@NotNull final XmlXppAbstractParser.XmlElementInfo reader) {
        return reader.visitChildren(
          elementsPath(new XmlXppAbstractParser.Handler() {
            public XmlXppAbstractParser.XmlReturn processElement(@NotNull final XmlXppAbstractParser.XmlElementInfo reader) {
              final TextHandler textHandler = new TextHandler() {
                public void setText(@NotNull final String text) {
                  myCallback.jarFound(ParserUtils.formatText(text));
                }
              };
              return reader.visitChildren(
                elementsPath(textHandler, "Jar"),
                elementsPath(textHandler, "SrcDir")
              );
            }
          }, "Project"),

          elementsPath(new XmlXppAbstractParser.Handler() {
            public XmlXppAbstractParser.XmlReturn processElement(@NotNull final XmlXppAbstractParser.XmlElementInfo reader) {
              final String type = reader.getAttribute("type");
              final String category = reader.getAttribute("category");
              final int priority = getInt(reader.getAttribute("priority"));

              final String[] clazz = new String[1];
              final String[] message = new String[1];
              final SourceLine sourceLine = new SourceLine();
              final StringBuilder details = new StringBuilder();

              final XmlHandler sourceLineHandler = elementsPath(new Handler() {
                public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                  sourceLine.update(reader.getAttribute("sourcepath"), getInt(reader.getAttribute("start")), reader.getAttribute("primary"));
                  return reader.noDeep();
                }
              }, "SourceLine");

              return reader.visitChildren(
                elementsPatternPath(new Handler() {
                  public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                    if (clazz[0] == null) { // accept only first Class tag
                      clazz[0] = reader.getAttribute("classname");
                      return reader.visitChildren(sourceLineHandler);
                    }
                    return reader.noDeep();
                  }
                }, "Class"),

                elementsPatternPath(new Handler() {
                  public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                    //noinspection ConstantConditions
                    if (reader.getAttribute("classname").equals(clazz[0])) {
                      details.append(" ").append(reader.getLocalName())
                             .append("[")
                             .append("name=\"").append(reader.getAttribute("name")).append("\" ")
                             .append("signature=\"").append(reader.getAttribute("signature")).append("\"")
                             .append("]");
                      return reader.visitChildren(sourceLineHandler);
                    }
                    return reader.noDeep();
                  }
                }, "(Method)|(Field)"),

                elementsPatternPath(new Handler() {
                  public XmlReturn processElement(@NotNull final XmlElementInfo reader) {
                    details.append(" ").append("LocalVariable[name=\"").append(reader.getAttribute("name")).append("\"]");
                    return reader.noDeep();
                  }
                }, "LocalVariable"),

                sourceLineHandler,

                elementsPath(new TextHandler() {
                  public void setText(@NotNull final String text) {
                    if (message[0] == null) message[0] = ParserUtils.formatText(text);
                  }
                }, "ShortMessage", "LongMessage")
              ).than(new XmlAction() {
                public void apply() {
                  myCallback.bugInstanceFound(sourceLine.getFile(), clazz[0], sourceLine.getLine(), type, category, message[0], details.toString(), priority);
                }
              });
            }
          }, "BugInstance")
        );
      }
    }, "BugCollection")) {
      @Override
      protected void finished(final boolean matched) {
        if (!matched) myCallback.error("Unexpected report format: \"BugCollection\" root element not present. Please check FindBugs sources bugcollection.xsd for the supported schema");
      }
    }.asList();
  }