48 lines
1.5 KiB
Java
48 lines
1.5 KiB
Java
package ex11;
|
|
|
|
import java.io.BufferedWriter;
|
|
import java.io.IOException;
|
|
import java.io.OutputStream;
|
|
import java.io.OutputStreamWriter;
|
|
import java.util.stream.Collectors;
|
|
import java.util.stream.Stream;
|
|
|
|
public class CallInfoCSVWriter {
|
|
|
|
private static final String[] headerLines = new String[]{
|
|
"CallerMethodFQIN",
|
|
"CallerBCI",
|
|
"invoketype",
|
|
"CalleeMethodFQIN",
|
|
"CallTargetFQIN",
|
|
"#invokes"
|
|
};
|
|
|
|
private final BufferedWriter outFile;
|
|
|
|
public CallInfoCSVWriter(final OutputStream outFile) throws IOException {
|
|
this.outFile = new BufferedWriter(new OutputStreamWriter(outFile));
|
|
writeLine(headerLines);
|
|
}
|
|
|
|
private static String escapeSpecialCharacters(final String data) {
|
|
final String escapedData = data.replaceAll("\\R", " ");
|
|
if (data.contains(",") || data.contains("\"") || data.contains("'")) {
|
|
return "\"%s\"".formatted(data.replace("\"", "\"\""));
|
|
} else {
|
|
return escapedData;
|
|
}
|
|
}
|
|
|
|
private void writeLine(final String... data) throws IOException {
|
|
final String line = Stream.of(data)
|
|
.map(CallInfoCSVWriter::escapeSpecialCharacters)
|
|
.collect(Collectors.joining(","));
|
|
outFile.write(line + "\n");
|
|
}
|
|
|
|
public void write(final CallInfo ci, long invokes) throws IOException {
|
|
writeLine(ci.caller(), Long.toString(ci.index()), ci.invokeType(), ci.callee(), ci.callTarget(),
|
|
Long.toString(invokes));
|
|
}
|
|
}
|