KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > corext > refactoring > rename > RenameEnumConstProcessor


1 /*******************************************************************************
2  * Copyright (c) 2000, 2006 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

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 JavaDoc IDENTIFIER= "org.eclipse.jdt.ui.renameEnumConstProcessor"; //$NON-NLS-1$
48

49     /**
50      * Creates a new rename enum const processor.
51      *
52      * @param field
53      * the enum constant, or <code>null</code> if invoked by
54      * scripting
55      */

56     public RenameEnumConstProcessor(IField field) {
57         super(field);
58     }
59
60     /*
61      * @see org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldProcessor#canEnableGetterRenaming()
62      */

63     public String JavaDoc canEnableGetterRenaming() throws CoreException {
64         return ""; //$NON-NLS-1$
65
}
66
67     /*
68      * @see org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldProcessor#canEnableSetterRenaming()
69      */

70     public String JavaDoc canEnableSetterRenaming() throws CoreException {
71         return ""; //$NON-NLS-1$
72
}
73
74     /*
75      * @see org.eclipse.jdt.internal.corext.refactoring.tagging.INameUpdating#checkNewElementName(java.lang.String)
76      */

77     public RefactoringStatus checkNewElementName(String JavaDoc 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     /*
87      * @see org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldProcessor#createChange(org.eclipse.core.runtime.IProgressMonitor)
88      */

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 JavaDoc 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 JavaDoc description= Messages.format(RefactoringCoreMessages.RenameEnumConstProcessor_descriptor_description_short, fField.getElementName());
108             final String JavaDoc header= Messages.format(RefactoringCoreMessages.RenameEnumConstProcessor_descriptor_description, new String JavaDoc[] { field.getElementName(), JavaElementLabels.getElementLabel(field.getParent(), JavaElementLabels.ALL_FULLY_QUALIFIED), getNewElementName()});
109             final String JavaDoc 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     /*
127      * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getIdentifier()
128      */

129     public String JavaDoc getIdentifier() {
130         return IDENTIFIER;
131     }
132
133     /*
134      * @see org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor#getProcessorName()
135      */

136     public String JavaDoc getProcessorName() {
137         return RefactoringCoreMessages.RenameEnumConstRefactoring_name;
138     }
139
140     /*
141      * @see org.eclipse.jdt.internal.corext.refactoring.rename.RenameFieldProcessor#initialize(org.eclipse.ltk.core.refactoring.participants.RefactoringArguments)
142      */

143     public RefactoringStatus initialize(RefactoringArguments arguments) {
144         if (arguments instanceof JavaRefactoringArguments) {
145             final JavaRefactoringArguments extended= (JavaRefactoringArguments) arguments;
146             final String JavaDoc 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 JavaDoc name= extended.getAttribute(JDTRefactoringDescriptor.ATTRIBUTE_NAME);
156             if (name != null && !"".equals(name)) //$NON-NLS-1$
157
setNewElementName(name);
158             else
159                 return RefactoringStatus.createFatalErrorStatus(Messages.format(RefactoringCoreMessages.InitializableRefactoring_argument_not_exist, JDTRefactoringDescriptor.ATTRIBUTE_NAME));
160             final String JavaDoc 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 JavaDoc 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