1 11 package org.eclipse.jdt.internal.ui.text.correction; 12 13 import java.util.Iterator ; 14 import java.util.List ; 15 16 import org.eclipse.core.runtime.CoreException; 17 18 import org.eclipse.jdt.core.ICompilationUnit; 19 import org.eclipse.jdt.core.dom.AST; 20 import org.eclipse.jdt.core.dom.ASTNode; 21 import org.eclipse.jdt.core.dom.AbstractTypeDeclaration; 22 import org.eclipse.jdt.core.dom.CompilationUnit; 23 import org.eclipse.jdt.core.dom.rewrite.ASTRewrite; 24 25 import org.eclipse.jdt.internal.corext.dom.LinkedNodeFinder; 26 import org.eclipse.jdt.internal.corext.util.Messages; 27 28 import org.eclipse.jdt.ui.text.java.IInvocationContext; 29 30 import org.eclipse.jdt.internal.ui.JavaPluginImages; 31 32 36 public class CorrectMainTypeNameProposal extends ASTRewriteCorrectionProposal { 37 38 private final String fOldName; 39 private final String fNewName; 40 private final IInvocationContext fContext; 41 42 45 public CorrectMainTypeNameProposal(ICompilationUnit cu, IInvocationContext context, String oldTypeName, String newTypeName, int relevance) { 46 super("", cu, null, relevance, null); fContext= context; 48 49 setDisplayName(Messages.format(CorrectionMessages.ReorgCorrectionsSubProcessor_renametype_description, newTypeName)); 50 setImage(JavaPluginImages.get(JavaPluginImages.IMG_CORRECTION_CHANGE)); 51 52 fOldName= oldTypeName; 53 fNewName= newTypeName; 54 } 55 56 59 protected ASTRewrite getRewrite() throws CoreException { 60 CompilationUnit astRoot= fContext.getASTRoot(); 61 62 AST ast= astRoot.getAST(); 63 ASTRewrite rewrite= ASTRewrite.create(ast); 64 65 AbstractTypeDeclaration decl= findTypeDeclaration(astRoot.types(), fOldName); 66 if (decl != null) { 67 ASTNode[] sameNodes= LinkedNodeFinder.findByNode(astRoot, decl.getName()); 68 for (int i= 0; i < sameNodes.length; i++) { 69 rewrite.replace(sameNodes[i], ast.newSimpleName(fNewName), null); 70 } 71 } 72 return rewrite; 73 } 74 75 private AbstractTypeDeclaration findTypeDeclaration(List types, String name) { 76 for (Iterator iter= types.iterator(); iter.hasNext();) { 77 AbstractTypeDeclaration decl= (AbstractTypeDeclaration) iter.next(); 78 if (name.equals(decl.getName().getIdentifier())) { 79 return decl; 80 } 81 } 82 return null; 83 } 84 85 } 86 | Popular Tags |