Skip to content

Commit b4bec1c

Browse files
committed
refactoring
1 parent 32951c3 commit b4bec1c

File tree

12 files changed

+70
-56
lines changed

12 files changed

+70
-56
lines changed

src/main/java/com/fasterxml/jackson/databind/ObjectMapper.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -676,11 +676,7 @@ public ObjectMapper enableDefaultTyping(DefaultTyping applicability, JsonTypeInf
676676
if (includeAs == JsonTypeInfo.As.EXTERNAL_PROPERTY) {
677677
throw new IllegalArgumentException("Cannot use includeAs of "+includeAs);
678678
}
679-
TypeResolverBuilder<?> typer = new DefaultTypeResolverBuilder(applicability);
680-
// we'll always use full class name, when using defaulting
681-
typer = typer.init(JsonTypeInfo.Id.CLASS, null);
682-
typer = typer.inclusion(includeAs);
683-
return setDefaultTyping(typer);
679+
return setDefaultTyping(new DefaultTypeResolverBuilder(applicability, includeAs));
684680
}
685681

686682
/**
@@ -699,12 +695,7 @@ public ObjectMapper enableDefaultTyping(DefaultTyping applicability, JsonTypeInf
699695
*/
700696
public ObjectMapper enableDefaultTypingAsProperty(DefaultTyping applicability, String propertyName)
701697
{
702-
TypeResolverBuilder<?> typer = new DefaultTypeResolverBuilder(applicability);
703-
// we'll always use full class name, when using defaulting
704-
typer = typer.init(JsonTypeInfo.Id.CLASS, null);
705-
typer = typer.inclusion(JsonTypeInfo.As.PROPERTY);
706-
typer = typer.typeProperty(propertyName);
707-
return setDefaultTyping(typer);
698+
return setDefaultTyping(new DefaultTypeResolverBuilder(applicability, propertyName));
708699
}
709700

710701
/**

src/main/java/com/fasterxml/jackson/databind/annotation/JsonNaming.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,6 @@
1010
* Note that if the {@link #value} property is omitted, its default value
1111
* means "use default naming" (that is, no alternate naming method is used).
1212
* This can be used as an override with mix-ins.
13-
*
14-
* @since 2.1
1513
*/
1614
@Target({ElementType.ANNOTATION_TYPE, ElementType.TYPE})
1715
@Retention(RetentionPolicy.RUNTIME)

src/main/java/com/fasterxml/jackson/databind/annotation/JsonTypeIdResolver.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,9 @@
1818
* for converting between java types and type id included in JSON content.
1919
* In simplest cases this can be a simple class with static mapping between
2020
* type names and matching classes.
21-
*<p>
22-
* NOTE: since 2.4, applicable to properties as well (should have been long time
23-
* ago, but problem only found then)
2421
*/
25-
@Target({ElementType.ANNOTATION_TYPE, ElementType.METHOD, ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})
22+
@Target({ElementType.ANNOTATION_TYPE,
23+
ElementType.METHOD, ElementType.FIELD, ElementType.TYPE, ElementType.PARAMETER})
2624
@Retention(RetentionPolicy.RUNTIME)
2725
@JacksonAnnotation
2826
public @interface JsonTypeIdResolver

