/** * Utility strategies for navigating and loading classfiles from * directory hierarchies. * * @author Karl Trygve Kalleberg <karltk@cs.uu.nl> */ module dryad/util/loader imports liblib strategies /** * Apply a strategy recursively to all files in a directory hierarchy. * * The initial input is the filename of the root directory to start * traversing. * * The result is a collection of the result of s, in hierarchical lists, * matching the directory hierarchy. * * @type String -> List(List(...)) */ dir-topdown(s) = ?base ; readdir ; filter(not(?".") ; not(?"..")) ; map({ x, y: ( x -> <concat-strings> [ base, "/", x ])}) => files ; <filter({ x: ?x ; filemode ; not(isdir) ; !x }) ; filter(s)> files => r ; <filter({ x: ?x ; filemode ; isdir ; !x }) ; map(dir-topdown(s))> files => r' ; <concat> [ r, r' ] /** * Load all .java files found in a directory hierarchy into the Dryad * repository. * * Input is the base directory to start from. * * @type String -> _ */ load-all-source-files = load-all-x-files(|".java") /** * Load all .class files found in a directory hierarchy into the Dryad * repository. * * Input is the base directory to start from. * * @type String -> _ */ load-all-class-files = load-all-x-files(|".class") /* hidden */ strategies load-all-x-files(|ext) = dir-topdown({x: ?x ; is-substring(!ext) ; !x}) ; flatten-list ; map(\ x -> FILE(x) \) ; map(debug ; xtc-transform(!"parse-java", pass-verbose)) ; map(read-from; define-compilation-unit) register-java-file(|ext) = ?x ; is-substring(!ext) ; <define-source-files> [ FILE(x) ]