/**
* Utility strategies for debugging and inspecting the
* Dryad model.
*
* @author Karl Trygve Kalleberg <karltk@cs.uu.nl>
*/
module dryad/util/debug
imports
liblib
dryad/model/package
dryad/model/class
strategies
/**
* Prints the name of a package, class, method or field to screen,
* preceeded by a string prefix.
*
* @param pfx - the string to prepend before printing
* @type Class Object | Method Object | Package Object | Field Object -> same
*/
dump-name(|pfx) =
where(get-simple-name => x ; <concat-strings; debug> [ pfx, x ])
/**
* Prints all methods of a class, preceeded by a string prefix.
*
* @param pfx - the string to be prepended before printing
* @type Class Object -> Class Object
*/
dump-methods(|pfx) =
where(get-methods ; map(dump-name(|pfx)))
/**
* Prints all fields of a class, preceeded by a string prefix.
*
* @param pfx - the string to be prepended before printing
* @type Class Object -> Class Object
*/
dump-fields(|pfx) =
where(get-fields ; map(dump-name(|pfx)))
/**
* Print structural information about a Class Object to stdout,
* each line prefixed by pfx.
*
* @param pfx - the string to be prepended before printing
* @type Class Object -> Class Object
*/
dump-classes(|pfx) =
where(<concat-strings> [ pfx, " * "] => cpfx)
; where(<concat-strings> [ pfx, " - "] => mpfx)
; where(
get-toplevel-classes
; map(dump-name(|cpfx) ; dump-fields(|mpfx) ; dump-methods(|mpfx))
)
/**
* Print structural information about a Package Object to stdout,
* each line prefixed by pfx.
*
* @param pfx - the string to be prepended before printing
* @type Package Object -> Package Object
*/
dump-packages(|pfx) =
where(try(dump-classes(|pfx)))
; get-subpackages
; map(try(dump-name(|pfx)) ; try(dump-classes(|pfx)) ; dump-packages(|<concat-strings> [ " ", pfx ]))