[weld-dev] Odd type assignability test
Matej Novotny
manovotn at redhat.com
Tue Apr 28 03:11:09 EDT 2020
----- Original Message -----
> From: "Laird Nelson" <ljnelson at gmail.com>
> To: "weld-dev" <weld-dev at lists.jboss.org>
> Sent: Monday, April 27, 2020 5:20:26 PM
> Subject: Re: [weld-dev] Odd type assignability test
>
> On Mon, Apr 27, 2020 at 5:27 AM Matej Novotny < manovotn at redhat.com > wrote:
>
>
> Forwarding this email to weld-dev to make it public
> So, the Foo<String> is the required parameterized type here and Foo<E> is
> parameterized bean type.
>
> Yes; that's right.
>
>
> And from CDI spec[1]:
> > A parameterized bean type is considered assignable to a parameterized
> > required type if they have identical raw type and for each parameter:
> > * the required type parameter is an actual type, the bean type parameter is
> > a type variable and the actual type is assignable to the upper bound, if
> > any, of the type variable, or
>
> Isn't that the same case? Or am I just running low on caffeine? :)
>
> Right, I know that's the case but…well, here:
>
> So Weld (apparently) implements covariant type matching rules (and invariant
> type matching rules used by the covariant ones). They are in the
> CovariantTypes and InvariantTypes classes. To my eyes, these rules are just
> JLS rules (not CDI specific except for boxing I think) and after staring at
> them crosseyed for a while they make sense.
>
> https://github.com/weld/core/blob/master/impl/src/main/java/org/jboss/weld/resolution/CovariantTypes.java
> https://github.com/weld/core/blob/master/impl/src/main/java/org/jboss/weld/resolution/InvariantTypes.java
Yes, these two are pretty much JLS rules.
>
> Then, in BeanTypeAssignabilityRules , there are specific "matching" rules for
> the bits laid out in CDI section 5.2.4 that I think differ from the JLS
> rules, but I might be making a mistake:
>
> https://github.com/weld/core/blob/master/impl/src/main/java/org/jboss/weld/resolution/BeanTypeAssignabilityRules.java
Yes, this is also correct.
Note that there are also EventTypeAssignabilityRules, DelegateInjectionPointAssignabilityRules - each implementing some of the spec bits.
>
> It looks like this case is specially handled by that (CDI specific) logic,
> not by the JLS logic. Because the bounds of E at the moment that the test
> runs are exactly Object , not exactly String . And I didn't think a
> reference of type Foo<String> could accept a reference of type Foo<Object> .
Also correct, but I cannot tell you why it was designed like this.
I have no idea what is a the basis for such use case :)
>
> Is all this correct?
>
> Best,
> Laird
>
> _______________________________________________
> weld-dev mailing list
> weld-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/weld-dev
More information about the weld-dev
mailing list