aspect Call { interface Call { public int getNumArg(); public Expr getArg(int i); public List getArgList(); public void setArg(Expr e, int i); public void setArgList(List list); public void addArg(Expr e); public Callable decl(); sons Arg:Expr*; } MethodAccess implements Call; ConstructorAccess implements Call; ClassInstanceExpr implements Call; interface Callable { public void setParameter(ParameterDeclaration pd, int i); public List getParameterList(); public List getExceptionList(); public boolean isStatic(); public boolean isNative(); public boolean hasBlock(); public Block getBlock(); public void setBlock(Block b); sons Parameter:ParameterDeclaration* Exception:Access* [Block:Block]; public String signature(); public boolean fromSource(); } ConstructorDecl implements Callable; MethodDecl implements Callable; public String Callable.fullName() { return hostType().fullName() + "." + signature(); } public void Callable.setParameter(String name, ParameterDeclaration pd) { setParameter(pd, getIndexOfParameter(name)); } public void Callable.insertParameter(ParameterDeclaration pd, int i) { getParameterList().insertChild(pd, i); } public void Callable.removeParameter(int i) { getParameterList().removeChild(i); } public int Callable.getIndexOfParameter(ParameterDeclaration pd) { for(int i=0;i