JDK 8 RFR, redux, for JDK-8005294 : Consider default methods for additions to AnnotatedElement

Peter Levart peter.levart at gmail.com
Mon Oct 28 14:24:01 UTC 2013


On 10/28/2013 06:59 AM, Joe Darcy wrote:
> Hello Joel and Peter,
>
> Working in previous feedback, please review the revised code changes for
>
>     JDK-8005294 : Consider default methods for additions to 
> AnnotatedElement
>     http://cr.openjdk.java.net/~darcy/8005294.4/
>
> I think the versions of getAnnotationsByType and getDeclaredAnnotation 
> in this patch are solid, but getDeclaredAnnotationsByType may require 
> some more refinement. (The asserts in getDeclaredAnnotationsByType are 
> commented out since I was getting a bad build as a result; I'm 
> following up with the HotSpot team.)

Hi Joe,

After un-comenting asserts, the one in line 404...

              if (indirectlyPresent == null || indirectlyPresent.length 
== 0) {
                  ...
              } else {
                  //                 assert indirectlyPresent != null && 
indirectlyPresent.length > 0;

                  if (resultSize == indirectlyPresent.length){
404:                 //                     assert *resultSize == 0 ||* 
directlyPresent == null;


...should be changed to: "assert directlyPresent == null" since 
resultSize (== indirectlyPresent.length) is always > 0 in this line...


Then perhaps a small optimization in loop at line 416 to avoid calling 
annotationType() (a Proxy method) twice:

416:                 for (Annotation a : getDeclaredAnnotations()) {
*Class<? extends Annotation> aType = a.annotationType();*
                          if (*aType*.equals(annotationClass)) {
                              indirectOffset = 1;
                              break;
                          } else if (*aType*.equals(containerType)) {
                              break;
                          }
                      }


The test looks fine. I just wonder whether you intended to uncomment or 
to remove the following lines of AnnotatedElementDelegate:

  228 //     // FIXME -- adjust once build / vm problems resolved
  229 //     @Override
  230 //     public <T extends Annotation> T[] getDeclaredAnnotationsByType(Class<T> annotationClass) {
  231 //         return base.getDeclaredAnnotationsByType(annotationClass);
  232 //     }


...since by un-commenting you would defeat the purpose of testing the 
default method.


Maybe also add the following two annotations:

@AssociatedDirectOnSuperclassIndirectOnSubclass
@AssociatedIndirectOnSuperclassDirectOnSubclass



Regards, Peter

>
> Also new in this version, the test program fleshed out.
>
> Thank,
>
> -Joe




More information about the core-libs-dev mailing list