Hi Doug: I am planning on making the undergraduate project a programming tool project. Is the extending DJ part reasonable? -- Karl Theme: write programming tools Using DemeterJ (for weaving and code generation) and DJ (for AP) Checking a class dictionary unique part names all classes defined (use import statements) single inheritance no inheritance loops check first of LL(1) conditions: first sets of alternatives must be disjoint. Warning, if Terminal Buffer Rule is violated. Generating code from a class dictionary Class definitions constructor calls set and get methods (allow to choose the naming convention) Extending DJ DJ is suffering from the lack of parameterized Java classes. This makes traversals through Java collection classes inconvenient to deal with because of 1. Traversal graphs that are too big and 2. Need for many bypassing clauses. A work around is to use class dictionary with parameterized collection classes for traversal computation while using Java collection classes for creating and traversing objects. Write a program that prints the difference between two traversal graphs. Use this program to print a path change summary as follows: Given an old class graph OLD, a list of strategies S={s1, s2, ...} and a new class graph NEW, print the difference between TraversalGraph(si,OLD) and TraversalGraph(si,New) for each strategy i (i = 1,2,... ). This path change summary is useful to check whether for NEW we need to adjust the strategies or whether they still work correctly. The difference may be best shown graphically but textual output is acceptable. Write a program that tests whether a traversal graph contains a unique path from the source to the target (needed for implementation of find method).