Skip to content

Commit 205fef7

Browse files
committed
Adding Class Name Condition replicating Jackson-databind.
1 parent 36f90ca commit 205fef7

File tree

6 files changed

+31
-29
lines changed

6 files changed

+31
-29
lines changed

jr-annotation-support/src/main/java/com/fasterxml/jackson/jr/annotationsupport/AnnotationBasedIntrospector.java

Lines changed: 5 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,7 @@ protected POJODefinition introspectDefinition()
8585
Constructor<?> defaultCtor = null;
8686
Constructor<?> stringCtor = null;
8787
Constructor<?> longCtor = null;
88+
Constructor<?> intCtor = null;
8889

8990
// A few things only matter during deserialization: constructors,
9091
// secondary ignoral information:
@@ -99,18 +100,16 @@ protected POJODefinition introspectDefinition()
99100
stringCtor = ctor;
100101
} else if (argType == Long.class || argType == Long.TYPE) {
101102
longCtor = ctor;
102-
} else {
103-
continue;
103+
} else if(argType == Integer.class || argType == Integer.TYPE) {
104+
intCtor = ctor;
104105
}
105-
} else {
106-
continue;
107106
}
108107
}
109108
}
110109

111110
POJODefinition def = new POJODefinition(_type,
112111
_pruneProperties(_forSerialization),
113-
defaultCtor, stringCtor, longCtor);
112+
defaultCtor, stringCtor, longCtor, intCtor);
114113
if (_ignorableNames != null) {
115114
def = def.withIgnorals(_ignorableNames);
116115
}
@@ -492,12 +491,7 @@ protected <ANN extends Annotation> ANN _find(AnnotatedElement elem, Class<ANN> a
492491
*/
493492

494493
protected APropBuilder _propBuilder(String name) {
495-
APropBuilder b = _props.get(name);
496-
if (b == null) {
497-
b = new APropBuilder(name);
498-
_props.put(name, b);
499-
}
500-
return b;
494+
return _props.computeIfAbsent(name,APropBuilder::new);
501495
}
502496

503497
protected void _addIgnoral(String name) {

jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/impl/BeanPropertyIntrospector.java

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,12 +47,13 @@ public POJODefinition pojoDefinitionForSerialization(JSONWriter w, Class<?> pojo
4747

4848
private POJODefinition _construct(Class<?> beanType, int features)
4949
{
50-
Map<String,PropBuilder> propsByName = new TreeMap<String,PropBuilder>();
50+
Map<String,PropBuilder> propsByName = new TreeMap<>();
5151
_introspect(beanType, propsByName, features);
5252

5353
Constructor<?> defaultCtor = null;
5454
Constructor<?> stringCtor = null;
5555
Constructor<?> longCtor = null;
56+
Constructor<?> intCtor = null;
5657

5758
for (Constructor<?> ctor : beanType.getDeclaredConstructors()) {
5859
Class<?>[] argTypes = ctor.getParameterTypes();
@@ -64,11 +65,9 @@ private POJODefinition _construct(Class<?> beanType, int features)
6465
stringCtor = ctor;
6566
} else if (argType == Long.class || argType == Long.TYPE) {
6667
longCtor = ctor;
67-
} else {
68-
continue;
68+
} else if (argType == Integer.class || argType == Integer.TYPE) {
69+
intCtor = ctor;
6970
}
70-
} else {
71-
continue;
7271
}
7372
}
7473
final int len = propsByName.size();
@@ -82,7 +81,7 @@ private POJODefinition _construct(Class<?> beanType, int features)
8281
props[i++] = builder.build();
8382
}
8483
}
85-
return new POJODefinition(beanType, props, defaultCtor, stringCtor, longCtor);
84+
return new POJODefinition(beanType, props, defaultCtor, stringCtor, longCtor, intCtor);
8685
}
8786

