Hmm, actually the example Extension in WELD-1144 does return an AnnotatedType which returns *all* the fields (even the superclass' fields) in getFields().
The problem is that Beans.getFieldInjectionPoints() only looks at *declared* fields in WeldClass and then calls WeldClass.getSuperClass() and looks at its declared fields (in this case, the superclass is Object, so Weld actually only sees the actual class' fields). So if we can't change WeldClass.superclass, we should change Beans.getFieldInjectionPoints so it takes into account all the fields returned by WeldClass.getFields(). Of course these would need to be partitioned (as getFieldInjectionPoints() actually returns a List<Set<FieldInjectionPoint>> - a Set of field injection points for every class in the hierarchy). WDYT? On 19.7.2012 23:18, Stuart Douglas wrote: > The assumption is that if an annotated type is registered via an extension it > must also include all superclass fields as well. > > This gives much more flexibility to extension authors, otherwise it is > basically impossible to modify superclass annotations. > > Stuart > > > On 20/07/2012, at 12:10 AM, Marko Lukša wrote: > >> Hey guys. >> >> Anyone know why WeldClassImpl sets superclass to Object.class for some >> classes? This causes weld not to inject fields, declared in >> superclasses, where the annotatedType is supplied by an extension. (OK, >> not in all cases, only in cases where the annotatedType is detected as >> being modified). See https://issues.jboss.org/browse/WELD-1144 >> >> Take a look at >> https://github.com/weld/core/blob/master/impl/src/main/java/org/jboss/weld/introspector/jlr/WeldClassImpl.java#L137 >> >> I'm thinking of changing this to something along the lines of: >> >> this.superclass = >> classTransformer.loadClass(annotatedType.getJavaClass().getSuperclass()); >> >> This change does break two tests (SuperTypeTest and >> SuperclassModifiedTest), but IMO for these two tests to pass, we should >> change Beans.getFieldInjectionPoints() so it returns only the fields >> that were returned by AnnotatedType.getFields(). >> >> Is there any other reason why WeldClassImpl would need to set >> this.superclass to Object.class? >> >> Marko >> >> >> >> >> >> _______________________________________________ >> weld-dev mailing list >> [email protected] >> https://lists.jboss.org/mailman/listinfo/weld-dev _______________________________________________ weld-dev mailing list [email protected] https://lists.jboss.org/mailman/listinfo/weld-dev
