diff --git a/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/TraceReader.java b/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/TraceReader.java
index 4c4b296..7567c82 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/TraceReader.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/approachescomparison/adapter/TraceReader.java
@@ -11,108 +11,25 @@ import br.ufrgs.inf.prosoft.memoizeit.OccurrenceConcrete;
import br.ufrgs.inf.prosoft.memoizeit.OccurrenceReference;
import br.ufrgs.inf.prosoft.memoizeit.Parameter;
import br.ufrgs.inf.prosoft.trace.Trace;
-import br.ufrgs.inf.prosoft.trace.TraceConcrete;
import br.ufrgs.inf.prosoft.trace.TraceReference;
-import br.ufrgs.inf.prosoft.trace.Traces;
-import com.google.gson.Gson;
-import com.google.gson.JsonSyntaxException;
-import java.io.BufferedInputStream;
-import java.io.FileInputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.nio.file.Files;
-import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
-import java.util.function.Consumer;
import java.util.logging.Level;
import java.util.logging.Logger;
-import java.util.stream.Stream;
+import java.util.stream.Collectors;
/**
*
* @author romulo
*/
-public class TraceReader {
+public class TraceReader extends br.ufrgs.inf.prosoft.trace.TraceReader {
private static final Logger logger = Logger.getLogger(TraceReader.class.getName());
- public static List<Trace> partiallyParseFile(String path) {
- Traces.PATH = path;
- return parseFile(path, true);
- }
-
- public static List<Trace> parseFile(String path) {
- return parseFile(path, false);
- }
-
- public static String getLineCount(String path) throws IOException {
- try {
- Process process = Runtime.getRuntime().exec("wc -l " + path);
- Thread.sleep(2000);
- if (process.isAlive()) {
- return "-2";
- }
- InputStream inputStream = process.getInputStream();
- StringBuilder count = new StringBuilder();
- int c;
- while (true) {
- c = inputStream.read();
- if (c == 32 || c == -1 || c == 10) {
- break;
- }
- count.append((char) c);
- }
- return count.toString();
- } catch (Exception ex) {
- }
- return "-1";
- }
-
- private static List<Trace> parseFile(String path, boolean partial) {
- List<Trace> traces = new ArrayList<>();
- try {
- logger.log(Level.INFO, "Parsing {0} traces", getLineCount(path));
- Stream<String> lines = Files.lines(Paths.get(path));
- Gson gson = new Gson();
- lines.forEach(new Consumer<String>() {
- int i = 0;
-
- @Override
- public void accept(String line) {
- try {
- Trace trace;
- if (partial) {
- trace = gson.fromJson(line, TraceReference.class);
- ((TraceReference) trace).setIndex(i);
- } else {
- trace = gson.fromJson(line, TraceConcrete.class);
- }
- traces.add(trace);
- System.out.print(".");
- if (i != 0 && i % 100 == 0) {
- System.out.println();
- }
- i++;
- } catch (JsonSyntaxException e) {
- if (line.length() > 2000) {
- line = line.substring(0, 2000);
- }
- logger.log(Level.INFO, "\nMalformed Trace {0}: {1}", new Object[]{i, line});
- }
- }
- });
- System.out.println();
- } catch (IOException ex) {
- logger.log(Level.SEVERE, null, ex);
- }
- return traces;
- }
-
public static List<Method> groupByMethods(List<Trace> traces) {
Map<String, List<Occurrence>> methodNameHasOccurrences = new HashMap<>();
Set<String> staticMethods = new HashSet<>();
@@ -124,10 +41,9 @@ public class TraceReader {
TraceReference traceReference = (TraceReference) trace;
occurrence = new OccurrenceReference(traceReference.getIndex(), trace.getInstance(), trace.getStartTime(), trace.getEndTime());
} else {
- List<Parameter> parameters = new ArrayList<>();
- trace.getParameters().forEach((parameter) -> {
- parameters.add(new Parameter(parameter.getType(), parameter.getData()));
- });
+ List<Parameter> parameters = trace.getParameters().stream()
+ .map(parameter -> new Parameter(parameter.getType(), parameter.getData()))
+ .collect(Collectors.toList());
occurrence = new OccurrenceConcrete(trace.getInstance(), trace.getReturn().getData(), parameters, trace.getStartTime(), trace.getEndTime());
}
try {
@@ -144,11 +60,9 @@ public class TraceReader {
logger.log(Level.INFO, "Trace discarted: {0}", trace);
}
}
- List<Method> methods = new ArrayList<>();
- methodNameHasOccurrences.entrySet().forEach((entry) -> {
- boolean isStatic = staticMethods.contains(entry.getKey());
- methods.add(new Method(entry.getKey(), isStatic, entry.getValue()));
- });
+ List<Method> methods = methodNameHasOccurrences.entrySet().stream().parallel()
+ .map(entry -> new Method(entry.getKey(), staticMethods.contains(entry.getKey()), entry.getValue()))
+ .collect(Collectors.toList());
return methods;
}
}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/OccurrenceReference.java b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/OccurrenceReference.java
index 16c648f..d5cbc8f 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/memoizeit/OccurrenceReference.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/memoizeit/OccurrenceReference.java
@@ -57,7 +57,7 @@ public class OccurrenceReference extends Occurrence {
Object returnValue = null;
List<Parameter> parameters = new ArrayList<>();
if (traceConcrete != null) {
- returnValue = traceConcrete.getReturn();
+ returnValue = traceConcrete.getReturn().getData();
parameters = traceConcrete.getParameters().stream()
.map(parameter -> new Parameter(parameter.getType(), parameter.getData()))
.collect(Collectors.toList());