aspect IntroduceOutParameter { public AnonymousMethod AnonymousMethod.introduceOutParameter() { eliminateVarargs(); programRoot().flushCaches(); if(!(getParent() instanceof AssignSimpleExpr)) return this; AssignSimpleExpr parent = (AssignSimpleExpr)getParent(); if(!(parent.getDest() instanceof VarAccess)) throw new RefactoringException("cannot introduce non-variable out parameter"); VarAccess v = (VarAccess)parent.getDest(); setReturnType(new PrimitiveTypeAccess("void")); ParameterDeclaration pd = new FreshParameter(new Modifiers("out"), v.type().createLockedAccess(), "res"); addParameter(pd); addArg(v.decl().createLockedAccess()); getBlock().addAssignToReturns(pd); parent.replaceWith(this); hostType().flushCaches(); return this; } public void ASTNode.addAssignToReturns(Variable v) { for(int i=0;i