The Northeastern Branch of the History of AspectJ Aspect-Oriented Software Development has several roots, one of them at Northeastern University. We started with observing that in object-oriented programs, traversal-related concerns cut across the class structure. This lead to Adaptive Programming (AP) where we not only encapsulate the traversal-related concerns but we also loosen them from class infrastructure. Next we observed that the synchronization concern does not align well with the class and method structure and we developed a domain specific aspect language, called synchronization patterns (later it evolved to COOL) [Lopes/Lieberherr ECOOP 1994]. The next step was a second domain specific aspect-language called GOOP (later it evolved to RIDL) for remote interaction [Lopes95]. In collaboration with Xerox PARC, we developed implementations of those languages in our Demeter system and we noticed several overlaping features of both implementations that invited us to develop a general purpose weaving language to factor out the commonalities. At about the same time, Gregor Kiczales and Crista Lopes and other researchers at Xerox PARC evolved their first version of AspectJ which included implementations of both COOL and RIDL to a general purpose aspect-oriented programming language. AspectJ has greatly evolved into a powerful AOP language. From the Aspect Weaver of the DemeterJ tool: http://www.ccs.neu.edu/research/demeter/DemeterJava/UserManual/node6.html#SECTION00600000000000000000 Enhancing methods and interfaces: AugmentMethod ::= InsertPlace FullMethodName JavaCode . InsertPlace ::= "before:" | "after:" . FullMethodName ::= Ident "." GenMethodName [ MethodArgTypes] . GenMethodName ::= Ident | "*" . For example: before: MyClass.* (@ System.out.println("Entering some method of class MyClass"); @) Will prepend each method of MyClass with the code shown. In AspectJ: before(): execution(* MyClass.*(..)) { System.out.println("Entering a method "+thisJoinPoint); } To implement an interface in an existing class, use: "implement:" InterfaceName "in:" ClassName ";" . For example: implement: java.util.Enumeration in: MyStack; In AspectJ: declare parents: MyStack implements java.util.Enumeration; ================================= @InProceedings{Lopes95b, author = "Cristina Videira Lopes", title = "Graph-based optimizations for parameter passing in remote invocations", editor = "Luis-Felipe Cabrera and Marvin Theimer", pages = "179-182", booktitle = "4th International Workshop on Object Orientation in Operating Systems", year = "1995", organization = "IEEE", publisher = "Computer Society Press", address = "Lund, Sweden", month = "August", annote = "IWOOOS'95, short version" }