From 7f5194526a508f2a6098d001c5ff4678b9078a1c Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sat, 11 Sep 2021 05:22:09 +0200 Subject: [PATCH 1/3] Fix RuntimeTypeAdapterFactory depending on internal Streams class --- .../gson/typeadapters/RuntimeTypeAdapterFactory.java | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java index c496491ac6..1cf3021e3c 100644 --- a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java +++ b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java @@ -27,7 +27,6 @@ import com.google.gson.JsonPrimitive; import com.google.gson.TypeAdapter; import com.google.gson.TypeAdapterFactory; -import com.google.gson.internal.Streams; import com.google.gson.reflect.TypeToken; import com.google.gson.stream.JsonReader; import com.google.gson.stream.JsonWriter; @@ -204,11 +203,13 @@ public RuntimeTypeAdapterFactory registerSubtype(Class type) { return registerSubtype(type, type.getSimpleName()); } - public TypeAdapter create(Gson gson, TypeToken type) { + @Override +public TypeAdapter create(Gson gson, TypeToken type) { if (type.getRawType() != baseType) { return null; } + final TypeAdapter jsonElementAdapter = gson.getAdapter(JsonElement.class); final Map> labelToDelegate = new LinkedHashMap>(); final Map, TypeAdapter> subtypeToDelegate @@ -221,7 +222,7 @@ public TypeAdapter create(Gson gson, TypeToken type) { return new TypeAdapter() { @Override public R read(JsonReader in) throws IOException { - JsonElement jsonElement = Streams.parse(in); + JsonElement jsonElement = jsonElementAdapter.read(in); JsonElement labelJsonElement; if (maintainType) { labelJsonElement = jsonElement.getAsJsonObject().get(typeFieldName); @@ -255,7 +256,7 @@ public TypeAdapter create(Gson gson, TypeToken type) { JsonObject jsonObject = delegate.toJsonTree(value).getAsJsonObject(); if (maintainType) { - Streams.write(jsonObject, out); + jsonElementAdapter.write(out, jsonObject); return; } @@ -270,7 +271,7 @@ public TypeAdapter create(Gson gson, TypeToken type) { for (Map.Entry e : jsonObject.entrySet()) { clone.add(e.getKey(), e.getValue()); } - Streams.write(clone, out); + jsonElementAdapter.write(out, clone); } }.nullSafe(); } From 097e19657377a59029d1cd9162e74e33a89175ed Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Sat, 11 Sep 2021 05:54:27 +0200 Subject: [PATCH 2/3] Clean up gson-extras project, make it Maven module of gson-parent --- extras/pom.xml | 176 +++--------------- .../gson/graph/GraphAdapterBuilderTest.java | 25 ++- pom.xml | 3 +- 3 files changed, 53 insertions(+), 151 deletions(-) diff --git a/extras/pom.xml b/extras/pom.xml index 9b74d1a19a..91da708bae 100644 --- a/extras/pom.xml +++ b/extras/pom.xml @@ -1,47 +1,37 @@ - + 4.0.0 - com.google.code.gson + + com.google.code.gson + gson-parent + 2.8.9-SNAPSHOT + + gson-extras jar 1.0-SNAPSHOT 2008 Gson Extras - - org.sonatype.oss - oss-parent - 9 - - http://code.google.com/p/google-gson/ Google Gson grab bag of utilities, type adapters, etc. - - UTF-8 - + - The Apache Software License, Version 2.0 - http://www.apache.org/licenses/LICENSE-2.0.txt - repo + Apache-2.0 + https://www.apache.org/licenses/LICENSE-2.0.txt - - scm:svn:http://google-gson.googlecode.com/svn/trunk/extras - scm:svn:https://google-gson.googlecode.com/svn/trunk/extras - http://google-gson.codegoogle.com/svn/trunk/extras - - - Google Code Issue Tracking - http://code.google.com/p/google-gson/issues/list - + Google, Inc. - http://www.google.com + https://www.google.com + com.google.code.gson gson - 2.7 - compile + ${project.parent.version} javax.annotation @@ -51,130 +41,26 @@ junit junit - 4.13.1 test - - - - release-sign-artifacts - - - performRelease - true - - - - - - org.apache.maven.plugins - maven-gpg-plugin - 1.5 - - - sign-artifacts - verify - - sign - - - - - - - - + - package - - - org.apache.maven.plugins - maven-compiler-plugin - 3.5.1 - - 1.6 - 1.6 - - - - org.apache.maven.plugins - maven-jar-plugin - 3.0.2 - - - package - - jar - - - - - - false - - - - - org.apache.maven.plugins - maven-source-plugin - 3.0.1 - - - attach-sources - verify - - jar - - - - - - org.apache.maven.plugins - maven-javadoc-plugin - 2.10.4 - - - attach-javadocs - - jar - - - - - - http://download.oracle.com/javase/1.5.0/docs/api/ - - true - public - - - - org.apache.maven.plugins - maven-eclipse-plugin - 2.10 - - true - true - - ../eclipse-ws/ - - - file:///${basedir}/../lib/gson-formatting-styles.xml - - - - - org.apache.maven.plugins - maven-release-plugin - - - -DenableCiProfile=true - https://google-gson.googlecode.com/svn/tags/ - - - + + + + org.apache.maven.plugins + maven-deploy-plugin + 3.0.0-M1 + + + true + + + + + Inderjeet Singh diff --git a/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java b/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java index 8a1d7cdbfb..fb11ff963f 100644 --- a/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java +++ b/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java @@ -16,16 +16,23 @@ package com.google.gson.graph; -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.reflect.TypeToken; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertSame; + import java.lang.reflect.Type; import java.util.ArrayList; import java.util.Collections; import java.util.List; -import junit.framework.TestCase; -public final class GraphAdapterBuilderTest extends TestCase { +import org.junit.Ignore; +import org.junit.Test; + +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; + +public final class GraphAdapterBuilderTest { + @Test public void testSerialization() { Roshambo rock = new Roshambo("ROCK"); Roshambo scissors = new Roshambo("SCISSORS"); @@ -46,6 +53,7 @@ public void testSerialization() { gson.toJson(rock).replace('"', '\'')); } + @Test public void testDeserialization() { String json = "{'0x1':{'name':'ROCK','beats':'0x2'}," + "'0x2':{'name':'SCISSORS','beats':'0x3'}," + @@ -66,6 +74,8 @@ public void testDeserialization() { assertSame(rock, paper.beats); } + @Ignore("Does not work anymore due to ReflectiveTypeAdapterFactory ignoring self references") + @Test public void testSerializationDirectSelfReference() { Roshambo suicide = new Roshambo("SUICIDE"); suicide.beats = suicide; @@ -80,6 +90,7 @@ public void testSerializationDirectSelfReference() { gson.toJson(suicide).replace('"', '\'')); } + @Test public void testDeserializationDirectSelfReference() { String json = "{'0x1':{'name':'SUICIDE','beats':'0x1'}}"; @@ -94,6 +105,7 @@ public void testDeserializationDirectSelfReference() { assertSame(suicide, suicide.beats); } + @Test public void testSerializeListOfLists() { Type listOfListsType = new TypeToken>>() {}.getType(); Type listOfAnyType = new TypeToken>() {}.getType(); @@ -113,6 +125,7 @@ public void testSerializeListOfLists() { assertEquals("{'0x1':['0x1','0x2'],'0x2':[]}", json.replace('"', '\'')); } + @Test public void testDeserializeListOfLists() { Type listOfAnyType = new TypeToken>() {}.getType(); Type listOfListsType = new TypeToken>>() {}.getType(); @@ -130,6 +143,7 @@ public void testDeserializeListOfLists() { assertEquals(Collections.emptyList(), listOfLists.get(1)); } + @Test public void testSerializationWithMultipleTypes() { Company google = new Company("Google"); new Employee("Jesse", google); @@ -148,6 +162,7 @@ public void testSerializationWithMultipleTypes() { gson.toJson(google).replace('"', '\'')); } + @Test public void testDeserializationWithMultipleTypes() { GsonBuilder gsonBuilder = new GsonBuilder(); new GraphAdapterBuilder() diff --git a/pom.xml b/pom.xml index f36f0b0574..3f8574439e 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,7 @@ gson + extras @@ -41,7 +42,7 @@ - Apache 2.0 + Apache-2.0 https://www.apache.org/licenses/LICENSE-2.0.txt From 9d7ba9eb83520c20dd8275c6ec279aa223a13f60 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Tue, 14 Sep 2021 21:36:14 +0200 Subject: [PATCH 3/3] Remove broken test from GraphAdapterBuilderTest --- .../typeadapters/RuntimeTypeAdapterFactory.java | 2 +- .../gson/graph/GraphAdapterBuilderTest.java | 17 ----------------- 2 files changed, 1 insertion(+), 18 deletions(-) diff --git a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java index 1cf3021e3c..c11ca83690 100644 --- a/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java +++ b/extras/src/main/java/com/google/gson/typeadapters/RuntimeTypeAdapterFactory.java @@ -204,7 +204,7 @@ public RuntimeTypeAdapterFactory registerSubtype(Class type) { } @Override -public TypeAdapter create(Gson gson, TypeToken type) { + public TypeAdapter create(Gson gson, TypeToken type) { if (type.getRawType() != baseType) { return null; } diff --git a/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java b/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java index fb11ff963f..43fc6b6991 100644 --- a/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java +++ b/extras/src/test/java/com/google/gson/graph/GraphAdapterBuilderTest.java @@ -24,7 +24,6 @@ import java.util.Collections; import java.util.List; -import org.junit.Ignore; import org.junit.Test; import com.google.gson.Gson; @@ -74,22 +73,6 @@ public void testDeserialization() { assertSame(rock, paper.beats); } - @Ignore("Does not work anymore due to ReflectiveTypeAdapterFactory ignoring self references") - @Test - public void testSerializationDirectSelfReference() { - Roshambo suicide = new Roshambo("SUICIDE"); - suicide.beats = suicide; - - GsonBuilder gsonBuilder = new GsonBuilder(); - new GraphAdapterBuilder() - .addType(Roshambo.class) - .registerOn(gsonBuilder); - Gson gson = gsonBuilder.create(); - - assertEquals("{'0x1':{'name':'SUICIDE','beats':'0x1'}}", - gson.toJson(suicide).replace('"', '\'')); - } - @Test public void testDeserializationDirectSelfReference() { String json = "{'0x1':{'name':'SUICIDE','beats':'0x1'}}";