Skip to content

Commit ce4b56f

Browse files
committed
Minor tweaks, add release notes
1 parent eb6521b commit ce4b56f

File tree

6 files changed

+22
-9
lines changed

6 files changed

+22
-9
lines changed

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,8 @@ public class BeanConstructors
1313
protected final Class<?> _valueType;
1414

1515
protected Constructor<?> _noArgsCtor;
16+
17+
// @since 2.18
1618
protected Constructor<?> _recordCtor;
1719

1820
protected Constructor<?> _intCtor;
@@ -28,6 +30,7 @@ public BeanConstructors addNoArgsConstructor(Constructor<?> ctor) {
2830
return this;
2931
}
3032

33+
// @since 2.18
3134
public BeanConstructors addRecordConstructor(Constructor<?> ctor) {
3235
_recordCtor = ctor;
3336
return this;
@@ -73,7 +76,8 @@ protected Object create() throws Exception {
7376
return _noArgsCtor.newInstance((Object[]) null);
7477
}
7578

76-
protected Object create(Object[] components) throws Exception {
79+
// @since 2.18
80+
protected Object createRecord(Object[] components) throws Exception {
7781
if (_recordCtor == null) {
7882
throw new IllegalStateException("Class "+_valueType.getName()+" does not have record constructor to use");
7983
}

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

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public class BeanReader
3636
*/
3737
protected final BeanConstructors _constructors;
3838

39-
protected boolean _isRecordType;
39+
protected final boolean _isRecordType;
4040

4141
/**
4242
* Constructors used for deserialization use case
@@ -158,6 +158,7 @@ public Object read(JSONReader r, JsonParser p) throws IOException
158158
return _constructors.create(p.getLongValue());
159159
case START_OBJECT:
160160
{
161+
// [jackson-jr#148] Record deser support (2.18)
161162
if (_isRecordType) {
162163
final List<Object> values = new ArrayList<>();
163164

@@ -170,8 +171,9 @@ public Object read(JSONReader r, JsonParser p) throws IOException
170171
}
171172
values.add(prop.getReader().readNext(r, p));
172173
}
173-
return _constructors.create(values.toArray());
174+
return _constructors.createRecord(values.toArray());
174175
}
176+
// If not Record, need to use default (no-args) Constructors
175177
Object bean = _constructors.create();
176178
String propName;
177179
final Object[] valueBuf = r._setterBuffer;

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@
88
import java.util.Map;
99

1010
/**
11-
* Helper class to get Java Record metadata.
11+
* Helper class to get Java Record metadata, from Java 8 (not using
12+
* JDK 17 methods)
13+
*
14+
* @since 2.18
1215
*/
1316
public final class RecordsHelpers {
1417
private static boolean supportsRecords;

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

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -452,7 +452,6 @@ protected BeanReader _resolveBeanForDeser(Class<?> raw, POJODefinition beanDef)
452452
final Map<String, BeanPropertyReader> propMap;
453453
Map<String, String> aliasMapping = null;
454454

455-
boolean isRecord = RecordsHelpers.isRecordType(raw);
456455
if (len == 0) {
457456
propMap = Collections.emptyMap();
458457
} else {
@@ -474,12 +473,12 @@ protected BeanReader _resolveBeanForDeser(Class<?> raw, POJODefinition beanDef)
474473
setter = null;
475474
}
476475
}
477-
if (isRecord) {
476+
if (RecordsHelpers.isRecordType(raw)) {
478477
try {
479478
field = raw.getDeclaredField(rawProp.name);
480479
} catch (NoSuchFieldException e) {
481-
throw new IllegalStateException("Cannot access field " + rawProp.name
482-
+ " of record class " + raw.getName(), e);
480+
throw new IllegalStateException("Cannot access field '" + rawProp.name
481+
+ "' of record class `" + raw.getName() + "`", e);
483482
}
484483
} else {
485484
// if no setter, field would do as well

release-notes/CREDITS-2.x

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,7 @@ Julian Honnen (@jhonnen)
6565
when using `JSON.treeFrom()`
6666
(2.17.1)
6767

68+
Tomasz Gawęda (@TomaszGaweda)
69+
70+
* Contributed #148: Add support for Java Record deserialization
71+
(2.18.0)

release-notes/VERSION-2.x

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,8 @@ Modules:
1313

1414
2.18.0 (not yet released)
1515

16-
No changes since 2.17
16+
#148: Add support for Java Record deserialization
17+
(contributed by Tomasz G)
1718

1819
2.17.1 (04-May-2024)
1920

0 commit comments

Comments
 (0)