aspect Rename { public static LanguageExtension ASTNode.LOCKED_NAMES = new LanguageExtension("locked names") { public void eliminateOn(ASTNode n) { n.eliminateLockedNamesInSubtree(); } }; public void ASTNode.eliminateLockedNamesInSubtree() { Program root = programRoot(); eliminateLockedNames(); while(root != null && !root.affectedByUnlock.isEmpty()) { if(root != null) root.affectedByUnlock.clear(); flushCaches(); eliminateLockedNames(); } flushCaches(); } public void ASTNode.eliminateLockedNames() { for(int i=0;i Program.affectedByUnlock = new LinkedList(); public void Program.flushCaches() { affectedByUnlock.clear(); super.flushCaches(); } protected void ASTNode.affectedByUnlock(Access... accs) { Program root = programRoot(); if(root != null) { for(Access acc : accs) root.affectedByUnlock.add(acc); } } }