Skip to content

Commit f0fbb32

Browse files
committed
Merge branch '2.8' into 2.9
2 parents 6aa985b + a1404d5 commit f0fbb32

File tree

5 files changed

+65
-14
lines changed

5 files changed

+65
-14
lines changed

release-notes/VERSION

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,8 @@ Project: jackson-databind
2121
#1793: `java.lang.NullPointerException` in `ObjectArraySerializer.acceptJsonFormatVisitor()`
2222
for array value with `@JsonValue`
2323
(reported by Vincent D)
24+
#1804: `ValueInstantiator.canInstantiate()` ignores `canCreateUsingArrayDelegate()`
25+
(reported byb henryptung@github)
2426

2527
2.9.1 (07-Sep-2017)
2628

@@ -140,9 +142,6 @@ Project: jackson-databind
140142
`MapperFeature.ALLOW_COERCION_OF_SCALARS`
141143
(requested by magdel@github)
142144

143-
2.8.11 (not yet released)
144-
145-
146145
2.8.10 (24-Aug-2017)
147146

148147
#1657: `StdDateFormat` deserializes dates with no tz/offset as UTC instead of

src/main/java/com/fasterxml/jackson/databind/deser/BeanDeserializerFactory.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,7 @@ public JsonDeserializer<Object> buildBeanDeserializer(DeserializationContext ctx
280280
}
281281
}
282282
JsonDeserializer<?> deserializer;
283+
283284
if (type.isAbstract() && !valueInstantiator.canInstantiate()) {
284285
deserializer = builder.buildAbstract();
285286
} else {

src/main/java/com/fasterxml/jackson/databind/deser/ValueInstantiator.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -68,11 +68,12 @@ public String getValueTypeDesc() {
6868
* be created.
6969
*/
7070
public boolean canInstantiate() {
71-
return canCreateUsingDefault() || canCreateUsingDelegate()
72-
|| canCreateFromObjectWith() || canCreateFromString()
73-
|| canCreateFromInt() || canCreateFromLong()
74-
|| canCreateFromDouble() || canCreateFromBoolean();
75-
}
71+
return canCreateUsingDefault()
72+
|| canCreateUsingDelegate() || canCreateUsingArrayDelegate()
73+
|| canCreateFromObjectWith() || canCreateFromString()
74+
|| canCreateFromInt() || canCreateFromLong()
75+
|| canCreateFromDouble() || canCreateFromBoolean();
76+
}
7677

7778
/**
7879
* Method that can be called to check whether a String-based creator

src/main/java/com/fasterxml/jackson/databind/deser/std/StdValueInstantiator.java

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ public String getValueTypeDesc() {
184184
public Class<?> getValueClass() {
185185
return _valueClass;
186186
}
187-
187+
188188
@Override
189189
public boolean canCreateFromString() {
190190
return (_fromStringCreator != null);
@@ -209,27 +209,36 @@ public boolean canCreateFromDouble() {
209209
public boolean canCreateFromBoolean() {
210210
return (_fromBooleanCreator != null);
211211
}
212-
212+
213213
@Override
214214
public boolean canCreateUsingDefault() {
215215
return (_defaultCreator != null);
216216
}
217217

218218
@Override
219219
public boolean canCreateUsingDelegate() {
220-
return _delegateType != null;
220+
return (_delegateType != null);
221221
}
222222

223223
@Override
224224
public boolean canCreateUsingArrayDelegate() {
225-
return _arrayDelegateType != null;
225+
return (_arrayDelegateType != null);
226226
}
227-
227+
228228
@Override
229229
public boolean canCreateFromObjectWith() {
230230
return (_withArgsCreator != null);
231231
}
232232

233+
@Override
234+
public boolean canInstantiate() {
235+
return canCreateUsingDefault()
236+
|| canCreateUsingDelegate() || canCreateUsingArrayDelegate()
237+
|| canCreateFromObjectWith() || canCreateFromString()
238+
|| canCreateFromInt() || canCreateFromLong()
239+
|| canCreateFromDouble() || canCreateFromBoolean();
240+
}
241+
233242
@Override
234243
public JavaType getDelegateType(DeserializationConfig config) {
235244
return _delegateType;
@@ -263,7 +272,7 @@ public Object createUsingDefault(DeserializationContext ctxt) throws IOException
263272
return ctxt.handleInstantiationProblem(_valueClass, null, rewrapCtorProblem(ctxt, e));
264273
}
265274
}
266-
275+
267276
@Override
268277
public Object createFromObjectWith(DeserializationContext ctxt, Object[] args) throws IOException
269278
{
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package com.fasterxml.jackson.databind.creators;
2+
3+
import java.util.List;
4+
5+
import com.fasterxml.jackson.annotation.JsonCreator;
6+
import com.fasterxml.jackson.annotation.JsonValue;
7+
import com.fasterxml.jackson.databind.BaseMapTest;
8+
import com.fasterxml.jackson.databind.ObjectMapper;
9+
10+
public class DelegatingArrayCreator1804Test extends BaseMapTest
11+
{
12+
public static class MyTypeImpl extends MyType {
13+
private final List<Integer> values;
14+
15+
MyTypeImpl(List<Integer> values) {
16+
this.values = values;
17+
}
18+
19+
@Override
20+
public List<Integer> getValues() {
21+
return values;
22+
}
23+
}
24+
25+
static abstract class MyType {
26+
@JsonValue
27+
public abstract List<Integer> getValues();
28+
29+
@JsonCreator(mode=JsonCreator.Mode.DELEGATING)
30+
public static MyType of(List<Integer> values) {
31+
return new MyTypeImpl(values);
32+
}
33+
}
34+
35+
36+
public void testDelegatingArray1804() throws Exception {
37+
ObjectMapper mapper = new ObjectMapper();
38+
MyType thing = mapper.readValue("[]", MyType.class);
39+
assertNotNull(thing);
40+
}
41+
}

0 commit comments

Comments
 (0)