/**
* Compilation Unit (Source)
*
* @author Martin Bravenboer <martin@cs.uu.nl>
*/
module dryad/model/compilation-unit
imports
dryad/lib-ext/oo/classes
dryad/model/source-class
dryad/util/jtree
dryad/util/jtree-overlays
signature
constructors
JavaCompilationUnit : ClassName
/**
* Stratego class support for compilation units.
*/
strategies
/**
* Constructs a new compilation unit.
*
* @type _ -> Compilation Unit
*/
new-compilation-unit =
<classes_get-class> JavaCompilationUnit()
; classes_new-instance
/**
* Succeeds if the current term is an instance of Java compilation unit
*/
instanceof-JavaCompilationUnit =
classes_instanceof(|JavaCompilationUnit())
/**
* Package
*/
strategies
/**
* Returns the package of this compilation unit.
*
* @todo Use a reference to the package in the reference AST?
* @type CompilationUnit Object -> Package Object
*/
get-package = instanceof-JavaCompilationUnit;
get-reference-ast
; get-package-of-compilation-unit
/**
* Type Declarations
*/
strategies
/**
* @type CompilationUnit Object -> List(Class Object)
*/
get-type-declarations = instanceof-JavaCompilationUnit;
get-reference-ast
; ?CompilationUnit(_, _, <retain-all(instanceof-JavaClass)>)
/**
* Reference AST
*/
strategies
/**
* Returns the Reference AST from this compilation unit.
*
* @type CompilationUnit Object -> ReferenceAST(CompilationUnit)
*/
get-reference-ast = instanceof-JavaCompilationUnit;
classes_get-instance-field(|"reference-ast")
set-reference-ast(|ref-ast) = instanceof-JavaCompilationUnit;
classes_set-instance-field(|"reference-ast", ref-ast)
strategies
/**
* Initializes the Reference AST of this CompilationUnit from the given AST.
*
* @todo Use a reference for the package in the package declaration?
* @param CompilationUnit
* @type CompilationUnit Object -> CompilationUnit Object
*/
set-ast(|ast) = instanceof-JavaCompilationUnit;
?this; where(
<get-package-of-compilation-unit> ast => pkg
; let to-ref = {tast, name, class:
?tast
; get-name-of-typedec => name
; new-source-class(|name) => class
; set-compilation-unit(|this)
; set-ast(|tast)
; <add-toplevel-class(|class)> pkg
; !class
<+ ?Semicolon()
}
in <CompilationUnit(id, id, map(to-ref))> ast => ref-ast
end
)
; classes_set-instance-field(|"reference-ast", ref-ast)
/**
* Returns the AST of this compilation unit.
*/
get-ast = instanceof-JavaCompilationUnit;
get-reference-ast
; CompilationUnit(id, id, map(get-ast <+ ?Semicolon()))