1 11 package org.eclipse.jdt.internal.corext.refactoring.rename; 12 13 import org.eclipse.core.runtime.CoreException; 14 import org.eclipse.core.runtime.IProgressMonitor; 15 16 import org.eclipse.ltk.core.refactoring.Change; 17 import org.eclipse.ltk.core.refactoring.RefactoringDescriptor; 18 import org.eclipse.ltk.core.refactoring.RefactoringStatus; 19 import org.eclipse.ltk.core.refactoring.participants.RefactoringArguments; 20 21 import org.eclipse.jdt.core.Flags; 22 import org.eclipse.jdt.core.IField; 23 import org.eclipse.jdt.core.IJavaElement; 24 import org.eclipse.jdt.core.IJavaProject; 25 import org.eclipse.jdt.core.IType; 26 import org.eclipse.jdt.core.JavaModelException; 27 import org.eclipse.jdt.core.refactoring.IJavaRefactorings; 28 import org.eclipse.jdt.core.refactoring.descriptors.JavaRefactoringDescriptor; 29 import org.eclipse.jdt.core.refactoring.descriptors.RenameJavaElementDescriptor; 30 31 import org.eclipse.jdt.internal.corext.refactoring.Checks; 32 import org.eclipse.jdt.internal.corext.refactoring.JDTRefactoringDescriptor; 33 import org.eclipse.jdt.internal.corext.refactoring.JDTRefactoringDescriptorComment; 34 import org.eclipse.jdt.internal.corext.refactoring.JavaRefactoringArguments; 35 import org.eclipse.jdt.internal.corext.refactoring.RefactoringAvailabilityTester; 36 import org.eclipse.jdt.internal.corext.refactoring.RefactoringCoreMessages; 37 import org.eclipse.jdt.internal.corext.refactoring.changes.RefactoringDescriptorChange; 38 import org.eclipse.jdt.internal.corext.refactoring.code.ScriptableRefactoring; 39 import org.eclipse.jdt.internal.corext.util.Messages; 40 41 import org.eclipse.jdt.ui.JavaElementLabels; 42 43 import org.eclipse.jdt.internal.ui.JavaPlugin; 44 45 public final class RenameEnumConstProcessor extends RenameFieldProcessor { 46 47 public static final String IDENTIFIER= "org.eclipse.jdt.ui.renameEnumConstProcessor"; 49 56 public RenameEnumConstProcessor(IField field) { 57 super(field); 58 } 59 60 63 public String canEnableGetterRenaming() throws CoreException { 64 return ""; } 66 67 70 public String canEnableSetterRenaming() throws CoreException { 71 return ""; } 73 74 77 public RefactoringStatus checkNewElementName(String newName) throws CoreException { 78 RefactoringStatus result= Checks.checkEnumConstantName(newName); 79 if (Checks.isAlreadyNamed(getField(), newName)) 80 result.addFatalError(RefactoringCoreMessages.RenameEnumConstRefactoring_another_name); 81 if (getField().getDeclaringType().getField(newName).exists()) 82 result.addFatalError(RefactoringCoreMessages.RenameEnumConstRefactoring_const_already_defined); 83 return result; 84 } 85 86 89 public Change createChange(final IProgressMonitor monitor) throws CoreException { 90 Change change= super.createChange(monitor); 91 if (change != null) { 92 final IField field= getField(); 93 String project= null; 94 IJavaProject javaProject= field.getJavaProject(); 95 if (javaProject != null) 96 project= javaProject.getElementName(); 97 int flags= JavaRefactoringDescriptor.JAR_MIGRATION | JavaRefactoringDescriptor.JAR_REFACTORING | RefactoringDescriptor.STRUCTURAL_CHANGE; 98 final IType declaring= field.getDeclaringType(); 99 try { 100 if (!Flags.isPrivate(declaring.getFlags())) 101 flags|= RefactoringDescriptor.MULTI_CHANGE; 102 if (declaring.isAnonymous() || declaring.isLocal()) 103 flags|= JavaRefactoringDescriptor.JAR_SOURCE_ATTACHMENT; 104 } catch (JavaModelException exception) { 105 JavaPlugin.log(exception); 106 } 107 final String description= Messages.format(RefactoringCoreMessages.RenameEnumConstProcessor_descriptor_description_short, fField.getElementName()); 108 final String header= Messages.format(RefactoringCoreMessages.RenameEnumConstProcessor_descriptor_description, new String [] { field.getElementName(), JavaElementLabels.getElementLabel(field.getParent(), JavaElementLabels.ALL_FULLY_QUALIFIED), getNewElementName()}); 109 final String comment= new JDTRefactoringDescriptorComment(project, this, header).asString(); 110 final RenameJavaElementDescriptor descriptor= new RenameJavaElementDescriptor(IJavaRefactorings.RENAME_ENUM_CONSTANT); 111 descriptor.setProject(project); 112 descriptor.setDescription(description); 113 descriptor.setComment(comment); 114 descriptor.setFlags(flags); 115 descriptor.setJavaElement(field); 116 descriptor.setNewName(getNewElementName()); 117 descriptor.setUpdateReferences(fUpdateReferences); 118 descriptor.setUpdateTextualOccurrences(fUpdateTextualMatches); 119 final RefactoringDescriptorChange extended= new RefactoringDescriptorChange(descriptor, RefactoringCoreMessages.RenameEnumConstProcessor_change_name, new Change[] { change}); 120 extended.markAsSynthetic(); 121 return extended; 122 } 123 return change; 124 } 125 126 129 public String getIdentifier() { 130 return IDENTIFIER; 131 } 132 133 136 public String getProcessorName() { 137 return RefactoringCoreMessages.RenameEnumConstRefactoring_name; 138 } 139 140 143 public RefactoringStatus initialize(RefactoringArguments arguments) { 144 if (arguments instanceof JavaRefactoringArguments) { 145 final JavaRefactoringArguments extended= (JavaRefactoringArguments) arguments; 146 final String handle= extended.getAttribute(JDTRefactoringDescriptor.ATTRIBUTE_INPUT); 147 if (handle != null) { 148 final IJavaElement element= JDTRefactoringDescriptor.handleToElement(extended.getProject(), handle, false); 149 if (element == null || !element.exists() || element.getElementType() != IJavaElement.FIELD) 150 return ScriptableRefactoring.createInputFatalStatus(element, getRefactoring().getName(), IJavaRefactorings.RENAME_ENUM_CONSTANT); 151 else 152 fField= (IField) element; 153 } else 154 return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, JDTRefactoringDescriptor.ATTRIBUTE_INPUT)); 155 final String name= extended.getAttribute(JDTRefactoringDescriptor.ATTRIBUTE_NAME); 156 if (name != null && !"".equals(name)) setNewElementName(name); 158 else 159 return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, JDTRefactoringDescriptor.ATTRIBUTE_NAME)); 160 final String references= extended.getAttribute(JDTRefactoringDescriptor.ATTRIBUTE_REFERENCES); 161 if (references != null) { 162 setUpdateReferences(Boolean.valueOf(references).booleanValue()); 163 } else 164 return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, JDTRefactoringDescriptor.ATTRIBUTE_REFERENCES)); 165 final String matches= extended.getAttribute(ATTRIBUTE_TEXTUAL_MATCHES); 166 if (matches != null) { 167 setUpdateTextualMatches(Boolean.valueOf(matches).booleanValue()); 168 } else 169 return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, ATTRIBUTE_TEXTUAL_MATCHES)); 170 } else 171 return RefactoringStatus.createFatalErrorStatus(RefactoringCoreMessages.InitializableRefactoring_inacceptable_arguments); 172 return new RefactoringStatus(); 173 } 174 175 public boolean isApplicable() throws CoreException { 176 return RefactoringAvailabilityTester.isRenameEnumConstAvailable(getField()); 177 } 178 } 179 | Popular Tags |