aspect Traversals { declare strategy: eachCommand: "from Commands to Command"; declare traversal: void interpret(CompoundFile cd): eachCommand(Interpreter); declare strategy: eachFile: "intersect(from CompoundFile to File, down)"; declare traversal: void listAll(X x): eachFile(FileLister); // FIXME: shouldn't need to duplicate the strategy // Workaround for ajc 1.1beta4 bug 30439 declare strategy: eachFile2: "intersect(from CompoundFile to File, down)"; declare traversal: void copyContents(CompoundFile target): eachFile2(FileCopier); declare strategy: eachDirectory: "intersect(from CompoundFile to CompoundFile, down)"; declare traversal: void findDirectory(DirectoryName target): eachDirectory(DirFinder); declare strategy: down: "from * bypassing -> *,parent,* to *"; declare strategy: up: "from * bypassing -> *,contents,* to *" }