private void parseTestCase(SMInputCursor cursor, MutableTestPlan testPlan) throws XMLStreamException { checkElementName(cursor, "testCase"); MutableTestCase testCase = testPlan.addTestCase(mandatoryAttribute(cursor, NAME_ATTR)); TestCase.Status status = TestCase.Status.OK; testCase.setDurationInMs(longValue(mandatoryAttribute(cursor, DURATION_ATTR), cursor, DURATION_ATTR, 0)); SMInputCursor child = cursor.descendantElementCursor(); if (child.getNext() != null) { String elementName = child.getLocalName(); if (SKIPPED.equals(elementName)) { status = TestCase.Status.SKIPPED; } else if (FAILURE.equals(elementName)) { status = TestCase.Status.FAILURE; } else if (ERROR.equals(elementName)) { status = TestCase.Status.ERROR; } if (TestCase.Status.OK != status) { testCase.setMessage(mandatoryAttribute(child, MESSAGE_ATTR)); testCase.setStackTrace(child.collectDescendantText()); } } testCase.setStatus(status); }
public static SMInputCursor descendantElements(SMInputCursor cursor){ try{ return cursor.descendantElementCursor(); }catch(XMLStreamException e){ throw new SonarPluginException("Error while trying to get descendant elements", e); } }
public static SMInputCursor descendantSpecifiedElements(SMInputCursor cursor, String specifiedElements){ try{ return cursor.descendantElementCursor(specifiedElements); }catch(XMLStreamException e){ throw new SonarPluginException("Error while trying to get descendant specified elements", e); } }
public static SMInputCursor descendantSpecifiedElements(SMInputCursor cursor, QName specifiedElements){ try{ return cursor.descendantElementCursor(specifiedElements); }catch(XMLStreamException e){ throw new SonarPluginException("Error while trying to get descendant specified elements", e); } }
private static void extractSourceDirectories(SMInputCursor items, List<String> sourceDirectories) throws XMLStreamException { SMInputCursor sourceDirectoryCursor = items.descendantElementCursor("SourceDirectory"); while (sourceDirectoryCursor.getNext() != null) { String value = sourceDirectoryCursor.getElemStringValue(); if (StringUtils.isNotBlank(value)) { sourceDirectories.add(value.trim().replaceAll("\\\\", "/") + "/"); } } }
private void collectPackageMeasures(final SMInputCursor pack) throws XMLStreamException { while (pack.getNext() != null) { collectFileMeasures(pack.descendantElementCursor("class")); } }
private void parseTargetsBloc(SMInputCursor cursor) throws XMLStreamException { // Cursor on <Targets> SMInputCursor modulesCursor = cursor.descendantElementCursor(MODULE); while (modulesCursor.getNext() != null) { parseModuleMessagesBloc(modulesCursor); } }
private static void collectPackageMeasures(SMInputCursor pack, SensorContext context) throws XMLStreamException { while (pack.getNext() != null) { collectFileMeasures(context, pack.descendantElementCursor("class")); } }
private void collectPackageMeasures(SMInputCursor pack) throws XMLStreamException { while (pack.getNext() != null) { Map<String, ParsingResult> resultByFilename = new HashMap<>(); collectFileMeasures(pack.descendantElementCursor("class"), resultByFilename); handleFileMeasures(resultByFilename); } }
private void parseNamespacesBloc(SMInputCursor cursor) throws XMLStreamException { // Cursor in on <Namespaces> SMInputCursor namespacesCursor = cursor.childElementCursor(NAMESPACE); while (namespacesCursor.getNext() != null) { SMInputCursor messagesCursor = namespacesCursor.descendantElementCursor(MESSAGE); while (messagesCursor.getNext() != null) { createViolationFromMessageAtProjectLevel(messagesCursor); } } }
private void collectPackageMeasures(SMInputCursor packCursor) throws ParseException, XMLStreamException { while (packCursor.getNext() != null) { SMInputCursor packChildrenCursor = packCursor.descendantElementCursor(); packChildrenCursor.setFilter(new SimpleFilter(SMEvent.START_ELEMENT)); //Skip the metrics tag. packChildrenCursor.advance(); collectFileMeasures(packChildrenCursor); } }
@Override public void stream(SMHierarchicCursor rootCursor) throws XMLStreamException { rootCursor.advance(); SMInputCursor fileCursor = rootCursor.descendantElementCursor("file"); while (fileCursor.getNext() != null) { String fileName = fileCursor.getAttrValue("name"); SMInputCursor violationCursor = fileCursor.descendantElementCursor("violation"); while (violationCursor.getNext() != null) { String beginLine = violationCursor.getAttrValue("beginline"); String ruleKey = violationCursor.getAttrValue("rule"); String message = StringUtils.trim(violationCursor.collectDescendantText()); addIssue(ruleKey, fileName, Integer.parseInt(beginLine), message); } } } });
private void collectProjectMeasures(SMInputCursor rootCursor) throws ParseException, XMLStreamException { SMInputCursor projectCursor = rootCursor.descendantElementCursor("project"); SMInputCursor projectChildrenCursor = projectCursor.advance().childElementCursor(); projectChildrenCursor.setFilter(new SimpleFilter(SMEvent.START_ELEMENT)); //Skip the metrics tag. projectChildrenCursor.advance(); collectPackageMeasures(projectChildrenCursor); }
private UnitTestResult parseTestResult(SMInputCursor testCaseCursor) throws XMLStreamException { UnitTestResult detail = new UnitTestResult(); String name = getTestCaseName(testCaseCursor); detail.setName(name); String status = UnitTestResult.STATUS_OK; long duration = getTimeAttributeInMS(testCaseCursor); SMInputCursor childNode = testCaseCursor.descendantElementCursor(); if (childNode.getNext() != null) { String elementName = childNode.getLocalName(); if ("skipped".equals(elementName)) { status = UnitTestResult.STATUS_SKIPPED; // bug with surefire reporting wrong time for skipped tests duration = 0L; } else if ("failure".equals(elementName)) { status = UnitTestResult.STATUS_FAILURE; setStackAndMessage(detail, childNode); } else if ("error".equals(elementName)) { status = UnitTestResult.STATUS_ERROR; setStackAndMessage(detail, childNode); } } while (childNode.getNext() != null) { // make sure we loop till the end of the elements cursor } detail.setDurationMilliseconds(duration); detail.setStatus(status); return detail; }
private UnitTestResult parseTestResult(SMInputCursor testCaseCursor) throws XMLStreamException { UnitTestResult detail = new UnitTestResult(); String name = getTestCaseName(testCaseCursor); detail.setName(name); String status = UnitTestResult.STATUS_OK; long duration = getTimeAttributeInMS(testCaseCursor); SMInputCursor childNode = testCaseCursor.descendantElementCursor(); if (childNode.getNext() != null) { String elementName = childNode.getLocalName(); if ("skipped".equals(elementName)) { status = UnitTestResult.STATUS_SKIPPED; // bug with surefire reporting wrong time for skipped tests duration = 0L; } else if ("failure".equals(elementName)) { status = UnitTestResult.STATUS_FAILURE; setStackAndMessage(detail, childNode); } else if ("error".equals(elementName)) { status = UnitTestResult.STATUS_ERROR; setStackAndMessage(detail, childNode); } } while (childNode.getNext() != null) { // make sure we loop till the end of the elements cursor } detail.setDurationMilliseconds(duration); detail.setStatus(status); return detail; }
private void parseTestCase(SMInputCursor cursor, MutableTestPlan testPlan) throws XMLStreamException { checkElementName(cursor, "testCase"); MutableTestCase testCase = testPlan.addTestCase(mandatoryAttribute(cursor, NAME_ATTR)); TestCase.Status status = TestCase.Status.OK; testCase.setDurationInMs(longValue(mandatoryAttribute(cursor, DURATION_ATTR), cursor, DURATION_ATTR, 0)); SMInputCursor child = cursor.descendantElementCursor(); if (child.getNext() != null) { String elementName = child.getLocalName(); if (SKIPPED.equals(elementName)) { status = TestCase.Status.SKIPPED; } else if (FAILURE.equals(elementName)) { status = TestCase.Status.FAILURE; } else if (ERROR.equals(elementName)) { status = TestCase.Status.ERROR; } if (TestCase.Status.OK != status) { testCase.setMessage(mandatoryAttribute(child, MESSAGE_ATTR)); testCase.setStackTrace(child.collectDescendantText()); } } testCase.setStatus(status); }
private void parseTypeBloc(String namespaceName, SMInputCursor cursor) throws XMLStreamException { // Cursor on <Type> String typeName = cursor.getAttrValue(NAME); Resource<?> typeResource = resourceBridge.getFromTypeName(namespaceName, typeName); SMInputCursor messagesCursor = cursor.descendantElementCursor(MESSAGE); while (messagesCursor.getNext() != null) { // Cursor on <Message> if (messagesCursor.getCurrEvent() == SMEvent.START_ELEMENT) { Rule currentRule = ruleFinder.find(RuleQuery.create().withRepositoryKey(repositoryKey) .withKey(messagesCursor.getAttrValue(TYPENAME))); if (currentRule != null) { // look for all potential issues searchForViolations(messagesCursor, typeResource, currentRule); } else { LOG.warn("Could not find the following rule in the FxCop rule repository: " + messagesCursor.getAttrValue(TYPENAME)); } } } }
private void extractIssues(SMInputCursor items, List<String> sourceDirectories) throws XMLStreamException { String packPath = items.getAttrValue("path"); SMInputCursor file = items.descendantElementCursor("File"); while (file.getNext() != null) { String filename = getFilename(sourceDirectories, packPath, file.getAttrValue("name")); SMInputCursor violation = file.childElementCursor("Violation"); while (violation.getNext() != null) { String lineNumber = violation.getAttrValue("lineNumber"); String ruleName = violation.getAttrValue("ruleName"); SMInputCursor messageCursor = violation.childElementCursor("Message"); String message = messageCursor.getNext() == null ? "" : messageCursor.collectDescendantText(true); result.add(new CodeNarcViolation(ruleName, filename, lineNumber, message)); } } }
public void parseReport(File xmlFile, SensorContext context, final Map<InputFile, NewCoverage> coverageData) throws XMLStreamException { LOG.info("Parsing report '{}'", xmlFile); unresolvedFilenameCount = 0; StaxParser parser = new StaxParser(rootCursor -> { File defaultBaseDirectory = context.fileSystem().baseDir(); List<File> baseDirectories = Collections.singletonList(defaultBaseDirectory); try { rootCursor.advance(); } catch (com.ctc.wstx.exc.WstxEOFException eofExc) { LOG.debug("Unexpected end of file is encountered", eofExc); throw new EmptyReportException(); } SMInputCursor cursor = rootCursor.childElementCursor(); while (cursor.getNext() != null) { if ("sources".equals(cursor.getLocalName())) { baseDirectories = extractBaseDirectories(cursor, defaultBaseDirectory); } else if ("packages".equals(cursor.getLocalName())) { collectFileMeasures(cursor.descendantElementCursor("class"), context, coverageData, baseDirectories); } } }); parser.parse(xmlFile); if (unresolvedFilenameCount > 1) { LOG.error("Cannot resolve {} file paths, ignoring coverage measures for those files", unresolvedFilenameCount); } }
public void parseReport(File xmlFile, SensorContext context, final Map<InputFile, NewCoverage> coverageData) throws XMLStreamException { LOG.info("Parsing report '{}'", xmlFile); unresolvedFilenameCount = 0; StaxParser parser = new StaxParser(rootCursor -> { File defaultBaseDirectory = context.fileSystem().baseDir(); List<File> baseDirectories = Collections.singletonList(defaultBaseDirectory); try { rootCursor.advance(); } catch (com.ctc.wstx.exc.WstxEOFException eofExc) { LOG.debug("Unexpected end of file is encountered", eofExc); throw new EmptyReportException(); } SMInputCursor cursor = rootCursor.childElementCursor(); while (cursor.getNext() != null) { if ("sources".equals(cursor.getLocalName())) { baseDirectories = extractBaseDirectories(cursor, defaultBaseDirectory); } else if ("packages".equals(cursor.getLocalName())) { collectFileMeasures(cursor.descendantElementCursor("class"), context, coverageData, baseDirectories); } } }); parser.parse(xmlFile); if (unresolvedFilenameCount > 1) { LOG.error("Cannot resolve {} file paths, ignoring coverage measures for those files", unresolvedFilenameCount); } }