/** * 4.5: Parameterized Types * * @author Martin Bravenboer <martin@cs.uu.nl> */ module dryad/jls/types/Parameterized imports dryad/model/class dryad/model/method strategies /** * @param List(ActualTypeArgument) * @type (Class Object -> Class Object) or (Method Object -> Method Object) */ define-type-substitution(|t*) = where( where(get-name => name) ; get-formal-type-parameters => a* ; <zip> (t*, a*) ; map({t, a: ?(t, TypeParam(Id(a), _)) ; rules(LookupTypeVar : TypeVar(name, Id(a)) -> t) }) ) /** * Performs the substition of the formal type parameters in dec with * the actual type parameters t* * * @param Method Object or Class Object * @param List(ActualTypeArgument) * @type a -> a */ apply-type-substitution(| dec, t*) = {| LookupTypeVar : where(<define-type-substitution(|t*)> dec) ; topdown(try(LookupTypeVar)) |} strategies is-parameterized-type = ?ClassType(_, Some(_)) is-parameterized-type = ?InterfaceType(tn, Some(_))