package org.stagemonitor.tracing.ejb; import net.bytebuddy.description.method.MethodDescription; import net.bytebuddy.matcher.ElementMatcher; import javax.ejb.Remote; import static net.bytebuddy.matcher.ElementMatchers.isAnnotatedWith; import static org.stagemonitor.tracing.ejb.IsDeclaredInInterfaceHierarchyElementMatcher.isDeclaredInInterfaceHierarchy; class RemoteInterfaceMethodMatcher extends ElementMatcher.Junction.AbstractBase<MethodDescription> { static AbstractBase<MethodDescription> overridesMethodFromInterfaceWhichIsAnnotatedWithRemote() { return new RemoteInterfaceMethodMatcher(); } @Override public boolean matches(MethodDescription target) { return target.getDeclaringType().getInterfaces().asErasures() .filter(isAnnotatedWith(Remote.class)) .filter(isDeclaredInInterfaceHierarchy(target)).size() > 0; } }