json-serialiser

Details

diff --git a/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java b/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
index 2a1f2e8..a01e72c 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
@@ -9,7 +9,10 @@ import java.io.IOException;
 import java.io.Writer;
 import java.lang.reflect.Array;
 import java.lang.reflect.Field;
+import java.nio.file.Files;
+import java.nio.file.Paths;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.ConcurrentModificationException;
 import java.util.Date;
@@ -175,18 +178,27 @@ public class JSONSerialiser {
             if (serialiseInternals.equals("false")) {
                 Package objectPackage = object.getClass().getPackage();
                 String objectPackageName = objectPackage != null ? objectPackage.getName() : "";
-                if (objectPackageName.startsWith("java.")
-                        || objectPackageName.startsWith("javax.")
-                        || objectPackageName.startsWith("org.ietf.")
-                        || objectPackageName.startsWith("org.omg.")
-                        || objectPackageName.startsWith("org.w3c.")
-                        || objectPackageName.startsWith("org.xml.")
-                        || object.getClass().getClassLoader() == null) {
-                    this.writer.append("\"").append(String.valueOf(object)).append("\"");
-                    return;
+
+                String ignoredPackagesPath = System.getenv("TRACER_IGNORED_PACKAGES");
+                if (ignoredPackagesPath == null) {
+                    ignoredPackagesPath = "./ignored";
+                }
+                List<String> ignoredPackages;
+                try {
+                    ignoredPackages = Files.readAllLines(Paths.get(ignoredPackagesPath));
+                } catch (IOException ex) {
+                    ignoredPackages = new ArrayList<>();
+                }
+                String[] internals = {"java.", "org.ietf.", "org.omg.", "org.w3c.", "org.xml."};
+                ignoredPackages.addAll(Arrays.asList(internals));
+                for (String ignoredPackage : ignoredPackages) {
+                    if (objectPackageName.startsWith(ignoredPackage)) {
+                        this.writer.append("\"").append(String.valueOf(object)).append("\"");
+                        return;
+                    }
                 }
             }
-            if (visited.stream().anyMatch((visited) -> (visited == object))) {
+            if (visited.stream().parallel().anyMatch((visited) -> (visited == object))) {
                 try {
                     this.writer.append("{\"r\":\"").append(object.getClass().getName() + "@" + object.hashCode()).append("\"}");
                 } catch (Exception e) {