code: public static <A extends Annotation> A findTypeAnnotation(final Class<?> type, final Class<A> targetAnnotationClass) {
  		Objects.requireNonNull(type, "incoming 'type' is not valid");
  		Objects.requireNonNull(targetAnnotationClass, "incoming 'targetAnnotationClass' is not valid");
  
  		if (type.equals(Object.class))
  			return null;
  		//check annotation presence on class itself and its annotations if any
  		final A annotation = findAnnotation(type, targetAnnotationClass);
  		if (annotation != null)
  			return annotation;
  		//recursive call to check superclass if present
  		final Class<?> superClass = type.getSuperclass();
  		if (superClass != null)
  			return findTypeAnnotation(superClass, targetAnnotationClass);
  		return null;
  	}
docs: Recursive annotation search on type, it annotations and parents hierarchy. Interfaces ignored.
  
  @param type
  {@link Class}
  @param targetAnnotationClass
  required {@link Annotation} class
  @param <A>
  type param
  @return {@link A} in case if found, {@code null} otherwise