renamed @Adapt to @JsonAdapter
This commit is contained in:
parent
7f6a096030
commit
edf66083e6
|
@ -23,7 +23,7 @@ import com.google.gson.internal.Streams;
|
||||||
import com.google.gson.internal.bind.ArrayTypeAdapter;
|
import com.google.gson.internal.bind.ArrayTypeAdapter;
|
||||||
import com.google.gson.internal.bind.CollectionTypeAdapterFactory;
|
import com.google.gson.internal.bind.CollectionTypeAdapterFactory;
|
||||||
import com.google.gson.internal.bind.DateTypeAdapter;
|
import com.google.gson.internal.bind.DateTypeAdapter;
|
||||||
import com.google.gson.internal.bind.AdaptAnnotationTypeAdapterFactory;
|
import com.google.gson.internal.bind.JsonAdapterAnnotationTypeAdapterFactory;
|
||||||
import com.google.gson.internal.bind.JsonTreeReader;
|
import com.google.gson.internal.bind.JsonTreeReader;
|
||||||
import com.google.gson.internal.bind.JsonTreeWriter;
|
import com.google.gson.internal.bind.JsonTreeWriter;
|
||||||
import com.google.gson.internal.bind.MapTypeAdapterFactory;
|
import com.google.gson.internal.bind.MapTypeAdapterFactory;
|
||||||
|
@ -249,7 +249,7 @@ public final class Gson {
|
||||||
// type adapters for composite and user-defined types
|
// type adapters for composite and user-defined types
|
||||||
factories.add(new CollectionTypeAdapterFactory(constructorConstructor));
|
factories.add(new CollectionTypeAdapterFactory(constructorConstructor));
|
||||||
factories.add(new MapTypeAdapterFactory(constructorConstructor, complexMapKeySerialization));
|
factories.add(new MapTypeAdapterFactory(constructorConstructor, complexMapKeySerialization));
|
||||||
factories.add(new AdaptAnnotationTypeAdapterFactory(constructorConstructor));
|
factories.add(new JsonAdapterAnnotationTypeAdapterFactory(constructorConstructor));
|
||||||
factories.add(new ReflectiveTypeAdapterFactory(
|
factories.add(new ReflectiveTypeAdapterFactory(
|
||||||
constructorConstructor, fieldNamingPolicy, excluder));
|
constructorConstructor, fieldNamingPolicy, excluder));
|
||||||
|
|
||||||
|
|
|
@ -86,7 +86,7 @@ import com.google.gson.TypeAdapter;
|
||||||
// Note that the above example is taken from AdaptAnnotationTest.
|
// Note that the above example is taken from AdaptAnnotationTest.
|
||||||
@Retention(RetentionPolicy.RUNTIME)
|
@Retention(RetentionPolicy.RUNTIME)
|
||||||
@Target({ElementType.TYPE, ElementType.FIELD})
|
@Target({ElementType.TYPE, ElementType.FIELD})
|
||||||
public @interface Adapt {
|
public @interface JsonAdapter {
|
||||||
|
|
||||||
Class<? extends TypeAdapter<?>> value();
|
Class<? extends TypeAdapter<?>> value();
|
||||||
|
|
|
@ -19,36 +19,36 @@ package com.google.gson.internal.bind;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.TypeAdapter;
|
import com.google.gson.TypeAdapter;
|
||||||
import com.google.gson.TypeAdapterFactory;
|
import com.google.gson.TypeAdapterFactory;
|
||||||
import com.google.gson.annotations.Adapt;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import com.google.gson.internal.ConstructorConstructor;
|
import com.google.gson.internal.ConstructorConstructor;
|
||||||
import com.google.gson.internal.ObjectConstructor;
|
import com.google.gson.internal.ObjectConstructor;
|
||||||
import com.google.gson.reflect.TypeToken;
|
import com.google.gson.reflect.TypeToken;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Given a type T, looks for the annotation {@link Adapt} and uses an instance of the
|
* Given a type T, looks for the annotation {@link JsonAdapter} and uses an instance of the
|
||||||
* specified class as the default type adapter.
|
* specified class as the default type adapter.
|
||||||
*
|
*
|
||||||
* @since 2.3
|
* @since 2.3
|
||||||
*/
|
*/
|
||||||
public final class AdaptAnnotationTypeAdapterFactory implements TypeAdapterFactory {
|
public final class JsonAdapterAnnotationTypeAdapterFactory implements TypeAdapterFactory {
|
||||||
|
|
||||||
private final ConstructorConstructor constructorConstructor;
|
private final ConstructorConstructor constructorConstructor;
|
||||||
|
|
||||||
public AdaptAnnotationTypeAdapterFactory(ConstructorConstructor constructorConstructor) {
|
public JsonAdapterAnnotationTypeAdapterFactory(ConstructorConstructor constructorConstructor) {
|
||||||
this.constructorConstructor = constructorConstructor;
|
this.constructorConstructor = constructorConstructor;
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||||
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> targetType) {
|
public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> targetType) {
|
||||||
Class<? super T> clazz = targetType.getRawType();
|
Class<? super T> clazz = targetType.getRawType();
|
||||||
Adapt annotation = clazz.getAnnotation(Adapt.class);
|
JsonAdapter annotation = clazz.getAnnotation(JsonAdapter.class);
|
||||||
if (annotation == null) return null;
|
if (annotation == null) return null;
|
||||||
TypeAdapter adapter = getAnnotationTypeAdapter(gson, constructorConstructor, annotation);
|
TypeAdapter adapter = getAnnotationTypeAdapter(gson, constructorConstructor, annotation);
|
||||||
return adapter;
|
return adapter;
|
||||||
}
|
}
|
||||||
|
|
||||||
static TypeAdapter<?> getAnnotationTypeAdapter(Gson gson,
|
static TypeAdapter<?> getAnnotationTypeAdapter(Gson gson,
|
||||||
ConstructorConstructor constructorConstructor, Adapt annotation) {
|
ConstructorConstructor constructorConstructor, JsonAdapter annotation) {
|
||||||
Class<? extends TypeAdapter<?>> adapterClass = annotation.value();
|
Class<? extends TypeAdapter<?>> adapterClass = annotation.value();
|
||||||
ObjectConstructor<? extends TypeAdapter<?>> constructor =
|
ObjectConstructor<? extends TypeAdapter<?>> constructor =
|
||||||
constructorConstructor.get(TypeToken.get(adapterClass));
|
constructorConstructor.get(TypeToken.get(adapterClass));
|
|
@ -27,7 +27,7 @@ import com.google.gson.Gson;
|
||||||
import com.google.gson.JsonSyntaxException;
|
import com.google.gson.JsonSyntaxException;
|
||||||
import com.google.gson.TypeAdapter;
|
import com.google.gson.TypeAdapter;
|
||||||
import com.google.gson.TypeAdapterFactory;
|
import com.google.gson.TypeAdapterFactory;
|
||||||
import com.google.gson.annotations.Adapt;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import com.google.gson.annotations.SerializedName;
|
import com.google.gson.annotations.SerializedName;
|
||||||
import com.google.gson.internal.$Gson$Types;
|
import com.google.gson.internal.$Gson$Types;
|
||||||
import com.google.gson.internal.ConstructorConstructor;
|
import com.google.gson.internal.ConstructorConstructor;
|
||||||
|
@ -104,9 +104,9 @@ public final class ReflectiveTypeAdapterFactory implements TypeAdapterFactory {
|
||||||
private TypeAdapter<?> getFieldAdapter(Gson gson, Field field, TypeToken<?> fieldType) {
|
private TypeAdapter<?> getFieldAdapter(Gson gson, Field field, TypeToken<?> fieldType) {
|
||||||
TypeAdapter<?> adapter = gson.getAdapter(fieldType);
|
TypeAdapter<?> adapter = gson.getAdapter(fieldType);
|
||||||
boolean generatedAdapter = Gson.$$Internal.isGeneratedTypeAdapter(gson, adapter);
|
boolean generatedAdapter = Gson.$$Internal.isGeneratedTypeAdapter(gson, adapter);
|
||||||
if (generatedAdapter && field.isAnnotationPresent(Adapt.class)) {
|
if (generatedAdapter && field.isAnnotationPresent(JsonAdapter.class)) {
|
||||||
Adapt annotation = field.getAnnotation(Adapt.class);
|
JsonAdapter annotation = field.getAnnotation(JsonAdapter.class);
|
||||||
return AdaptAnnotationTypeAdapterFactory.getAnnotationTypeAdapter(
|
return JsonAdapterAnnotationTypeAdapterFactory.getAnnotationTypeAdapter(
|
||||||
gson, constructorConstructor, annotation);
|
gson, constructorConstructor, annotation);
|
||||||
}
|
}
|
||||||
return adapter;
|
return adapter;
|
||||||
|
|
|
@ -31,14 +31,14 @@ import com.google.gson.JsonPrimitive;
|
||||||
import com.google.gson.JsonSerializationContext;
|
import com.google.gson.JsonSerializationContext;
|
||||||
import com.google.gson.JsonSerializer;
|
import com.google.gson.JsonSerializer;
|
||||||
import com.google.gson.TypeAdapter;
|
import com.google.gson.TypeAdapter;
|
||||||
import com.google.gson.annotations.Adapt;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Functional tests for the {@link com.google.gson.annotations.Adapt} annotation on classes.
|
* Functional tests for the {@link com.google.gson.annotations.JsonAdapter} annotation on classes.
|
||||||
*/
|
*/
|
||||||
public final class AdaptAnnotationOnClassesTest extends TestCase {
|
public final class JsonAdapterAnnotationOnClassesTest extends TestCase {
|
||||||
|
|
||||||
public void testJsonAdapterInvoked() {
|
public void testJsonAdapterInvoked() {
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
|
@ -119,7 +119,7 @@ public final class AdaptAnnotationOnClassesTest extends TestCase {
|
||||||
assertFalse(json.contains("jsonAdapter"));
|
assertFalse(json.contains("jsonAdapter"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Adapt(A.JsonAdapter.class)
|
@JsonAdapter(A.JsonAdapter.class)
|
||||||
private static class A {
|
private static class A {
|
||||||
final String value;
|
final String value;
|
||||||
A(String value) {
|
A(String value) {
|
||||||
|
@ -143,7 +143,7 @@ public final class AdaptAnnotationOnClassesTest extends TestCase {
|
||||||
}
|
}
|
||||||
// Note that the type is NOT TypeAdapter<ClassWithIncorrectJsonAdapter> so this
|
// Note that the type is NOT TypeAdapter<ClassWithIncorrectJsonAdapter> so this
|
||||||
// should cause error
|
// should cause error
|
||||||
@Adapt(A.JsonAdapter.class)
|
@JsonAdapter(A.JsonAdapter.class)
|
||||||
private static final class ClassWithIncorrectJsonAdapter {
|
private static final class ClassWithIncorrectJsonAdapter {
|
||||||
@SuppressWarnings("unused") final String value;
|
@SuppressWarnings("unused") final String value;
|
||||||
ClassWithIncorrectJsonAdapter(String value) {
|
ClassWithIncorrectJsonAdapter(String value) {
|
||||||
|
@ -152,7 +152,7 @@ public final class AdaptAnnotationOnClassesTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
// This class is used in JsonAdapter Javadoc as an example
|
// This class is used in JsonAdapter Javadoc as an example
|
||||||
@Adapt(UserJsonAdapter.class)
|
@JsonAdapter(UserJsonAdapter.class)
|
||||||
private static class User {
|
private static class User {
|
||||||
final String firstName, lastName;
|
final String firstName, lastName;
|
||||||
User(String firstName, String lastName) {
|
User(String firstName, String lastName) {
|
|
@ -23,14 +23,14 @@ import junit.framework.TestCase;
|
||||||
import com.google.gson.Gson;
|
import com.google.gson.Gson;
|
||||||
import com.google.gson.GsonBuilder;
|
import com.google.gson.GsonBuilder;
|
||||||
import com.google.gson.TypeAdapter;
|
import com.google.gson.TypeAdapter;
|
||||||
import com.google.gson.annotations.Adapt;
|
import com.google.gson.annotations.JsonAdapter;
|
||||||
import com.google.gson.stream.JsonReader;
|
import com.google.gson.stream.JsonReader;
|
||||||
import com.google.gson.stream.JsonWriter;
|
import com.google.gson.stream.JsonWriter;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Functional tests for the {@link com.google.gson.annotations.Adapt} annotation on fields.
|
* Functional tests for the {@link com.google.gson.annotations.JsonAdapter} annotation on fields.
|
||||||
*/
|
*/
|
||||||
public final class AdaptAnnotationOnFieldsTest extends TestCase {
|
public final class JsonAdapterAnnotationOnFieldsTest extends TestCase {
|
||||||
|
|
||||||
public void testJsonAdapterInvoked() {
|
public void testJsonAdapterInvoked() {
|
||||||
Gson gson = new Gson();
|
Gson gson = new Gson();
|
||||||
|
@ -65,7 +65,7 @@ public final class AdaptAnnotationOnFieldsTest extends TestCase {
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final class Gadget {
|
private static final class Gadget {
|
||||||
@Adapt(PartJsonAdapter.class)
|
@JsonAdapter(PartJsonAdapter.class)
|
||||||
final Part part;
|
final Part part;
|
||||||
Gadget(Part part) {
|
Gadget(Part part) {
|
||||||
this.part = part;
|
this.part = part;
|
||||||
|
@ -96,7 +96,7 @@ public final class AdaptAnnotationOnFieldsTest extends TestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Adapt(UserJsonAdapter.class)
|
@JsonAdapter(UserJsonAdapter.class)
|
||||||
private static class User {
|
private static class User {
|
||||||
public final String name;
|
public final String name;
|
||||||
private User(String name) {
|
private User(String name) {
|
||||||
|
@ -129,7 +129,7 @@ public final class AdaptAnnotationOnFieldsTest extends TestCase {
|
||||||
|
|
||||||
private static final class Computer2 {
|
private static final class Computer2 {
|
||||||
// overrides the JsonAdapter annotation of User with this
|
// overrides the JsonAdapter annotation of User with this
|
||||||
@Adapt(UserJsonAdapter2.class)
|
@JsonAdapter(UserJsonAdapter2.class)
|
||||||
final User user;
|
final User user;
|
||||||
Computer2(User user) {
|
Computer2(User user) {
|
||||||
this.user = user;
|
this.user = user;
|
Loading…
Reference in New Issue
Block a user