Ok, I am hoping to continue this thread. At this point I think we have multiple modules (JDK8, Kotlin, Scala, Paranamer) that will be affected for 2.5.
Going back to two problems I have outlined earlier:
(1) How to decide between "delegating" and "property-based" creator, for single-argument method, use of implicit names; and
(2) More general auto-detection of creators without having to use @JsonCreator, using implicit names provided by (JDK8 / paranamer / Scala / Kotlin)
I think that for (1), addition of property for @JsonCreator would work. Something with at least three values (delegating, property-based, default -- last meaning "use heuristics") would allow explicit override for ambiguous cases. Heuristics here could be improved, perhaps (say, considering existing of "@JsonValue" suggesting delegate as the default), but can also complicate trouble-shooting in problem cases. The simple possibility would be to use existing rule of "if explicit name, property-based; if not, delegating".
Regardless, to detect proper mode, a new method is needed in AnnotationIntrospector; and overriding this method would allow Scala-, JDK-8 et al to change detection logic and defaulting.
In the end, it may be necessary to just document the fact that single-argument constructors are a special case, and that more care will be -- unfortunately -- needed.
The question of (2) is still somewhat open, however. Problems that I see are:
(a) In general, existence of even public constructors is not (IMO) a strong(-enough) signal of intent to use those for data-binding.
(b) The way Jackson creators work, you can only have a single resolved creator to use for property-based creators (it is possible to have multiple for delegating-model, iff they use different underlying JSON type -- String, Number, Object). This is not going to easy to change, although it is a theoretical possibility
(c) In case of multiple potential property-based creators, it is not clear how to choose optimal one -- use of longest one is one heuristic, but as with (a), I am not sure I'd trust the intent.
The biggest thing, really, is that switch to using JDK8 could unexpectedly trigger use of a constructor that was, say, only meant to be used for testing. I don't like introducing breaking changes, especially sneaky ones.
But assuming that there is a new feature to enable more advanced auto-detection -- something that I would support -- does not solve the question of choosing a single optimal property-based constructor.
-+ Tatu +-
ps. I am bit torn between separating two "big question" (how to choose style/mode for 1-argument creator, in absence of @JsonCreator vs how to choose between multiple potential N-argument constructors) -- they are related, but both are big enough to discuss separately.