1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 package org.eluder.coveralls.maven.plugin.parser;
26
27 import java.io.File;
28 import java.io.IOException;
29
30 import javax.xml.stream.XMLStreamException;
31 import javax.xml.stream.XMLStreamReader;
32
33 import org.eluder.coveralls.maven.plugin.ProcessingException;
34 import org.eluder.coveralls.maven.plugin.domain.Source;
35 import org.eluder.coveralls.maven.plugin.source.SourceCallback;
36 import org.eluder.coveralls.maven.plugin.source.SourceLoader;
37
38
39
40
41
42
43 @Deprecated(since = "5.0.0", forRemoval = true)
44 public class CoberturaParser extends AbstractXmlEventParser {
45
46
47 protected Source source;
48
49
50 protected boolean inMethods;
51
52
53 private int branchId;
54
55
56
57
58
59
60
61
62
63 public CoberturaParser(final File coverageFile, final SourceLoader sourceLoader) {
64 super(coverageFile, sourceLoader);
65 }
66
67 @Override
68 protected void onEvent(final XMLStreamReader xml, final SourceCallback callback)
69 throws XMLStreamException, ProcessingException, IOException {
70 if (this.isStartElement(xml, "class")) {
71 this.source = this.loadSource(xml.getAttributeValue(null, "filename"));
72 final var className = xml.getAttributeValue(null, "name");
73 final var classifierPosition = className.indexOf('$');
74 if (classifierPosition > 0) {
75 this.source.setClassifier(className.substring(classifierPosition + 1));
76 }
77 this.branchId = 0;
78 } else if (this.isStartElement(xml, "methods") && this.source != null) {
79 this.inMethods = true;
80 } else if (this.isEndElement(xml, "methods") && this.source != null) {
81 this.inMethods = false;
82 } else if (this.isStartElement(xml, "line") && !this.inMethods && this.source != null) {
83 final var nr = Integer.parseInt(xml.getAttributeValue(null, "number"));
84 this.source.addCoverage(nr, Integer.valueOf(xml.getAttributeValue(null, "hits")));
85 if (Boolean.parseBoolean(xml.getAttributeValue(null, "branch"))) {
86 final var value = xml.getAttributeValue(null, "condition-coverage");
87
88
89 if (value == null) {
90 return;
91 }
92
93
94 final var values = value
95 .replace(" ", "")
96 .replace("%", "/")
97 .replace("(", "")
98 .replace(")", "")
99 .split("/", -1);
100
101 final var cb = Integer.parseInt(values[1]);
102 final var tb = Integer.parseInt(values[2]);
103 final var mb = tb - cb;
104
105
106
107 for (var b = 0; b < cb; b++) {
108 this.source.addBranchCoverage(nr, 0, this.branchId++, 1);
109 }
110 for (var b = 0; b < mb; b++) {
111 this.source.addBranchCoverage(nr, 0, this.branchId++, 0);
112 }
113 }
114 } else if (this.isEndElement(xml, "class") && this.source != null) {
115 callback.onSource(this.source);
116 this.source = null;
117 }
118 }
119
120 }