aspect SelfEncapsulateField { public void FieldDeclaration.selfEncapsulate() { MethodDecl getter = createGetter(); MethodDecl setter = null; if(!isFinal()) setter = createSetter(); programRoot().lockNames(name()); ArrayList uses = usesOfAllCopies(); for(int i=0;i().add(assgn.getSource())); if(va.isQualified()) setter_invocation = va.qualifier().qualifiesAccess(setter_invocation); assgn.replaceWith(setter_invocation); } else { throw new RefactoringException("cannot encapsulate this access"); } } else { va.replaceWith(getter.copyIn(receiver_type).createLockedAccess(new List())); } } getModifiers().setVisibility(VIS_PRIVATE); programRoot().flushCaches(); } public void FieldDeclaration.doSelfEncapsulate() { selfEncapsulate(); programRoot().eliminate(LOCKED_NAMES); } }