diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/reader/TraceReader.java b/src/main/java/br/ufrgs/inf/prosoft/trace/reader/TraceReader.java
index f56ee3a..8098cd3 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/trace/reader/TraceReader.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/reader/TraceReader.java
@@ -74,63 +74,64 @@ public class TraceReader {
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>() {
- private int index = 0;
- private MessageDigest messageDigest;
+ try (Stream<String> lines = Files.lines(Paths.get(path))) {
+ Gson gson = new Gson();
+ lines.forEach(new Consumer<String>() {
+ private int index = 0;
+ private MessageDigest messageDigest;
- {
- try {
- this.messageDigest = MessageDigest.getInstance("sha-512");
- } catch (NoSuchAlgorithmException ex) {
+ {
+ try {
+ this.messageDigest = MessageDigest.getInstance("sha-512");
+ } catch (NoSuchAlgorithmException ex) {
+ }
}
- }
- private String digest(java.lang.Object object) {
- return String.valueOf(messageDigest.digest(String.valueOf(object).getBytes()));
- }
+ private String digest(java.lang.Object object) {
+ return String.valueOf(messageDigest.digest(String.valueOf(object).getBytes()));
+ }
- @Override
- public void accept(String line) {
- try {
- Trace trace;
- switch (mode) {
- case PARTIAL:
- trace = gson.fromJson(line, TraceReference.class);
- ((TraceReference) trace).setIndex(index);
- break;
- case HASHED:
- trace = gson.fromJson(line, TraceConcrete.class);
- trace = new TraceConcrete(trace.getInstance(), trace.getModifiers(),
- new Return(trace.getReturn().getType(), digest(trace.getReturn().getData())),
- trace.getName(),
- trace.getParameters().stream()
- .map(parameter -> new Parameter(parameter.getType(), digest(parameter.getData())))
- .collect(Collectors.toList()),
- trace.getStartTime(), trace.getEndTime(), trace.getUserSession());
- break;
- default:
- trace = gson.fromJson(line, TraceConcrete.class);
- break;
+ @Override
+ public void accept(String line) {
+ try {
+ Trace trace;
+ switch (mode) {
+ case PARTIAL:
+ trace = gson.fromJson(line, TraceReference.class);
+ ((TraceReference) trace).setIndex(index);
+ break;
+ case HASHED:
+ trace = gson.fromJson(line, TraceConcrete.class);
+ trace = new TraceConcrete(trace.getInstance(), trace.getModifiers(),
+ new Return(trace.getReturn().getType(), digest(trace.getReturn().getData())),
+ trace.getName(),
+ trace.getParameters().stream()
+ .map(parameter -> new Parameter(parameter.getType(), digest(parameter.getData())))
+ .collect(Collectors.toList()),
+ trace.getStartTime(), trace.getEndTime(), trace.getUserSession());
+ break;
+ default:
+ trace = gson.fromJson(line, TraceConcrete.class);
+ break;
+ }
+ traces.add(trace);
+ System.out.print(".");
+ System.out.flush();
+ if (index != 0 && index % 100 == 0) {
+ System.out.println();
+ }
+ } catch (JsonSyntaxException e) {
+ if (line.length() > 2000) {
+ line = line.substring(0, 2000);
+ }
+ logger.log(Level.INFO, "Malformed Trace {0}: {1}", new java.lang.Object[]{index, line});
+ } finally {
+ index++;
}
- traces.add(trace);
- System.out.print(".");
- System.out.flush();
- if (index != 0 && index % 100 == 0) {
- System.out.println();
- }
- } catch (JsonSyntaxException e) {
- if (line.length() > 2000) {
- line = line.substring(0, 2000);
- }
- logger.log(Level.INFO, "Malformed Trace {0}: {1}", new java.lang.Object[]{index, line});
- } finally {
- index++;
}
- }
- });
- System.out.println();
+ });
+ System.out.println();
+ }
} catch (IOException ex) {
logger.log(Level.SEVERE, null, ex);
}
diff --git a/src/main/java/br/ufrgs/inf/prosoft/trace/reader/Traces.java b/src/main/java/br/ufrgs/inf/prosoft/trace/reader/Traces.java
index 87c6505..9fab553 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/trace/reader/Traces.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/trace/reader/Traces.java
@@ -36,7 +36,7 @@ public class Traces {
try {
String reference = lines.skip(index).findFirst().get();
traceConcrete = gson.fromJson(reference, TraceConcrete.class);
- return traceConcrete;
+ lines.close();
} catch (NoSuchElementException ex) {
System.err.println("[Trace] Wrong index of trace " + index);
} catch (JsonSyntaxException ex) {
@@ -49,13 +49,15 @@ public class Traces {
}
public static List<Parameter> getTraceParameter(int index) {
+ List<Parameter> parameters = null;
try {
Stream<String> lines = Files.lines(Paths.get(Traces.PATH));
Gson gson = new Gson();
try {
String reference = lines.skip(index).findFirst().get();
TraceParameter traceParameter = gson.fromJson(reference, TraceParameter.class);
- return traceParameter.getParameters();
+ parameters = traceParameter.getParameters();
+ lines.close();
} catch (NoSuchElementException ex) {
System.err.println("[Trace] Wrong index of trace " + index);
} catch (JsonSyntaxException ex) {
@@ -64,17 +66,19 @@ public class Traces {
} catch (IOException ex) {
System.err.println("[Trace] Fail to read traces file");
}
- return new ArrayList<>();
+ return parameters == null ? new ArrayList<>() : parameters;
}
public static Return getTraceReturn(int index) {
+ Return returnValue = null;
try {
Stream<String> lines = Files.lines(Paths.get(Traces.PATH));
Gson gson = new Gson();
try {
String reference = lines.skip(index).findFirst().get();
TraceReturn traceReturn = gson.fromJson(reference, TraceReturn.class);
- return traceReturn.getReturn();
+ returnValue = traceReturn.getReturn();
+ lines.close();
} catch (NoSuchElementException ex) {
System.err.println("[Trace] Wrong index of trace " + index);
} catch (JsonSyntaxException ex) {
@@ -83,7 +87,7 @@ public class Traces {
} catch (IOException ex) {
System.err.println("[Trace] Fail to read traces file");
}
- return null;
+ return returnValue;
}
}