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();
}