src/main/java/com/fasterxml/jackson/databind/introspect/JacksonAnnotationIntrospector.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1278,7 +1278,7 @@ protected TypeResolverBuilder<?> _findTypeResolver(MapperConfig<?> config,
12781278
if (idRes != null) {
12791279
idRes.init(baseType);
12801280
}
1281-
b = b.init(typeInfo.getIdType(), idRes);
1281+
b = b.init(typeInfo, idRes);
12821282
// 13-Aug-2011, tatu: One complication; external id
12831283
// only works for properties; so if declared for a Class, we will need
12841284
// to map it to "PROPERTY" instead of "EXTERNAL_PROPERTY"

src/main/java/com/fasterxml/jackson/databind/jsontype/TypeIdResolver.java

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -69,15 +69,11 @@ public interface TypeIdResolver
6969

7070
/**
7171
* Method called to resolve type from given type identifier.
72-
*
73-
* @since 2.5 (throws clause added in 2.8)
7472
*/
7573
public JavaType typeFromId(DatabindContext context, String id) throws IOException;
7674

7775
/**
7876
* Method called for error-reporting and diagnostics purposes.
79-
*
80-
* @since 2.7 -- but since 2.5 has existed in {@link com.fasterxml.jackson.databind.jsontype.impl.TypeIdResolverBase}
8177
*/
8278
public String getDescForKnownTypeIds();
8379

src/main/java/com/fasterxml/jackson/databind/jsontype/TypeResolverBuilder.java

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,16 @@ public TypeDeserializer buildTypeDeserializer(DeserializationConfig config,
8888

8989
/**
9090
* Initialization method that is called right after constructing
91-
* the builder instance.
91+
* the builder instance, in cases where information could not be
92+
* passed directly (for example when instantiated for an annotation)
9293
*
93-
* @param idType Which type metadata is used
94-
* @param res (optional) Custom type id resolver used, if any
94+
* @param settings Configuration settings to apply.
9595
*
9696
* @return Resulting builder instance (usually this builder,
9797
* but not necessarily)
9898
*/
99-
public T init(JsonTypeInfo.Id idType, TypeIdResolver res);
100-
99+
public T init(JsonTypeInfo.Value settings, TypeIdResolver res);
100+
101101
/*
102102
/**********************************************************
103103
/* Methods for configuring resolver to build

src/main/java/com/fasterxml/jackson/databind/jsontype/impl/DefaultTypeResolverBuilder.java

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import java.util.Collection;
44

5+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
56
import com.fasterxml.jackson.core.TreeNode;
67
import com.fasterxml.jackson.databind.DeserializationConfig;
78
import com.fasterxml.jackson.databind.JavaType;
@@ -34,8 +35,29 @@ public class DefaultTypeResolverBuilder
3435
*/
3536
protected final DefaultTyping _appliesFor;
3637

37-
public DefaultTypeResolverBuilder(DefaultTyping t) {
38+
public DefaultTypeResolverBuilder(DefaultTyping t, JsonTypeInfo.As includeAs) {
3839
_appliesFor = t;
40+
_idType = JsonTypeInfo.Id.CLASS;
41+
_includeAs = includeAs;
42+
_typeProperty = _idType.getDefaultPropertyName();
43+
}
44+
45+
public DefaultTypeResolverBuilder(DefaultTyping t, String propertyName) {
46+
_appliesFor = t;
47+
_idType = JsonTypeInfo.Id.CLASS;
48+
_includeAs = JsonTypeInfo.As.PROPERTY;
49+
_typeProperty = propertyName;
50+
}
51+
52+
public DefaultTypeResolverBuilder(DefaultTyping t, JsonTypeInfo.As includeAs,
53+
JsonTypeInfo.Id idType, String propertyName) {
54+
_appliesFor = t;
55+
_idType = idType;
56+
_includeAs = includeAs;
57+
if (propertyName == null) {
58+
propertyName = _idType.getDefaultPropertyName();
59+
}
60+
_typeProperty = propertyName;
3961
}
4062

4163
@Override

src/main/java/com/fasterxml/jackson/databind/jsontype/impl/StdTypeResolverBuilder.java

Lines changed: 23 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -52,40 +52,54 @@ public StdTypeResolverBuilder(JsonTypeInfo.Value settings) {
5252
throw new IllegalArgumentException("idType cannot be null");
5353
}
5454
_includeAs = settings.getInclusionType();
55-
_typeProperty = settings.getPropertyName();
55+
_typeProperty = _propName(settings.getPropertyName(), _idType);
5656
_defaultImpl = settings.getDefaultImpl();
5757
}
5858
}
5959

6060
/**
6161
* @since 2.9
6262
*/
63-
protected StdTypeResolverBuilder(JsonTypeInfo.Id idType,
63+
public StdTypeResolverBuilder(JsonTypeInfo.Id idType,
6464
JsonTypeInfo.As idAs, String propName)
6565
{
6666
if (idType == null) {
6767
throw new IllegalArgumentException("idType cannot be null");
6868
}
6969
_idType = idType;
7070
_includeAs = idAs;
71-
_typeProperty = propName;
71+
_typeProperty = _propName(propName, _idType);
72+
}
73+
74+
protected static String _propName(String propName, JsonTypeInfo.Id idType) {
75+
if (propName == null) {
76+
propName = idType.getDefaultPropertyName();
77+
}
78+
return propName;
7279
}
7380

7481
public static StdTypeResolverBuilder noTypeInfoBuilder() {
75-
return new StdTypeResolverBuilder().init(JsonTypeInfo.Id.NONE, null);
82+
return new StdTypeResolverBuilder(JsonTypeInfo.Id.NONE, null, null);
7683
}
7784

7885
@Override
79-
public StdTypeResolverBuilder init(JsonTypeInfo.Id idType, TypeIdResolver idRes)
86+
public StdTypeResolverBuilder init(JsonTypeInfo.Value settings, TypeIdResolver idRes)
8087
{
81-
// sanity checks
82-
if (idType == null) {
88+
_idType = settings.getIdType();
89+
if (_idType == null) {
8390
throw new IllegalArgumentException("idType cannot be null");
8491
}
85-
_idType = idType;
8692
_customIdResolver = idRes;
93+
_includeAs = settings.getInclusionType();
94+
8795
// Let's also initialize property name as per idType default
88-
_typeProperty = idType.getDefaultPropertyName();
96+
_typeProperty = settings.getPropertyName();
97+
if (_typeProperty == null) {
98+
_typeProperty = _idType.getDefaultPropertyName();
99+
}
100+
_typeIdVisible = settings.getIdVisible();
101+
_defaultImpl = settings.getDefaultImpl();
102+
89103
return this;
90104
}
91105

src/test/java/com/fasterxml/jackson/databind/jsontype/DefaultTypingWithPrimitivesTest.java

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,8 @@ public void testDefaultTypingWithLong() throws Exception
2626
ObjectMapper mapper = ObjectMapper.builder()
2727
.enable(SerializationFeature.INDENT_OUTPUT)
2828
.build();
29-
StdTypeResolverBuilder resolver = new StdTypeResolverBuilder();
30-
resolver.init(JsonTypeInfo.Id.CLASS, null);
31-
resolver.inclusion(JsonTypeInfo.As.PROPERTY);
32-
resolver.typeProperty("__t");
29+
StdTypeResolverBuilder resolver = new StdTypeResolverBuilder(JsonTypeInfo.Id.CLASS,
30+
JsonTypeInfo.As.PROPERTY, "__t");
3331
mapper.setDefaultTyping(resolver);
3432

3533
// Serialize

src/test/java/com/fasterxml/jackson/databind/jsontype/TestDefaultForMaps.java

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,9 +73,10 @@ public void testJackson428() throws Exception
7373
{
7474
ObjectMapper serMapper = new ObjectMapper();
7575

76-
TypeResolverBuilder<?> serializerTyper = new DefaultTypeResolverBuilder(ObjectMapper.DefaultTyping.NON_FINAL);
77-
serializerTyper = serializerTyper.init(JsonTypeInfo.Id.NAME, createTypeNameIdResolver(true));
78-
serializerTyper = serializerTyper.inclusion(JsonTypeInfo.As.PROPERTY);
76+
TypeResolverBuilder<?> serializerTyper = new DefaultTypeResolverBuilder(ObjectMapper.DefaultTyping.NON_FINAL,
77+
JsonTypeInfo.As.PROPERTY);
78+
// serializerTyper = serializerTyper.init(JsonTypeInfo.Id.NAME, createTypeNameIdResolver(true));
79+
// serializerTyper = serializerTyper.inclusion(JsonTypeInfo.As.PROPERTY);
7980
serMapper.setDefaultTyping(serializerTyper);
8081

8182
// Let's start by constructing something to serialize first
@@ -88,9 +89,10 @@ public void testJackson428() throws Exception
8889

8990
// Then deserialize: need separate mapper to initialize type id resolver appropriately
9091
ObjectMapper deserMapper = new ObjectMapper();
91-
TypeResolverBuilder<?> deserializerTyper = new DefaultTypeResolverBuilder(ObjectMapper.DefaultTyping.NON_FINAL);
92-
deserializerTyper = deserializerTyper.init(JsonTypeInfo.Id.NAME, createTypeNameIdResolver(false));
93-
deserializerTyper = deserializerTyper.inclusion(JsonTypeInfo.As.PROPERTY);
92+
TypeResolverBuilder<?> deserializerTyper = new DefaultTypeResolverBuilder(ObjectMapper.DefaultTyping.NON_FINAL,
93+
JsonTypeInfo.As.PROPERTY);
94+
// deserializerTyper = deserializerTyper.init(JsonTypeInfo.Id.NAME, createTypeNameIdResolver(false));
95+
// deserializerTyper = deserializerTyper.inclusion(JsonTypeInfo.As.PROPERTY);
9496
deserMapper.setDefaultTyping(deserializerTyper);
9597

9698
MapHolder result = deserMapper.readValue(json, MapHolder.class);

0 commit comments

Comments
 (0)