/** * Source Constructor * * @author Martin Bravenboer <martin@cs.uu.nl> */ module dryad/model/source-constructor strategies /** * Constructs a new source constructor. * * @type _ -> Source Constructor */ new-source-constructor(|ast) = <classes_get-class> JavaSourceConstructor() ; classes_new-instance ; classes_set-instance-field(|"reference-ast", ast) /** * AST representation */ strategies get-ast = instanceof-JavaSourceConstructor; get-reference-ast get-reference-ast = instanceof-JavaSourceConstructor; classes_get-instance-field(|"reference-ast") set-reference-ast(|refast) = instanceof-JavaSourceConstructor; classes_set-instance-field(|"reference-ast", refast) strategies /** * @type Constructor Object -> Access Modifier */ get-access = instanceof-JavaSourceConstructor; get-modifiers ; ( fetch-elem(?Public() + ?Private() + ?Protected()) <+ !DefaultAccess() ) /** * Returns the modifiers of a source constructor. * * @type Constructor Object -> List(Modifier) */ get-modifiers = instanceof-JavaSourceConstructor; get-reference-ast ; ?ConstrDec(ConstrDecHead(<id>, _, _, _, _), _) strategies /** * Returns a list of exceptions declared to be thrown by this * method. * * @type Constructor Object -> List(Source type) */ get-declared-exception-types = instanceof-JavaSourceConstructor; get-ast ; ( ?ConstrDec(ConstrDecHead(_, _, _, _, Some(ThrowsDec(<id>))), _) + ?ConstrDec(ConstrDecHead(_, _, _, _, None()), _) ; ![] ) /** * Returns the arity (number of arguments) of this constructor */ get-arity = instanceof-JavaSourceConstructor; get-ast ; ?ConstrDec(ConstrDecHead(_, _, _, <length>, _), _) /** * Succeeds if this constructor takes a variable number of arguments. */ is-variable-arity-constructor = instanceof-JavaSourceConstructor; where( get-ast ; ?ConstrDec(ConstrDecHead(_, _, _, <id>, _), _) ; fetch(is-variable-arity-param) ) /** * Returns the formal parameters types of a method as source types. * * @todo Handle VarArityParam. What is its type? * @type Constructor Object -> List(Source Type) */ get-formal-parameter-types = instanceof-JavaSourceConstructor; get-ast ; ?ConstrDec(ConstrDecHead(_, _, _, <id>, _), _) ; map(get-type-of-param) strategies /** * Returns the list of formal type parameters declared by this constructor. * * @type Constructor Object -> List(TypeParam) */ get-formal-type-parameters = instanceof-JavaSourceConstructor; get-reference-ast ; ( ?ConstrDec(ConstrDecHead(_, Some(TypeParams(<id>)), _, _, _), _) <+ ?ConstrDec(ConstrDecHead(_, None(), _, _, _), _) ; ![] ) /** * Stratego class support for source constructors */ signature constructors JavaSourceConstructor: ClassName strategies /** * Succeeds if the current term is an instance of Java source constructor */ instanceof-JavaSourceConstructor = classes_instanceof(|JavaSourceConstructor()) /** * Succeeds if the current term is an instance of a Java constructor. * * This alternative declares a JavaSourceConstructor to be a JavaConstructor. */ instanceof-JavaConstructor = classes_instanceof(|JavaSourceConstructor())