import java.util.*; public aspect AfterReturningListOfSomethingExtends { // returning(List, List, not List // matches List, List with unchecked warning List rawList(List l) { return l; } List listOfString(List ls) { return ls; } List listOfNumber(List ln) { return ln; } List listOfDouble(List ld) { return ld; } List listOfSomething(List ls) { return ls; } List listOfSomethingExtends(List ln) { return ln; } List listOfSomethingSuper(List ln) { return ln; } public static void main(String[] args) { AfterReturningListOfSomethingExtends a = AfterReturningListOfSomethingExtends.aspectOf(); a.rawList(new ArrayList()); a.listOfString(null); a.listOfNumber(null); a.listOfDouble(null); a.listOfSomething(new ArrayList()); a.listOfSomethingExtends(null); a.listOfSomethingSuper(null); } after() returning(List ln) : execution(* *(..)) { System.out.println("List matches " + thisJoinPointStaticPart); } }