aspect SubclassCrossRefs { // Fill in cross-references for // - superclass -> subclasses // - TODO: handle implements relation // - TODO: handle sub/super-interfaces // *** API *** // A ClassDecl has a *subclasses()* attribute, containing references to the declarations of its subclasses. // Currently emulated by a method. // syn Collection ClassDecl.subclasses(); // *** Implementation *** // In future versions of JastAdd the *subclasses* attribute might be implemented // using an explicit construct for jointly evaluated collection attributes. // Emulated implementation of jointly evaluated collection attribute public Collection ClassDecl.subclasses() { Program root = getProgram(); if (!root.subclassCrossRefsFilledIn) { root.fillInSubclassCrossRefs(); root.subclassCrossRefsFilledIn = true; } return privateSubclasses; } private LinkedList ClassDecl.privateSubclasses = new LinkedList(); boolean Program.subclassCrossRefsFilledIn = false; void ASTNode.fillInSubclassCrossRefs() { for(int i=0; i