On 2/26/2015 12:30 AM, Joel Borggrén-Franck wrote:
I realize now that this code will probably never have worked on other 
hypothetical implementations of Annotations.

This is what I was wondering when I see it expect
sun.reflect.annotation.AnnotationType.

The problem is with the default method 
AnnotatedElement::getDeclaredAnnotationsByType. If someone has an external 
implementation of AnnotatedElement (and one of the lessons from adding these 
methods in 8 was that there are other implementations) then if that external 
implementation haven’t added getDeclaredAnnotationsByType they will call into 
our AnnotationSupport. This is all fine if that external representation of 
AnnotatedElement uses our representation of Annotations, with Proxies and all. 
But I suspect that the conditions that would end up taking the non-proxy code 
path in the patch, will already fail in the check:

              AnnotationType annoType = 
AnnotationType.getInstance(containerClass);
              if (annoType == null)
                  throw invalidContainerException(container, null);

So what is the best thing to do here if the annotation is not Proxy based and 
is coming from an implementation of the AnnotatedElement interface that we 
don’t control and that is missing the methods added in 8?

I did a quick search on my corpus and find only one reference to
sun.reflect.annotation.AnnotationType.  Looks like external implementation
doesn't get pass this.

I think throwing here might be the best option, especially since we will 
probably already have failed in the AnnotationType.getInstance check.

I haven't studied closely the specification about support for alternate implementation. One thing I would say is that if the implementation never works for alternate implementation, to fix JDK-8073056, I would simply remove line 207-218. Perhaps file a new issue to follow up the support for alternate implementation if appropriate.

Mandy

Reply via email to