Implement #47
diff --git a/release-notes/VERSION b/release-notes/VERSION
index 905c556..fc1d94a 100644
--- a/release-notes/VERSION
+++ b/release-notes/VERSION
@@ -13,6 +13,7 @@
2.5.0 (not yet released)
+#47: Add `@JsonCreatore.mode` property to explicitly choose between delegating- and property-based creators
- Added `@JsonInclude.content` to allow specifying inclusion criteria
for `java.util.Map` entries separate from inclusion of `Map` values
themselves
diff --git a/src/main/java/com/fasterxml/jackson/annotation/JsonCreator.java b/src/main/java/com/fasterxml/jackson/annotation/JsonCreator.java
index 9646674..396ce99 100644
--- a/src/main/java/com/fasterxml/jackson/annotation/JsonCreator.java
+++ b/src/main/java/com/fasterxml/jackson/annotation/JsonCreator.java
@@ -36,5 +36,48 @@
@JacksonAnnotation
public @interface JsonCreator
{
- // no values, since there's no property
+ /**
+ * Property that is used to indicate how argument(s) is/are bound for creator,
+ * in cases there may be multiple alternatives. Currently the one case is that
+ * of a single-argument creator method, for which both so-called "delegating" and
+ * "property-based" bindings are possible: since
+ * delegating mode can not be used for multi-argument creators, the only choice
+ * there is "property-based" mode.
+ * Check {@link Mode} for more complete explanation of possible choices.
+ *<p>
+ * Default value of {@link Mode#DEFAULT} means that caller is to use standard
+ * heuristics for choosing mode to use.
+ *
+ * @since 2.5
+ */
+ public Mode mode() default Mode.DEFAULT;
+
+ /**
+ * @since 2.5
+ */
+ public enum Mode {
+ /**
+ * Pseudo-mode that indicates that caller is to use default heuristics for
+ * choosing mode to use. This typically favors use of delegating mode for
+ * single-argument creators that take structured types.
+ */
+ DEFAULT,
+
+ /**
+ * Mode that indicates that if creator takes a single argument, the whole incoming
+ * data value is to be bound into declared type of that argument; this "delegate"
+ * value is then passed as the argument to creator.
+ */
+ DELEGATING,
+
+ /**
+ * Mode that indicates that the argument(s) for creator are to be bound from matching
+ * properties of incoming Object value, using creator argument names (explicit or implicit)
+ * to match incoming Object properties to arguments.
+ *<p>
+ * Note that this mode is currently (2.5) always used for multiple-argument creators;
+ * the only ambiguous case is that of a single-argument creator.
+ */
+ PROPERTIES
+ }
}