1 19 20 package org.netbeans.modules.refactoring.java.plugins; 21 22 import com.sun.source.tree.*; 23 import com.sun.source.util.TreePath; 24 import javax.lang.model.element.*; 25 import org.netbeans.api.java.source.WorkingCopy; 26 27 31 public class RenameTransformer extends SearchVisitor { 32 33 private String newName; 34 35 public RenameTransformer(String newName, WorkingCopy workingCopy) { 36 super(workingCopy); 37 this.newName = newName; 38 } 39 40 @Override 41 public Tree visitIdentifier(IdentifierTree node, Element p) { 42 renameUsageIfMatch(getCurrentPath(), node,p); 43 return super.visitIdentifier(node, p); 44 } 45 46 @Override 47 public Tree visitMemberSelect(MemberSelectTree node, Element p) { 48 renameUsageIfMatch(getCurrentPath(), node,p); 49 return super.visitMemberSelect(node, p); 50 } 51 52 private void renameUsageIfMatch(TreePath path, Tree tree, Element elementToFind) { 53 if (workingCopy.getTreeUtilities().isSynthetic(path)) 54 return; 55 Element el = workingCopy.getTrees().getElement(path); 56 if (el==null) 57 return; 58 59 if (el != null && elementToFind!=null && elementToFind.getKind() == ElementKind.METHOD && el.getKind() == ElementKind.METHOD) { 60 if (el.equals(elementToFind) || workingCopy.getElements().overrides(((ExecutableElement) el), (ExecutableElement) elementToFind, (TypeElement) elementToFind.getEnclosingElement())) { 61 Tree nju = make.setLabel(tree, newName); 62 workingCopy.rewrite(tree, nju); 63 } 64 } else if (el.equals(elementToFind)) { 65 Tree nju = make.setLabel(tree, newName); 66 workingCopy.rewrite(tree, nju); 67 } 68 } 69 70 @Override 71 public Tree visitMethod(MethodTree tree, Element p) { 72 renameDeclIfMatch(getCurrentPath(), tree, p); 73 return super.visitMethod(tree, p); 74 } 75 76 @Override 77 public Tree visitClass(ClassTree tree, Element p) { 78 renameDeclIfMatch(getCurrentPath(), tree, p); 79 return super.visitClass(tree, p); 80 } 81 82 @Override 83 public Tree visitVariable(VariableTree tree, Element p) { 84 renameDeclIfMatch(getCurrentPath(), tree, p); 85 return super.visitVariable(tree, p); 86 } 87 88 private void renameDeclIfMatch(TreePath path, Tree tree, Element elementToFind) { 89 if (workingCopy.getTreeUtilities().isSynthetic(path)) 90 return; 91 Element el = workingCopy.getTrees().getElement(path); 92 if (elementToFind.equals(el)) { 93 Tree nju = make.setLabel(tree, newName); 94 workingCopy.rewrite(tree, nju); 95 } 96 } 97 98 } 99 | Popular Tags |