diff --git a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java index 005b9bd593..8670ddc4d6 100644 --- a/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java +++ b/src/main/java/com/fasterxml/jackson/databind/introspect/POJOPropertiesCollector.java @@ -644,7 +644,7 @@ protected void _addCreators(Map props) final PotentialCreators creators = _potentialCreators; // First, resolve explicit annotations for all potential Creators - // (note: will skip ones annotated as DISABLED) + // (but do NOT filter out DISABLED ones yet!) List constructors = _collectCreators(_classDef.getConstructors()); List factories = _collectCreators(_classDef.getFactoryMethods()); @@ -658,7 +658,10 @@ protected void _addCreators(Map props) canonical = _annotationIntrospector.findPrimaryCreator(_config, _classDef, constructors, factories); } - + // Next: remove creators marked as explicitly disabled + _removeDisabledCreators(constructors); + _removeDisabledCreators(factories); + // And then remove non-annotated static methods that do not look like factories _removeNonFactoryStaticMethods(factories, canonical); @@ -759,14 +762,23 @@ private List _collectCreators(List ctors) + { + Iterator it = ctors.iterator(); + while (it.hasNext()) { + // explicitly prevented? Remove + if (it.next().creatorMode() == JsonCreator.Mode.DISABLED) { + it.remove(); + } + } + } + private void _removeNonVisibleCreators(List ctors) { Iterator it = ctors.iterator();