Hi Doug: I had pretty good success to use Demeter/Java and DJ. What I like is that I can put the generic code into a separate .beh file and I don't have to do the cross cutting manually. What I don't understand is why the DJ traversal only prints begin and then it runs into a run-time exception. Please can you check. -- Karl /proj/adaptive/www/course/f00/hw/1/scratch-graph Demeter/Java version 0.8.1-alpha-4 Copyright (c) 2000 Northeastern University Reading project file program.prj... Running the test... CountingVisitor is leaving class Adj total = 3 CountingVisitor is leaving class Adj total = 6 CountingVisitor is leaving class Adj total = 9 CountingVisitor is leaving class Adj total = 11 CountingVisitor is leaving class Adj total = 14 CountingVisitor is leaving class Adj total = 17 CountingVisitor is leaving class Adj total = 19 CountingVisitor is leaving class Adj total = 22 CountingVisitor is leaving class Adj total = 25 CountingVisitor is leaving class Adj total = 28 CountingVisitor is leaving class Adj total = 31 CountingVisitor is leaving class Adj total = 32 CountingVisitor is leaving class Adj total = 33 CountingVisitor is leaving class Adj total = 35 CountingVisitor is leaving class Adj total = 37 CountingVisitor is leaving class Adj total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Adj total = 3 CountingVisitor is leaving class Adj total = 6 CountingVisitor is leaving class Adj total = 9 CountingVisitor is leaving class Adj total = 11 CountingVisitor is leaving class Adj total = 14 CountingVisitor is leaving class Adj total = 17 CountingVisitor is leaving class Adj total = 19 CountingVisitor is leaving class Adj total = 22 CountingVisitor is leaving class Adj total = 25 CountingVisitor is leaving class Adj total = 28 CountingVisitor is leaving class Adj total = 31 CountingVisitor is leaving class Adj total = 32 CountingVisitor is leaving class Adj total = 33 CountingVisitor is leaving class Adj total = 35 CountingVisitor is leaving class Adj total = 37 CountingVisitor is leaving class Adj total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 CountingVisitor is leaving class Cd_graph total = 38 result = 38 , 38 The DJ version is: DJ version 0.8.1-alpha-3 The class graph is============================= java.lang.Object : java.lang.Class | java.lang.String | Adj_list | Adj | Token | java.lang.Throwable | Vertex | Neighbors | UniversalVisitor | Any_vertex | EDU.neu.ccs.demeter.Ident | Any_vertex_list | ParserTokenManager | ASCII_UCodeESC_CharStream | java.util.AbstractCollection | Main | EDU.neu.ccs.demeter.dj.Visitor | java.lang.Number | java.lang.Boolean | java.lang.Character | java.lang.StringBuffer | EDU.neu.ccs.demeter.Text | EDU.neu.ccs.demeter.Line | EDU.neu.ccs.demeter.Word | Parser | java.io.Reader | java.io.Writer | java.lang.reflect.AccessibleObject | EDU.neu.ccs.demeter.AroundContinuation common derived int derived java.lang.Class derived java.lang.String. int = . java.lang.Class = extends java.lang.Object implements java.io.Serializable. java.io.Serializable : java.lang.Class | java.lang.String | java.lang.Throwable | EDU.neu.ccs.demeter.Ident | java.util.Vector | java.lang.Number | java.lang.Boolean | java.lang.Character | java.lang.StringBuffer | EDU.neu.ccs.demeter.Text | EDU.neu.ccs.demeter.Line | EDU.neu.ccs.demeter.Word common . java.lang.String = extends java.lang.Object implements java.io.Serializable, java.lang.Comparable. java.lang.Comparable : java.lang.String | java.lang.Character | java.lang.Integer | java.lang.Long | java.lang.Float | java.lang.Double common . Adj_list : Cd_graph | Empty_cd_graph common extends java.lang.Object. Cd_graph = Adj Adj_list derived int derived int derived Adj derived Adj_list extends Adj_list. Adj = Vertex Neighbors derived Vertex derived Neighbors extends java.lang.Object. ParseException = boolean Token int java.lang.String java.lang.String derived java.lang.String extends java.lang.Exception. boolean = . Token = int int int int int java.lang.String Token Token derived java.lang.String extends java.lang.Object. java.lang.Exception : ParseException common extends java.lang.Throwable. java.lang.Throwable : java.lang.Exception | java.lang.Error common java.lang.Object java.lang.String derived java.lang.Throwable derived java.lang.String derived java.lang.String derived java.lang.String extends java.lang.Object implements java.io.Serializable. Vertex = EDU.neu.ccs.demeter.Ident derived EDU.neu.ccs.demeter.Ident extends java.lang.Object. Neighbors : Alternat | Construct common extends java.lang.Object. UniversalVisitor : CountingVisitor | PrintVisitor | TraceVisitor | DisplayVisitor | EqualVisitor | SubgraphVisitor | CopyVisitor common extends java.lang.Object. CountingVisitor = int derived int derived int extends UniversalVisitor. Empty_cd_graph = extends Adj_list. Any_vertex : Labeled_vertex | Syntax_vertex common extends java.lang.Object. Labeled_vertex = EDU.neu.ccs.demeter.Ident Vertex derived EDU.neu.ccs.demeter.Ident derived Vertex extends Any_vertex. EDU.neu.ccs.demeter.Ident = extends java.lang.Object implements java.io.Serializable. Syntax_vertex = java.lang.String derived java.lang.String extends Any_vertex. Any_vertex_list : Empty | Nany_vertex_list common extends java.lang.Object. Empty = extends Any_vertex_list. Nany_vertex_list = Any_vertex Any_vertex_list derived Any_vertex derived Any_vertex_list extends Any_vertex_list. Alternat = Vertex Vertex derived Vertex derived Vertex extends Neighbors. Construct = Any_vertex_list derived Any_vertex_list extends Neighbors. Parser = ParserTokenManager ASCII_UCodeESC_CharStream Token Token int int java.util.Vector int int <_Main> derived Main <_Cd_graph> derived Cd_graph <_CountingVisitorDJ> derived CountingVisitorDJ derived int <_Adj> derived Adj <_Adj_list> derived Adj_list <_Vertex> derived Vertex <_Neighbors> derived Neighbors <_Construct> derived Construct <_Alternat> derived Alternat <_Any_vertex_list> derived Any_vertex_list <_Any_vertex> derived Any_vertex <_Labeled_vertex> derived Labeled_vertex <_Syntax_vertex> derived Syntax_vertex <_String> derived java.lang.String <_Ident> derived EDU.neu.ccs.demeter.Ident <_Empty_cd_graph> derived Empty_cd_graph <_Nany_vertex_list> derived Nany_vertex_list <_Empty> derived Empty <_CountingVisitor> derived CountingVisitor <_int> derived int <_boolean> derived boolean <_char> derived char <_byte> derived byte <_short> derived short <_Number> derived java.lang.Number <_long> derived long <_float> derived float <_double> derived double <_Boolean> derived java.lang.Boolean <_Character> derived java.lang.Character <_Integer> derived java.lang.Integer <_Long> derived java.lang.Long <_Float> derived java.lang.Float <_Double> derived java.lang.Double <_StringBuffer> derived java.lang.StringBuffer <_Text> derived EDU.neu.ccs.demeter.Text <_Line> derived EDU.neu.ccs.demeter.Line <_Word> derived EDU.neu.ccs.demeter.Word derived Token derived ParseException extends java.lang.Object implements ParserConstants. ParserTokenManager = ASCII_UCodeESC_CharStream java.lang.StringBuffer int int char int int int int int int derived Token derived int derived int derived int derived Token extends java.lang.Object implements ParserConstants. ParserConstants : ParserTokenManager | Parser common . ASCII_UCodeESC_CharStream = int int int int int int int int java.io.Reader boolean boolean char char int int int derived char derived char derived char derived int derived int derived int derived int derived int derived int derived java.lang.String extends java.lang.Object. java.util.Vector : java.util.Stack common extends java.util.AbstractList implements java.util.List, java.lang.Cloneable, java.io.Serializable. java.util.AbstractList : java.util.Vector common extends java.util.AbstractCollection implements java.util.List. java.util.AbstractCollection : java.util.AbstractList common extends java.lang.Object implements java.util.Collection. java.util.Collection : java.util.AbstractCollection | java.util.List common java.lang.Object. java.util.List : java.util.AbstractList | java.util.Vector common extends java.util.Collection. java.lang.Cloneable : java.util.Vector common . Main = extends java.lang.Object. CountingVisitorDJ = int derived java.lang.Object extends EDU.neu.ccs.demeter.dj.Visitor. EDU.neu.ccs.demeter.dj.Visitor : CountingVisitorDJ common extends java.lang.Object. char = . byte = . short = . java.lang.Number : java.lang.Integer | java.lang.Long | java.lang.Float | java.lang.Double common extends java.lang.Object implements java.io.Serializable. long = . float = . double = . java.lang.Boolean = extends java.lang.Object implements java.io.Serializable. java.lang.Character = extends java.lang.Object implements java.io.Serializable, java.lang.Comparable. java.lang.Integer = extends java.lang.Number implements java.lang.Comparable. java.lang.Long = extends java.lang.Number implements java.lang.Comparable. java.lang.Float = extends java.lang.Number implements java.lang.Comparable. java.lang.Double = extends java.lang.Number implements java.lang.Comparable. java.lang.StringBuffer = extends java.lang.Object implements java.io.Serializable. EDU.neu.ccs.demeter.Text = extends java.lang.Object implements java.io.Serializable. EDU.neu.ccs.demeter.Line = extends java.lang.Object implements java.io.Serializable. EDU.neu.ccs.demeter.Word = extends java.lang.Object implements java.io.Serializable. java.io.Reader = extends java.lang.Object. TokenMgrError = int derived java.lang.String extends java.lang.Error. java.lang.Error : TokenMgrError common extends java.lang.Throwable. PrintVisitor = int boolean java.io.PrintWriter derived int derived boolean derived java.io.PrintWriter extends UniversalVisitor. java.io.PrintWriter = extends java.io.Writer. java.io.Writer : java.io.PrintWriter common extends java.lang.Object. TraceVisitor = int java.io.PrintWriter derived int derived java.io.PrintWriter extends UniversalVisitor. DisplayVisitor = int java.io.PrintWriter derived int derived java.io.PrintWriter extends UniversalVisitor. EqualVisitor = boolean java.util.Stack derived boolean derived boolean extends UniversalVisitor. java.util.Stack = extends java.util.Vector. SubgraphVisitor = boolean java.util.Stack derived boolean derived boolean extends UniversalVisitor. CopyVisitor = java.util.Stack derived java.lang.Object derived java.lang.Object extends UniversalVisitor. __Subtraversal = java.lang.reflect.Method java.lang.Object java.lang.Object extends EDU.neu.ccs.demeter.AroundContinuation. java.lang.reflect.Method = extends java.lang.reflect.AccessibleObject implements java.lang.reflect.Member. java.lang.reflect.AccessibleObject : java.lang.reflect.Method common extends java.lang.Object. java.lang.reflect.Member : java.lang.reflect.Method common . EDU.neu.ccs.demeter.AroundContinuation : __Subtraversal common extends java.lang.Object. EDU.neu.ccs.demeter.dj.Collection = java.lang.Object. end class graph ============================= begin Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalAccessException at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$VisitorTraverser.invokeVisitorMethod(ObjectGraphSlice.java:251) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$VisitorTraverser.before(ObjectGraphSlice.java:237) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseNode(ObjectGraphSlice.java:133) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdge(ObjectGraphSlice.java:191) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdges(ObjectGraphSlice.java:172) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseNode(ObjectGraphSlice.java:146) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdge(ObjectGraphSlice.java:197) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdges(ObjectGraphSlice.java:172) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseNode(ObjectGraphSlice.java:146) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdge(ObjectGraphSlice.java:191) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdges(ObjectGraphSlice.java:172) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseNode(ObjectGraphSlice.java:146) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdge(ObjectGraphSlice.java:191) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdges(ObjectGraphSlice.java:172) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseNode(ObjectGraphSlice.java:146) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdge(ObjectGraphSlice.java:197) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdges(ObjectGraphSlice.java:172) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseNode(ObjectGraphSlice.java:146) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdge(ObjectGraphSlice.java:191) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdges(ObjectGraphSlice.java:172) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseNode(ObjectGraphSlice.java:146) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdge(ObjectGraphSlice.java:197) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdges(ObjectGraphSlice.java:172) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseNode(ObjectGraphSlice.java:146) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdge(ObjectGraphSlice.java:191) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseEdges(ObjectGraphSlice.java:172) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverseNode(ObjectGraphSlice.java:146) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice$Traverser.traverse(ObjectGraphSlice.java:115) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice.traverse(ObjectGraphSlice.java:70) at EDU.neu.ccs.demeter.dj.ObjectGraphSlice.traverse(ObjectGraphSlice.java:63) at Cd_graph.countInhRelsDJ(Cd_graph.java:41) at Main.main(Main.java:27)