Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions release-notes/VERSION
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,10 @@ Versions: 3.x (for earlier see VERSION-2.x)
=== Releases ===
------------------------------------------------------------------------

3.0.0-rc10 (not yet released)

#5302: Add one more parameter for `AnnotationIntrospector.findPreferredCreator()` method

3.0.0-rc9 (05-Sep-2025)

#4210: `ParameterNamesModule` causes `@ConstructorProperties` to be ignored,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1176,18 +1176,19 @@ public JsonCreator.Mode findCreatorAnnotation(MapperConfig<?> config, Annotated
*
* @param config Configuration settings in effect (for deserialization)
* @param valueClass Class being instantiated; defines Creators passed
* @param declaredConstructors Constructors value class declares
* @param declaredConstructors Constructors value class declares (EXCEPT possible
* 0-parameter ("default") constructor which is passed separately)
* @param declaredFactories Factory methods value class declares
* @param zeroParamsConstructor 0-parameter ("default") constructor, if class has one.
*
* @return Default Creator to possibly use for {@code valueClass}, if one can be
* determined; {@code null} if not.
*
* @since 2.18
*/
public PotentialCreator findPreferredCreator(MapperConfig<?> config,
AnnotatedClass valueClass,
List<PotentialCreator> declaredConstructors,
List<PotentialCreator> declaredFactories) {
List<PotentialCreator> declaredFactories,
Optional<PotentialCreator> zeroParamsConstructor) {
return null;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Optional;

import com.fasterxml.jackson.annotation.*;

Expand Down Expand Up @@ -668,12 +669,13 @@ public JsonCreator.Mode findCreatorAnnotation(MapperConfig<?> config, Annotated
public PotentialCreator findPreferredCreator(MapperConfig<?> config,
AnnotatedClass valueClass,
List<PotentialCreator> declaredConstructors,
List<PotentialCreator> declaredFactories) {
List<PotentialCreator> declaredFactories,
Optional<PotentialCreator> zeroParamsConstructor) {
PotentialCreator primaryCtor = _primary.findPreferredCreator(config,
valueClass, declaredConstructors, declaredFactories);
valueClass, declaredConstructors, declaredFactories, zeroParamsConstructor);
if (primaryCtor == null) {
primaryCtor = _secondary.findPreferredCreator(config,
valueClass, declaredConstructors, declaredFactories);
valueClass, declaredConstructors, declaredFactories, zeroParamsConstructor);
}
return primaryCtor;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -654,7 +654,8 @@ protected void _addCreators(Map<String, POJOPropertyBuilder> props)
primaryCreator = RecordUtil.findCanonicalRecordConstructor(_config, _classDef, constructors);
} else {
primaryCreator = _annotationIntrospector.findPreferredCreator(_config, _classDef,
constructors, factories);
constructors, factories,
Optional.ofNullable(zeroParamsConstructor));
}
// Next: remove creators marked as explicitly disabled
_removeDisabledCreators(constructors);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package tools.jackson.databind.deser.creators;

import java.util.List;
import java.util.Optional;

import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -38,7 +39,8 @@ static class AI5045 extends ImplicitNameIntrospector {
public PotentialCreator findPreferredCreator(MapperConfig<?> config,
AnnotatedClass valueClass,
List<PotentialCreator> declaredConstructors,
List<PotentialCreator> declaredFactories)
List<PotentialCreator> declaredFactories,
Optional<PotentialCreator> zeroParamsConstructor)
{
for (PotentialCreator pc : declaredConstructors) {
if (pc.paramCount() != 0) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.Optional;

import org.junit.jupiter.api.Test;

Expand Down Expand Up @@ -117,7 +118,8 @@ public PrimaryCreatorFindingIntrospector(JsonCreator.Mode mode,
public PotentialCreator findPreferredCreator(MapperConfig<?> config,
AnnotatedClass valueClass,
List<PotentialCreator> declaredConstructors,
List<PotentialCreator> declaredFactories)
List<PotentialCreator> declaredFactories,
Optional<PotentialCreator> zeroParamsConstructor)
{
// Apply to all test POJOs here but nothing else
if (!valueClass.getRawType().toString().contains("4584")) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,8 @@ public PrimaryConstructorFindingIntrospector(Class<?>... argTypes) {
public PotentialCreator findPreferredCreator(MapperConfig<?> config,
AnnotatedClass valueClass,
List<PotentialCreator> declaredConstructors,
List<PotentialCreator> declaredFactories)
List<PotentialCreator> declaredFactories,
Optional<PotentialCreator> zeroParamsConstructor)
{
// Apply to all test POJOs here but nothing else
if (!valueClass.getRawType().toString().contains("4620")) {
Expand Down
Loading