trace

Details

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;
     }
 
 }