Skip to content

Commit 38e022f

Browse files
committed
Only loop over constructor parameters once
1 parent 4d0d628 commit 38e022f

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

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

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

455+
final Map<String, Integer> indexMap = new HashMap<>();
456+
if (RecordsHelpers.isRecordType(raw)) {
457+
final Parameter[] parameters = constructors._recordCtor.getParameters();
458+
for (int i = 0; i < parameters.length; i++) {
459+
Parameter parameter = parameters[i];
460+
if (!parameter.getName().isBlank()) {
461+
indexMap.put(parameter.getName(), i);
462+
}
463+
}
464+
}
465+
455466
if (len == 0) {
456467
propMap = Collections.emptyMap();
457468
} else {
@@ -497,13 +508,8 @@ protected BeanReader _resolveBeanForDeser(Class<?> raw, POJODefinition beanDef)
497508
}
498509

499510
if (isRecord) {
500-
Parameter[] parameters = constructors._recordCtor.getParameters();
501-
for (int j = 0; j < parameters.length; j++) {
502-
Parameter parameter = parameters[j];
503-
if (!parameter.getName().isBlank() && parameter.getName().equals(rawProp.name)) {
504-
propMap.put(rawProp.name, new BeanPropertyReader(rawProp.name, field, setter, j));
505-
}
506-
}
511+
final Integer ctorIndex = indexMap.get(rawProp.name);
512+
propMap.put(rawProp.name, new BeanPropertyReader(rawProp.name, field, setter, ctorIndex));
507513
} else {
508514
propMap.put(rawProp.name, new BeanPropertyReader(rawProp.name, field, setter, i));
509515
}

0 commit comments

Comments
 (0)