/** * Declare formal type parameters. * * @author Martin Bravenboer <martin@cs.uu.nl> */ module dryad/reclassify/declare/FormalTypeParameters strategies /** * @todo The declaration needs to be reclassified first. * @type SourceClass Object, SourceMethod Object, SourceConstructor Object */ declare-formal-type-parameters(cont) = where(get-formal-type-parameters => params) ; if not(?[]) then where(get-name => qualifier) ; {| ReclassifySimpleInScopeTypeName, QualifySimpleInScopeTypeName: where(<map(declare-type-param-helper(|qualifier))> params) ; cont |} else cont end /** * @todo Can PackageOrTypeName occur as a type variable? */ declare-type-param-helper(|qualifier) = ?TypeParam(Id(x), _); rules( ReclassifySimpleInScopeTypeName : AmbName(Id(x)) -> TypeVar(qualifier, Id(x)) ReclassifySimpleInScopeTypeName : PackageOrTypeName(Id(x)) -> TypeVar(qualifier, Id(x)) QualifySimpleInScopeTypeName : TypeName(Id(x)) -> TypeVar(qualifier, Id(x)) )