public static AnnotationMirror findEffectiveAnnotationInHierarchy(final QualifierHierarchy qualifierHierarchy,final AnnotatedTypeMirror toSearch,final AnnotationMirror top){
  return findEffectiveAnnotationInHierarchy(qualifierHierarchy,toSearch,top,false);
}

public static AnnotationMirror findEffectiveAnnotationInHierarchy ( final QualifierHierarchy qualifierHierarchy , final AnnotatedTypeMirror toSearch , final AnnotationMirror top ) { return findEffectiveAnnotationInHierarchy ( qualifierHierarchy , toSearch , top , false ) ; }
when comparing types against the bounds of a type variable , we may encounter other type variables , wildcards , and intersections in those bounds . this method traverses the bounds until it finds a concrete type from which it can pull an annotation .
