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 4a42160..6de7fa8 100644
--- a/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
+++ b/src/main/java/br/ufrgs/inf/prosoft/jsonserialiser/JSONSerialiser.java
@@ -25,31 +25,19 @@ import java.util.Map;
*/
public class JSONSerialiser {
- private final Collection<Object> visited;
+ private final List<Object> visited;
private JSONSerialiser() {
this.visited = new ArrayList<>();
}
- private static String serialise(Object bean, boolean cyclicFields) {
+ public static String serialise(Object bean) {
JSONSerialiser jsonSerialiser = new JSONSerialiser();
- StringBuilder stringBuilder = jsonSerialiser.serialiseBean(bean, cyclicFields);
+ StringBuilder stringBuilder = jsonSerialiser.serialiseBean(bean);
Utils.fixJson(stringBuilder);
return stringBuilder.toString();
}
- public static String serialise(Object bean) {
- return serialise(bean, true);
- }
-
- public static String serialiseCyclicObject(Object bean) {
- return serialise(bean);
- }
-
- public static String serialiseAcyclicObject(Object bean) {
- return serialise(bean, false);
- }
-
private static class Utils {
private static void fixJson(StringBuilder stringBuilder) {
@@ -94,7 +82,7 @@ public class JSONSerialiser {
}
}
- private StringBuilder serialiseBean(Object bean, boolean cyclicFields) {
+ private StringBuilder serialiseBean(Object bean) {
StringBuilder stringBuilder = new StringBuilder();
if (bean == null) {
stringBuilder.append("null");
@@ -112,9 +100,6 @@ public class JSONSerialiser {
if (result == null) {
continue;
}
- if (!cyclicFields) {
- this.visited.clear();
- }
stringBuilder.append("\"").append(field.getName()).append("\"");
stringBuilder.append(":");
StringBuilder wrap = wrap(result);
@@ -131,10 +116,6 @@ public class JSONSerialiser {
return stringBuilder;
}
- private StringBuilder serialiseBean(Object bean) {
- return serialiseBean(bean, true);
- }
-
private StringBuilder wrap(Object object) {
try {
if (object == null) {
@@ -195,8 +176,13 @@ public class JSONSerialiser {
if (this.visited.stream().parallel().anyMatch(visited -> visited == object)) {
return getReference(object);
}
+ int index = this.visited.size();
this.visited.add(object);
- return serialiseBean(object);
+ StringBuilder serialiseBean = serialiseBean(object);
+ while (index < this.visited.size()) {
+ this.visited.remove(index);
+ }
+ return serialiseBean;
} catch (ConcurrentModificationException exception) {
System.err.println("[JSONSerialiser] ConcurrentModificationException");
return new StringBuilder().append("\"JSON_CONCURRENT_MODIFICATION\"");