Skip to content

Commit ba2c4a3

Browse files
committed
Minor code simplification to remove now-obsolete optimization wrt creators
1 parent 9577138 commit ba2c4a3

File tree

2 files changed

+30
-176
lines changed

2 files changed

+30
-176
lines changed

src/main/java/com/fasterxml/jackson/databind/deser/impl/CreatorCollector.java

Lines changed: 1 addition & 175 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
11
package com.fasterxml.jackson.databind.deser.impl;
22

3-
import java.lang.reflect.AnnotatedElement;
43
import java.lang.reflect.Member;
5-
import java.lang.reflect.Type;
64
import java.util.*;
75

86
import com.fasterxml.jackson.databind.*;
@@ -91,14 +89,8 @@ public ValueInstantiator constructValueInstantiator(DeserializationContext ctxt)
9189
_creators[C_ARRAY_DELEGATE], _arrayDelegateArgs);
9290
final JavaType type = _beanDesc.getType();
9391

94-
// 11-Jul-2016, tatu: Earlier optimization by replacing the whole
95-
// instantiator did not
96-
// work well, so let's replace by lower-level check:
97-
AnnotatedWithParams defaultCtor = StdTypeConstructor
98-
.tryToOptimize(_creators[C_DEFAULT]);
99-
10092
StdValueInstantiator inst = new StdValueInstantiator(config, type);
101-
inst.configureFromObjectSettings(defaultCtor, _creators[C_DELEGATE],
93+
inst.configureFromObjectSettings(_creators[C_DEFAULT], _creators[C_DELEGATE],
10294
delegateType, _delegateArgs, _creators[C_PROPS],
10395
_propertyBasedArgs);
10496
inst.configureFromArraySettings(_creators[C_ARRAY_DELEGATE],
@@ -347,170 +339,4 @@ protected boolean _isEnumValueOf(AnnotatedWithParams creator) {
347339
return creator.getDeclaringClass().isEnum()
348340
&& "valueOf".equals(creator.getName());
349341
}
350-
351-
/*
352-
/**********************************************************
353-
/* Helper class(es)
354-
/**********************************************************
355-
*/
356-
357-
/**
358-
* Replacement for default constructor to use for a small set of
359-
* "well-known" types.
360-
* <p>
361-
* Note: replaces earlier <code>Vanilla</code>
362-
* <code>ValueInstantiator</code> implementation
363-
*
364-
* @since 2.8.1 (replacing earlier <code>Vanilla</code> instantiator
365-
*/
366-
protected final static class StdTypeConstructor extends AnnotatedWithParams
367-
implements java.io.Serializable {
368-
private static final long serialVersionUID = 1L;
369-
370-
public final static int TYPE_ARRAY_LIST = 1;
371-
public final static int TYPE_HASH_MAP = 2;
372-
public final static int TYPE_LINKED_HASH_MAP = 3;
373-
374-
private final AnnotatedWithParams _base;
375-
376-
private final int _type;
377-
378-
public StdTypeConstructor(AnnotatedWithParams base, int t) {
379-
super(base, null);
380-
_base = base;
381-
_type = t;
382-
}
383-
384-
public static AnnotatedWithParams tryToOptimize(
385-
AnnotatedWithParams src) {
386-
if (src != null) {
387-
final Class<?> rawType = src.getDeclaringClass();
388-
if (rawType == List.class || rawType == ArrayList.class) {
389-
return new StdTypeConstructor(src, TYPE_ARRAY_LIST);
390-
}
391-
if (rawType == LinkedHashMap.class) {
392-
return new StdTypeConstructor(src, TYPE_LINKED_HASH_MAP);
393-
}
394-
if (rawType == HashMap.class) {
395-
return new StdTypeConstructor(src, TYPE_HASH_MAP);
396-
}
397-
}
398-
return src;
399-
}
400-
401-
protected final Object _construct() {
402-
switch (_type) {
403-
case TYPE_ARRAY_LIST:
404-
return new ArrayList<Object>();
405-
case TYPE_LINKED_HASH_MAP:
406-
return new LinkedHashMap<String, Object>();
407-
case TYPE_HASH_MAP:
408-
return new HashMap<String, Object>();
409-
}
410-
throw new IllegalStateException("Unknown type " + _type);
411-
}
412-
413-
@Override
414-
public int getParameterCount() {
415-
return _base.getParameterCount();
416-
}
417-
418-
@Override
419-
public Class<?> getRawParameterType(int index) {
420-
return _base.getRawParameterType(index);
421-
}
422-
423-
@Override
424-
public JavaType getParameterType(int index) {
425-
return _base.getParameterType(index);
426-
}
427-
428-
@Override
429-
@Deprecated
430-
public Type getGenericParameterType(int index) {
431-
return _base.getGenericParameterType(index);
432-
}
433-
434-
@Override
435-
public Object call() throws Exception {
436-
return _construct();
437-
}
438-
439-
@Override
440-
public Object call(Object[] args) throws Exception {
441-
return _construct();
442-
}
443-
444-
@Override
445-
public Object call1(Object arg) throws Exception {
446-
return _construct();
447-
}
448-
449-
@Override
450-
public Class<?> getDeclaringClass() {
451-
return _base.getDeclaringClass();
452-
}
453-
454-
@Override
455-
public Member getMember() {
456-
return _base.getMember();
457-
}
458-
459-
@Override
460-
public void setValue(Object pojo, Object value)
461-
throws UnsupportedOperationException, IllegalArgumentException {
462-
throw new UnsupportedOperationException();
463-
}
464-
465-
@Override
466-
public Object getValue(Object pojo)
467-
throws UnsupportedOperationException, IllegalArgumentException {
468-
throw new UnsupportedOperationException();
469-
}
470-
471-
@Override
472-
public Annotated withAnnotations(AnnotationMap fallback) {
473-
throw new UnsupportedOperationException();
474-
}
475-
476-
@Override
477-
public AnnotatedElement getAnnotated() {
478-
return _base.getAnnotated();
479-
}
480-
481-
@Override
482-
protected int getModifiers() {
483-
return _base.getMember().getModifiers();
484-
}
485-
486-
@Override
487-
public String getName() {
488-
return _base.getName();
489-
}
490-
491-
@Override
492-
public JavaType getType() {
493-
return _base.getType();
494-
}
495-
496-
@Override
497-
public Class<?> getRawType() {
498-
return _base.getRawType();
499-
}
500-
501-
@Override
502-
public boolean equals(Object o) {
503-
return (o == this);
504-
}
505-
506-
@Override
507-
public int hashCode() {
508-
return _base.hashCode();
509-
}
510-
511-
@Override
512-
public String toString() {
513-
return _base.toString();
514-
}
515-
}
516342
}

src/main/java/com/fasterxml/jackson/databind/deser/impl/JDKValueInstantiators.java

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import java.util.ArrayList;
55
import java.util.Collection;
66
import java.util.Collections;
7+
import java.util.HashMap;
78
import java.util.LinkedHashMap;
89
import java.util.Map;
910

@@ -29,11 +30,11 @@ public static ValueInstantiator findStdValueInstantiator(DeserializationConfig c
2930
return new JsonLocationInstantiator();
3031
}
3132
// [databind#1868]: empty List/Set/Map
33+
// [databind#2416]: optimize commonly needed default creators
3234
if (Collection.class.isAssignableFrom(raw)) {
3335
if (raw == ArrayList.class) {
3436
return ArrayListInstantiator.INSTANCE;
3537
}
36-
// [databind#XXX]: optimize commonly needed default creators
3738
if (Collections.EMPTY_SET.getClass() == raw) {
3839
return new ConstantValueInstantiator(Collections.EMPTY_SET);
3940
}
@@ -44,6 +45,9 @@ public static ValueInstantiator findStdValueInstantiator(DeserializationConfig c
4445
if (raw == LinkedHashMap.class) {
4546
return LinkedHashMapInstantiator.INSTANCE;
4647
}
48+
if (raw == HashMap.class) {
49+
return HashMapInstantiator.INSTANCE;
50+
}
4751
if (Collections.EMPTY_MAP.getClass() == raw) {
4852
return new ConstantValueInstantiator(Collections.EMPTY_MAP);
4953
}
@@ -74,6 +78,30 @@ public Object createUsingDefault(DeserializationContext ctxt) throws IOException
7478
}
7579
}
7680

81+
private static class HashMapInstantiator
82+
extends ValueInstantiator.Base
83+
implements java.io.Serializable
84+
{
85+
private static final long serialVersionUID = 2L;
86+
87+
public final static HashMapInstantiator INSTANCE = new HashMapInstantiator();
88+
89+
public HashMapInstantiator() {
90+
super(HashMap.class);
91+
}
92+
93+
@Override
94+
public boolean canInstantiate() { return true; }
95+
96+
@Override
97+
public boolean canCreateUsingDefault() { return true; }
98+
99+
@Override
100+
public Object createUsingDefault(DeserializationContext ctxt) throws IOException {
101+
return new HashMap<>();
102+
}
103+
}
104+
77105
private static class LinkedHashMapInstantiator
78106
extends ValueInstantiator.Base
79107
implements java.io.Serializable

0 commit comments

Comments
 (0)