[weld-dev] weld-802
Ales Justin
ales.justin at gmail.com
Mon Nov 21 08:21:13 EST 2011
> With this just remember that there can be >1 WeldClass per real class!
Sure, but I think we shouldn't wrap existing WeldClass impls -- else we end-up with dups.
(unless we then properly impl equals/hash, which is a pita in this case ...)
I've added this to ClassTransformer:
public <T> WeldClass<T> loadClass(final AnnotatedType<T> clazz) {
// don't wrap existing weld class, dup instances!
if (clazz instanceof WeldClass) {
return (WeldClass<T>) clazz;
} else if (clazz instanceof ForwardingAnnotatedType && ((ForwardingAnnotatedType) clazz).delegate() instanceof WeldClass) {
ForwardingAnnotatedType fat = (ForwardingAnnotatedType) clazz;
return (WeldClass<T>) fat.delegate();
} else {
return (WeldClass<T>) annotatedTypes.get(clazz);
}
}
>
>> "Bar extends Foo"
>>
>> The problem is that both Bar and Foo are added as AnnotatedType against ClassTransformer,
>> and eventually deployed as such.
>>
>> But WeldClassImpl::superclass is looked-up against ClassTransformer::classes --> diff WC_Foo instances
>>
>>> ClassTransformer
>>>
>>> private final ConcurrentMap<TypeHolder<?>, WeldClass<?>> classes;
>>> private final ConcurrentMap<AnnotatedType<?>, WeldClass<?>> annotatedTypes;
>>>
>>> ... and no equals/hash impl on WeldClassImpl ...
>>>
>>>
>>>> WELD-802 is due to WeldClassImpl not being the same for same class:
>>>>
>>>> • clazz = {java.lang.Class at 5703}"class org.jboss.weld.tests.specialization.weld802.Foo"
>>>> • weldClass = {org.jboss.weld.introspector.jlr.WeldClassImpl at 5687}"public at RequestScoped class org.jboss.weld.tests.specialization.weld802.Foo"
>>>>
>>>> --
>>>>
>>>> • key: org.jboss.weld.introspector.jlr.WeldClassImpl = {org.jboss.weld.introspector.jlr.WeldClassImpl at 5709}"public at RequestScoped class org.jboss.weld.tests.specialization.weld802.Foo"
>>>> • value: org.jboss.weld.bean.ManagedBean = {org.jboss.weld.bean.ManagedBean at 5961}"Managed Bean [class org.jboss.weld.tests.specialization.weld802.Foo] with qualifiers [@Any @Default]"
>>>>
>>>> ... investigating further ...
>>>>
>>>
>>
>> _______________________________________________
>> weld-dev mailing list
>> weld-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/weld-dev
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/weld-dev/attachments/20111121/69bef7d5/attachment.html
More information about the weld-dev
mailing list