@@ -35,11 +35,41 @@ public function getPrModifiedLines(string $diff): array
3535 */
3636 public function getCoverageLines (string $ coverageReport ): array
3737 {
38- $ uncoveredLines = [];
39- $ coveredLines = [];
4038 $ coverage = new SimpleXMLElement ($ coverageReport );
4139 $ projectXMLElement = $ coverage ->project ;
42- $ files = $ projectXMLElement ->package ->file ?? $ projectXMLElement ->file ;
40+ $ hasPackage = $ projectXMLElement ->package ;
41+ if ($ hasPackage ) {
42+ [$ uncoveredLines , $ coveredLines ] = $ this ->getPackageLines ($ projectXMLElement );
43+ } else {
44+ [$ uncoveredLines , $ coveredLines ] = $ this ->getFileLines ($ projectXMLElement ->file );
45+ }
46+ return [$ uncoveredLines , $ coveredLines ];
47+ }
48+
49+ /**
50+ * @return array<int, array<string, array<int, int>>>
51+ */
52+ private function getPackageLines (SimpleXMLElement $ project ): array
53+ {
54+ $ uncoveredLines = [];
55+ $ coveredLines = [];
56+ foreach ($ project ->package as $ package ) {
57+ [$ uncoveredLinesResult , $ coveredLinesResult ] = $ this ->getFileLines ($ package ->file );
58+ $ uncoveredLines [] = $ uncoveredLinesResult ;
59+ $ coveredLines [] = $ coveredLinesResult ;
60+ }
61+ $ uncoveredLines = array_merge ([], ...$ uncoveredLines );
62+ $ coveredLines = array_merge ([], ...$ coveredLines );
63+ return [$ uncoveredLines , $ coveredLines ];
64+ }
65+
66+ /**
67+ * @return array<int, array<string, array<int, int>>>
68+ */
69+ private function getFileLines (SimpleXMLElement $ files ): array
70+ {
71+ $ uncoveredLines = [];
72+ $ coveredLines = [];
4373 foreach ($ files as $ file ) {
4474 $ filename = $ this ->parseName ((string )$ file ['name ' ]);
4575 foreach ($ file ->line as $ line ) {
@@ -50,8 +80,7 @@ public function getCoverageLines(string $coverageReport): array
5080 }
5181 }
5282 }
53-
54- return [$ uncoveredLines , $ coveredLines ];
83+ return array ($ uncoveredLines , $ coveredLines );
5584 }
5685
5786 private function parseName (string $ fileName ): string
0 commit comments