/* * Sonar C# Plugin :: Gallio * Copyright (C) 2010 Jose Chillan, Alexandre Victoor and SonarSource * dev@sonar.codehaus.org * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public * License as published by the Free Software Foundation; either * version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02 */ package org.sonar.plugins.csharp.gallio.results.coverage; import static org.sonar.plugins.csharp.gallio.helper.StaxHelper.advanceCursor; import static org.sonar.plugins.csharp.gallio.helper.StaxHelper.descendantElements; import static org.sonar.plugins.csharp.gallio.helper.StaxHelper.findAttributeIntValue; import static org.sonar.plugins.csharp.gallio.helper.StaxHelper.findAttributeValue; import static org.sonar.plugins.csharp.gallio.helper.StaxHelper.findElementName; import static org.sonar.plugins.csharp.gallio.helper.StaxHelper.nextPosition; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import org.codehaus.staxmate.in.SMFilterFactory; import org.codehaus.staxmate.in.SMInputCursor; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.sonar.api.utils.SonarException; import org.sonar.plugins.csharp.gallio.results.coverage.model.FileCoverage; public class NCover3ParsingStrategy extends AbstractParsingStrategy { private static final Logger LOG = LoggerFactory.getLogger(NCover3ParsingStrategy.class); public NCover3ParsingStrategy() { setPointElement("seqpnt"); setFileIdPointAttribute("doc"); setCountVisitsPointAttribute("vc"); setStartLinePointAttribute("l"); setEndLinePointAttribute("el"); setModuleTag("module"); } @Override public String findAssemblyName(SMInputCursor docTag) { return findAttributeValue(docTag, "assembly"); } @Override public Map<Integer, FileCoverage> findFiles(SMInputCursor docsTag) { Map<Integer, FileCoverage> files = new HashMap<Integer, FileCoverage>(); try { docsTag.setFilter(SMFilterFactory.getElementOnlyFilter("documents")); nextPosition(docsTag); SMInputCursor doc = descendantElements(docsTag); while (nextPosition(doc) != null) { File document = new File(findAttributeValue(doc, "url")); String path = document.getPath(); LOG.debug(path); if ("None".equals(path) || path == null) { LOG.debug("Method coverage data not attached to any file"); } else { files.put(findAttributeIntValue(doc, "id"), new FileCoverage(document.getCanonicalFile())); } advanceCursor(doc); } } catch (IOException e) { throw new SonarException("Unable to get canonicalFile from the created document while parsing NCover3 XML result", e); } return files; } @Override public boolean isCompatible(SMInputCursor rootCursor) { return "coverage".equals(findElementName(rootCursor)); } @Override public void saveAssemblyNamesById(SMInputCursor docsTag) { LOG.debug("Unused method for NCover 3"); } @Override public void saveId(String id) { LOG.debug("Unused method for NCover 3"); } @Override public String getAssemblyReference() { LOG.debug("Unused method for NCover3, return \"\" to avoid null pointer"); return ""; } @Override public void setAssemblyReference(String asmRef) { LOG.debug("Unused method for NCover3"); } }