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 Main { 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 {} public static void main(String[] args) { new Main().getElements(); } }