I agree, we should use similar wording and add a TCK test.
That's also what Ladislav already stated on the issue -
Matej
On Thu, Oct 17, 2024 at 12:03 PM Martin Kouba <mkouba(a)redhat.com> wrote:
I think that it makes a lot of sense to follow the rules from
type-safe
resolution here, i.e.
https://jakarta.ee/specifications/cdi/4.1/jakarta-cdi-spec-4.1#primitive_...
.
Martin
On 17. 10. 24 9:39, Matej Novotny wrote:
> Hello,
>
> this is a good candidate for spec issue. I've created one -
>
https://github.com/jakartaee/cdi/issues/829
> <
https://github.com/jakartaee/cdi/issues/829>
> My personal take is that Weld behavior is a way to go as otherwise you'd
> have no use for observing primitive types.
> Strictly speaking, it is ATM Weld value-add but I don't see why the spec
> couldn't cover this or at least have some TCK for it (I found none).
>
> Matej
>
> On Thu, Oct 17, 2024 at 4:06 AM Laird Nelson <ljnelson(a)gmail.com
> <mailto:ljnelson@gmail.com>> wrote:
>
> The CDI 4.0 spec says in section 2.8.1
> (
https://jakarta.ee/specifications/cdi/4.0/jakarta-cdi-spec-4.0#event_type...
<
https://jakarta.ee/specifications/cdi/4.0/jakarta-cdi-spec-4.0#event_type...
>):
>
> "Any Java type may be an observed event type."
>
> That means I can do this:
>
> private void primitive(@Observes int i) { // any type, including
> int, can be an observed event type
> System.out.println("primitive: " + i);
> }
>
> And this:
>
> private void wrapper(@Observes Integer i) {
> System.out.println("wrapper: " + i);
> }
>
> Then of course the only way to fire an event is by using the Event
> object and specifying the type of even you want to fire as its sole
> type argument:
>
> // for example
> @Inject
> private Event<Integer> e;
>
> (Type arguments of course cannot be primitive.)
>
> No mention in the specification's section on observer resolution
> talks about primitive types and/or wrapper types and how they
> interact. (Obviously there are unrelated sections regarding typesafe
> resolution in the context of dependency injection that do talk about
> this, but they do not seem to apply here without a biiiiiig stretch
> (observed event parameters are not injection points; event types are
> not bean types).)
>
> If I do e.fire(Integer.valueOf(42)), the primitive(int) observer
> method above is called (in Weld 5.1.3.Final). So is the
> wrapper(Integer) observer method. This certainly is convenient and
> I'm kind of glad it works that way, but is it correct? Is it a Weld
> value-add? Or should the spec have said something about
> interoperability of primitives and wrapper types in observer
resolution?
>
> Best,
> Laird
> _______________________________________________
> weld-dev mailing list -- weld-dev(a)lists.jboss.org
> <mailto:weld-dev@lists.jboss.org>
> To unsubscribe send an email to weld-dev-leave(a)lists.jboss.org
> <mailto:weld-dev-leave@lists.jboss.org>
> Privacy Statement:
https://www.redhat.com/en/about/privacy-policy
> <
https://www.redhat.com/en/about/privacy-policy>
> List Archives:
>
https://lists.jboss.org/archives/list/weld-dev@lists.jboss.org/message/ID...
<
https://lists.jboss.org/archives/list/weld-dev@lists.jboss.org/message/ID...
>
>
>
> _______________________________________________
> weld-dev mailing list -- weld-dev(a)lists.jboss.org
> To unsubscribe send an email to weld-dev-leave(a)lists.jboss.org
> Privacy Statement:
https://www.redhat.com/en/about/privacy-policy
> List Archives:
https://lists.jboss.org/archives/list/weld-dev@lists.jboss.org/message/FZ...
--
Martin Kouba
Principal Software Engineer
Red Hat, Czech Republic