8887
private static void _introspect(Class<?> currType, Map<String, PropBuilder> props,
@@ -98,8 +97,7 @@ private static void _introspect(Class<?> currType, Map<String, PropBuilder> prop
9897
// then public fields (since 2.8); may or may not be ultimately included
9998
// but at this point still possible
10099
for (Field f : currType.getDeclaredFields()) {
101-
if (!Modifier.isPublic(f.getModifiers())
102-
|| f.isEnumConstant() || f.isSynthetic()) {
100+
if (!Modifier.isPublic(f.getModifiers()) || f.isEnumConstant() || f.isSynthetic()) {
103101
continue;
104102
}
105103
// Only include static members if (a) inclusion feature enabled and

jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/impl/BeanReader.java

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -34,19 +34,22 @@ public class BeanReader
3434
protected final Constructor<?> _defaultCtor;
3535
protected final Constructor<?> _stringCtor;
3636
protected final Constructor<?> _longCtor;
37+
protected final Constructor<?> _intCtor;
3738

3839
/**
3940
* Constructors used for deserialization use case
4041
*/
4142
public BeanReader(Class<?> type, Map<String, BeanPropertyReader> props,
42-
Constructor<?> defaultCtor, Constructor<?> stringCtor, Constructor<?> longCtor,
43+
Constructor<?> defaultCtor, Constructor<?> stringCtor, Constructor<?> longCtor, Constructor<?> intCtor,
4344
Set<String> ignorableNames, Map<String, String> aliasMapping)
4445
{
4546
super(type);
4647
_propsByName = props;
4748
_defaultCtor = defaultCtor;
4849
_stringCtor = stringCtor;
4950
_longCtor = longCtor;
51+
_intCtor = intCtor;
52+
5053
if (ignorableNames == null) {
5154
ignorableNames = Collections.<String>emptySet();
5255
}
@@ -59,8 +62,8 @@ public BeanReader(Class<?> type, Map<String, BeanPropertyReader> props,
5962

6063
@Deprecated // since 2.11
6164
public BeanReader(Class<?> type, Map<String, BeanPropertyReader> props,
62-
Constructor<?> defaultCtor, Constructor<?> stringCtor, Constructor<?> longCtor) {
63-
this(type, props, defaultCtor, stringCtor, longCtor, null, null);
65+
Constructor<?> defaultCtor, Constructor<?> stringCtor, Constructor<?> longCtor,Constructor<?> intCtor) {
66+
this(type, props, defaultCtor, stringCtor, longCtor,intCtor, null, null);
6467
}
6568

6669
public Map<String,BeanPropertyReader> propertiesByName() { return _propsByName; }
@@ -191,10 +194,13 @@ protected Object create(String str) throws Exception {
191194
}
192195

193196
protected Object create(long l) throws Exception {
194-
if (_longCtor == null) {
195-
throw new IllegalStateException("Class "+_valueType.getName()+" does not have single-long constructor to use");
197+
if (_longCtor != null) {
198+
return _longCtor.newInstance(l);
199+
} else if(_intCtor != null) {
200+
return _intCtor.newInstance((int) l);
201+
} else {
202+
throw new IllegalStateException("Class "+_valueType.getName()+" does not have single-long or single-int constructor to use");
196203
}
197-
return _longCtor.newInstance(l);
198204
}
199205

200206
protected void handleUnknown(JSONReader reader, JsonParser parser, String fieldName) throws IOException {

jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/impl/POJODefinition.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,17 @@ public class POJODefinition
2929
public final Constructor<?> defaultCtor;
3030
public final Constructor<?> stringCtor;
3131
public final Constructor<?> longCtor;
32+
public final Constructor<?> intCtor;
3233

3334
public POJODefinition(Class<?> type, Prop[] props,
34-
Constructor<?> defaultCtor0, Constructor<?> stringCtor0, Constructor<?> longCtor0)
35+
Constructor<?> defaultCtor0, Constructor<?> stringCtor0, Constructor<?> longCtor0,Constructor<?> intCtor0)
3536
{
3637
_type = type;
3738
_properties = props;
3839
defaultCtor = defaultCtor0;
3940
stringCtor = stringCtor0;
4041
longCtor = longCtor0;
42+
intCtor = intCtor0;
4143
_ignorableNames = null;
4244
}
4345

@@ -49,6 +51,7 @@ protected POJODefinition(POJODefinition base,
4951
defaultCtor = base.defaultCtor;
5052
stringCtor = base.stringCtor;
5153
longCtor = base.longCtor;
54+
intCtor = base.intCtor;
5255
_ignorableNames = ignorableN;
5356
}
5457

jr-objects/src/main/java/com/fasterxml/jackson/jr/ob/impl/ValueReaderLocator.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -443,6 +443,7 @@ protected BeanReader _resolveBeanForDeser(Class<?> raw, POJODefinition beanDef)
443443
Constructor<?> defaultCtor = beanDef.defaultCtor;
444444
Constructor<?> stringCtor = beanDef.stringCtor;
445445
Constructor<?> longCtor = beanDef.longCtor;
446+
Constructor<?> intCtor = beanDef.intCtor;
446447

447448
final boolean forceAccess = JSON.Feature.FORCE_REFLECTION_ACCESS.isEnabled(_features);
448449
if (forceAccess) {
@@ -514,7 +515,7 @@ protected BeanReader _resolveBeanForDeser(Class<?> raw, POJODefinition beanDef)
514515
}
515516
}
516517
}
517-
return new BeanReader(raw, propMap, defaultCtor, stringCtor, longCtor,
518+
return new BeanReader(raw, propMap, defaultCtor, stringCtor, longCtor,intCtor,
518519
beanDef.getIgnorableNames(), aliasMapping);
519520
}
520521

jr-objects/src/test/java/com/fasterxml/jackson/jr/failing/ReadWithCtors25Test.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,12 +6,12 @@
66
// for [jackson-jr#25], allowing single-int constructors
77
public class ReadWithCtors25Test extends TestBase
88
{
9-
static class FromInt1 {
9+
public static class FromInt1 {
1010
protected int value;
1111
public FromInt1(int v) { value = v; }
1212
}
1313

14-
static class FromInt2 {
14+
public static class FromInt2 {
1515
protected int value;
1616
public FromInt2(Integer v) { value = v.intValue(); }
1717
}

0 commit comments

Comments
 (0)