src/main/java/js/container/ManagedClass.java
private static <T extends Annotation> T getAnnotation(Method method, Class<T> annotationClass) {
		T annotation = method.getAnnotation(annotationClass);
		if (annotation == null) {
			for (Class<?> interfaceClass : method.getDeclaringClass().getInterfaces()) {
				try {
					annotation = interfaceClass.getMethod(method.getName(), method.getParameterTypes()).getAnnotation(annotationClass);
					if (annotation != null) {
						return annotation;
					}
				} catch (NoSuchMethodException unused) {
				}
			}
		}
		return annotation;
	}
private static <T extends Annotation> T getAnnotation(Method method, Class<T> annotationClass) {
		T annotation = method.getAnnotation(annotationClass);
		if (annotation == null) {
			for (Class<?> interfaceClass : method.getDeclaringClass().getInterfaces()) {
				try {
					annotation = interfaceClass.getMethod(method.getName(), method.getParameterTypes()).getAnnotation(annotationClass);
					if (annotation != null) {
						return annotation;
					}
				} catch (NoSuchMethodException unused) {
				}
			}
		}
		return annotation;
	}
private static < T extends Annotation > T getAnnotation ( Method method , Class < T > annotationClass ) { T annotation = method . getAnnotation ( annotationClass ) ; if ( annotation == null ) { for ( Class < ? > interfaceClass : method . getDeclaringClass ( ) . getInterfaces ( ) ) { try { annotation = interfaceClass . getMethod ( method . getName ( ) , method . getParameterTypes ( ) ) . getAnnotation ( annotationClass ) ; if ( annotation != null ) { return annotation ; } } catch ( NoSuchMethodException unused ) { } } } return annotation ; }
Get method annotation or null if none found. This getter uses extended annotation searching scope: it searches first on
given method declaring class then tries with all class interfaces. Note that only interfaces are used as alternative for
method annotation search. Super class is not included.
<p>
Returns null if no method annotation found on base class or interfaces.

@param method method to search for annotation,
@param annotationClass annotation to search for.
@param <T> annotation type.
@return annotation instance or null if none found.
Get method annotation or null if none found . This getter uses extended annotation searching scope : it searches first on given method declaring class then tries with all class interfaces . Note that only interfaces are used as alternative for method annotation search . Super class is not included . <p > Returns null if no method annotation found on base class or interfaces .