Might be fun to clone GSON elements some time.
This commit is contained in:
parent
8ca4c999d9
commit
ef7a4ef69c
54
src/com/massivecraft/mcore/store/GsonCloner.java
Normal file
54
src/com/massivecraft/mcore/store/GsonCloner.java
Normal file
@ -0,0 +1,54 @@
|
||||
package com.massivecraft.mcore.store;
|
||||
|
||||
import java.util.Iterator;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import com.massivecraft.mcore.xlib.gson.JsonArray;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonElement;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonNull;
|
||||
import com.massivecraft.mcore.xlib.gson.JsonObject;
|
||||
|
||||
public class GsonCloner
|
||||
{
|
||||
public static JsonElement clone(JsonElement element)
|
||||
{
|
||||
// null
|
||||
if (element == null) return null;
|
||||
|
||||
// JsonNull
|
||||
if (element.isJsonNull()) return JsonNull.INSTANCE;
|
||||
|
||||
// JsonPrimitive
|
||||
if (element.isJsonPrimitive())
|
||||
{
|
||||
// TODO: This is actually not safe since JsonPrimitive is mutable.
|
||||
// However there is no easy way to clone a JsonPrimitive and I thought they were mutable anyways.
|
||||
return element;
|
||||
}
|
||||
|
||||
// JsonObject
|
||||
if (element.isJsonObject())
|
||||
{
|
||||
JsonObject ret = new JsonObject();
|
||||
for (Entry<String, JsonElement> entry : ((JsonObject)element).entrySet())
|
||||
{
|
||||
ret.add(entry.getKey(), clone(entry.getValue()));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
// JsonArray
|
||||
if (element.isJsonArray())
|
||||
{
|
||||
JsonArray ret = new JsonArray();
|
||||
Iterator<JsonElement> iter = ((JsonArray)element).iterator();
|
||||
while (iter.hasNext())
|
||||
{
|
||||
ret.add(clone(iter.next()));
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
throw new RuntimeException("Unknown JsonElement class: " + element.getClass().getName());
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user