import java.util.ArrayList; import java.util.List; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; public class Main2 { public List getElements() { return new ArrayList(); } class Element {}; @Aspect static abstract class Base { @Around("call(List *.*(..))") public List elementList(ProceedingJoinPoint thisJoinPoint) { try { return (List)thisJoinPoint.proceed(); } catch (Throwable e) { throw new RuntimeException(e); } } } @Aspect static class Concrete extends Base {} // pointcut won't match because not a call to "List *(..)" public static void main(String[] args) { new Main2().getElements(); } }