aspect LocalVariable { // for the purposes of refactoring, local variables include parameters interface LocalDeclaration extends Variable { public BodyDecl enclosingBodyDecl(); } VariableDeclaration implements LocalDeclaration; ParameterDeclaration implements LocalDeclaration; // find all variable accesses in a subtree public java.util.Set ASTNode.varAccesses() { java.util.Set res = new LinkedHashSet(); varAccesses(res); return res; } public void ASTNode.varAccesses(java.util.Set res) { for(int i=0;i res) { res.add(this); super.varAccesses(res); } // find only the local ones public java.util.Set ASTNode.localVarAccesses() { java.util.Set res = new LinkedHashSet(); for(VarAccess va : varAccesses()) { if(va.decl() instanceof LocalDeclaration) res.add(va); } return res; } }