Skip to content

Commit

Permalink
Fix jacoco merger
Browse files Browse the repository at this point in the history
  • Loading branch information
AlbumenJ committed Dec 6, 2024
1 parent f9a3d5f commit 10033bf
Showing 1 changed file with 31 additions and 52 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -16,12 +16,13 @@
*/
package org.apache.dubbo.test;

import org.jacoco.cli.internal.Main;

import java.io.File;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.util.LinkedList;
import java.util.List;
import java.util.stream.Stream;

import org.jacoco.cli.internal.Main;

public class JacocoReport {
public static void main(String[] args) throws Exception {
Expand All @@ -32,42 +33,43 @@ public static void main(String[] args) throws Exception {
String dubboRepo = args[1];

List<File> execFiles = loadExecFiles(new File(basePath + File.separator + "target"));
List<File> classFiles = loadClassFiles(new File(dubboRepo));
List<File> sourceFiles = loadSourceFiles(new File(dubboRepo));
List<File> moduelFiles = loadModuleFiles(new File(dubboRepo));

if (execFiles.isEmpty()) {
System.out.println(basePath + File.separator + "target" + File.separator + "jacoco*.exec" + " does not exist");
return;
}

for (File classFile : moduelFiles) {
System.out.println("Generating report for " + classFile.getAbsolutePath());

String[] execs = execFiles.stream()
.map(File::getAbsolutePath)
.toArray(String[]::new);
String[] classes = classFiles.stream()
.map(File::getAbsolutePath)
.flatMap(s -> Stream.of("--classfiles", s))
.toArray(String[]::new);
String[] sources = sourceFiles.stream()
.map(File::getAbsolutePath)
.flatMap(s -> Stream.of("--sourcefiles", s))
.toArray(String[]::new);
String[] execs = execFiles.stream()
.map(File::getAbsolutePath)
.toArray(String[]::new);
String[] classes = new String[]{"--classfiles", classFile.getAbsolutePath() + File.separator + "target" + File.separator + "classes" + File.separator + "org" + File.separator + "apache" + File.separator + "dubbo"};
String[] sources = new String[]{"--sourcefiles", classFile.getAbsolutePath() + File.separator + "src" + File.separator + "main" + File.separator + "java"};

String[] reportArgs = new String[execs.length + classes.length + sources.length + 5];
reportArgs[0] = "report";
System.arraycopy(execs, 0, reportArgs, 1, execs.length);
System.arraycopy(classes, 0, reportArgs, execs.length + 1, classes.length);
System.arraycopy(sources, 0, reportArgs, execs.length + classes.length + 1, sources.length);
reportArgs[execs.length + classes.length + sources.length + 1] = "--xml";
reportArgs[execs.length + classes.length + sources.length + 2] = basePath + File.separator + "target" + File.separator + "report.xml";
reportArgs[execs.length + classes.length + sources.length + 3] = "--html";
reportArgs[execs.length + classes.length + sources.length + 4] = basePath + File.separator + "target" + File.separator + "site";
String[] reportArgs = new String[execs.length + classes.length + sources.length + 5];
reportArgs[0] = "report";
System.arraycopy(execs, 0, reportArgs, 1, execs.length);
System.arraycopy(classes, 0, reportArgs, execs.length + 1, classes.length);
System.arraycopy(sources, 0, reportArgs, execs.length + classes.length + 1, sources.length);
reportArgs[execs.length + classes.length + sources.length + 1] = "--xml";
reportArgs[execs.length + classes.length + sources.length + 2] = basePath + File.separator + "target" + File.separator + "report.xml";
reportArgs[execs.length + classes.length + sources.length + 3] = "--html";
reportArgs[execs.length + classes.length + sources.length + 4] = basePath + File.separator + "target" + File.separator + "site";

Main.main(reportArgs);
PrintWriter out = new PrintWriter(System.out, true);
PrintWriter err = new PrintWriter(System.err, true);
Constructor<Main> declaredConstructor = Main.class.getDeclaredConstructor(String[].class);
declaredConstructor.setAccessible(true);
int returncode = (declaredConstructor.newInstance((Object) reportArgs)).execute(out, err);
System.out.println("Generating report for " + classFile.getAbsolutePath() + " finished with return code " + returncode);
}
}


private static List<File> loadClassFiles(File baseFile) {
private static List<File> loadModuleFiles(File baseFile) {
List<File> result = new LinkedList<>();
if (baseFile.isDirectory()) {
if (baseFile.getAbsolutePath().contains("dubbo-demo")) {
Expand All @@ -77,20 +79,19 @@ private static List<File> loadClassFiles(File baseFile) {
return result;
}
if (new File(baseFile.getAbsolutePath() + File.separator + "target" + File.separator + "classes" + File.separator + "org" + File.separator + "apache" + File.separator + "dubbo").exists()) {
result.add(new File(baseFile.getAbsolutePath() + File.separator + "target" + File.separator + "classes" + File.separator + "org" + File.separator + "apache" + File.separator + "dubbo"));
result.add(new File(baseFile.getAbsolutePath()));
return result;
}
File[] files = baseFile.listFiles();
if (files != null) {
for (File file : files) {
result.addAll(loadClassFiles(file));
result.addAll(loadModuleFiles(file));
}
}
}
return result;
}


private static List<File> loadExecFiles(File baseFile) {
List<File> result = new LinkedList<>();
if (baseFile.isDirectory()) {
Expand All @@ -105,26 +106,4 @@ private static List<File> loadExecFiles(File baseFile) {
}
return result;
}
private static List<File> loadSourceFiles(File baseFile) {
List<File> result = new LinkedList<>();
if (baseFile.isDirectory()) {
if (baseFile.getAbsolutePath().contains("dubbo-demo")) {
return result;
}
if (baseFile.getAbsolutePath().contains("dubbo-native")) {
return result;
}
if (new File(baseFile.getAbsolutePath() + File.separator + "src" + File.separator + "main" + File.separator + "java").exists()) {
result.add(new File(baseFile.getAbsolutePath() + File.separator + "src" + File.separator + "main" + File.separator + "java"));
return result;
}
File[] files = baseFile.listFiles();
if (files != null) {
for (File file : files) {
result.addAll(loadSourceFiles(file));
}
}
}
return result;
}
}

0 comments on commit 10033bf

Please sign in to comment.