1 11 package org.eclipse.jdt.core.refactoring.descriptors; 12 13 import org.eclipse.core.runtime.Assert; 14 15 import org.eclipse.ltk.core.refactoring.RefactoringContribution; 16 import org.eclipse.ltk.core.refactoring.RefactoringCore; 17 import org.eclipse.ltk.core.refactoring.RefactoringStatus; 18 19 import org.eclipse.jdt.core.IField; 20 import org.eclipse.jdt.core.IJavaElement; 21 import org.eclipse.jdt.core.IMethod; 22 import org.eclipse.jdt.core.IPackageFragment; 23 import org.eclipse.jdt.core.IPackageFragmentRoot; 24 import org.eclipse.jdt.core.IType; 25 import org.eclipse.jdt.core.ITypeParameter; 26 import org.eclipse.jdt.core.refactoring.IJavaRefactorings; 27 28 import org.eclipse.jdt.internal.core.refactoring.descriptors.DescriptorMessages; 29 30 45 public final class RenameJavaElementDescriptor extends JavaRefactoringDescriptor { 46 47 48 private static final String ATTRIBUTE_DELEGATE= "delegate"; 50 51 private static final String ATTRIBUTE_DEPRECATE= "deprecate"; 53 54 private static final String ATTRIBUTE_HIERARCHICAL= "hierarchical"; 56 57 private static final String ATTRIBUTE_MATCH_STRATEGY= "matchStrategy"; 59 60 private static final String ATTRIBUTE_PARAMETER= "parameter"; 62 63 private static final String ATTRIBUTE_PATTERNS= "patterns"; 65 66 private static final String ATTRIBUTE_QUALIFIED= "qualified"; 68 69 private static final String ATTRIBUTE_RENAME_GETTER= "getter"; 71 72 private static final String ATTRIBUTE_RENAME_SETTER= "setter"; 74 75 private static final String ATTRIBUTE_SIMILAR_DECLARATIONS= "similarDeclarations"; 77 78 private static final String ATTRIBUTE_TEXTUAL_MATCHES= "textual"; 80 84 public static final int STRATEGY_EMBEDDED= 2; 85 86 90 public static final int STRATEGY_EXACT= 1; 91 92 96 public static final int STRATEGY_SUFFIX= 3; 97 98 99 private boolean fDelegate= false; 100 101 102 private boolean fDeprecate= false; 103 104 105 private boolean fHierarchical= false; 106 107 108 private IJavaElement fJavaElement= null; 109 110 111 private int fMatchStrategy= STRATEGY_EXACT; 112 113 114 private String fName= null; 115 116 117 private String fPatterns= null; 118 119 120 private boolean fQualified= false; 121 122 123 private boolean fReferences= false; 124 125 126 private boolean fRenameGetter= false; 127 128 129 private boolean fRenameSetter= false; 130 131 132 private boolean fSimilarDeclarations= false; 133 134 135 private boolean fTextual= false; 136 137 144 public RenameJavaElementDescriptor(final String id) { 145 super(id); 146 Assert.isLegal(checkId(id), "Refactoring id is not a rename refactoring id"); } 148 149 156 private boolean checkId(final String id) { 157 Assert.isNotNull(id); 158 if (id.equals(IJavaRefactorings.RENAME_COMPILATION_UNIT)) 159 return true; 160 else if (id.equals(IJavaRefactorings.RENAME_ENUM_CONSTANT)) 161 return true; 162 else if (id.equals(IJavaRefactorings.RENAME_FIELD)) 163 return true; 164 else if (id.equals(IJavaRefactorings.RENAME_JAVA_PROJECT)) 165 return true; 166 else if (id.equals(IJavaRefactorings.RENAME_LOCAL_VARIABLE)) 167 return true; 168 else if (id.equals(IJavaRefactorings.RENAME_METHOD)) 169 return true; 170 else if (id.equals(IJavaRefactorings.RENAME_PACKAGE)) 171 return true; 172 else if (id.equals(IJavaRefactorings.RENAME_RESOURCE)) 173 return true; 174 else if (id.equals(IJavaRefactorings.RENAME_SOURCE_FOLDER)) 175 return true; 176 else if (id.equals(IJavaRefactorings.RENAME_TYPE)) 177 return true; 178 else if (id.equals(IJavaRefactorings.RENAME_TYPE_PARAMETER)) 179 return true; 180 return false; 181 } 182 183 186 protected void populateArgumentMap() { 187 super.populateArgumentMap(); 188 fArguments.put(JavaRefactoringDescriptor.ATTRIBUTE_NAME, fName); 189 if (getID().equals(IJavaRefactorings.RENAME_TYPE_PARAMETER)) { 190 final ITypeParameter parameter= (ITypeParameter) fJavaElement; 191 fArguments.put(JavaRefactoringDescriptor.ATTRIBUTE_INPUT, elementToHandle(getProject(), parameter.getDeclaringMember())); 192 fArguments.put(ATTRIBUTE_PARAMETER, parameter.getElementName()); 193 } else 194 fArguments.put(JavaRefactoringDescriptor.ATTRIBUTE_INPUT, elementToHandle(getProject(), fJavaElement)); 195 final int type= fJavaElement.getElementType(); 196 if (type != IJavaElement.PACKAGE_FRAGMENT_ROOT) 197 fArguments.put(JavaRefactoringDescriptor.ATTRIBUTE_REFERENCES, Boolean.toString(fReferences)); 198 if (type == IJavaElement.FIELD) { 199 fArguments.put(ATTRIBUTE_RENAME_GETTER, Boolean.toString(fRenameGetter)); 200 fArguments.put(ATTRIBUTE_RENAME_SETTER, Boolean.toString(fRenameSetter)); 201 } 202 switch (type) { 203 case IJavaElement.PACKAGE_FRAGMENT: 204 case IJavaElement.TYPE: 205 case IJavaElement.FIELD: 206 fArguments.put(ATTRIBUTE_TEXTUAL_MATCHES, Boolean.toString(fTextual)); 207 default: 208 break; 209 } 210 switch (type) { 211 case IJavaElement.METHOD: 212 case IJavaElement.FIELD: 213 fArguments.put(ATTRIBUTE_DEPRECATE, Boolean.toString(fDeprecate)); 214 fArguments.put(ATTRIBUTE_DELEGATE, Boolean.toString(fDelegate)); 215 default: 216 break; 217 } 218 switch (type) { 219 case IJavaElement.PACKAGE_FRAGMENT: 220 case IJavaElement.TYPE: 221 fArguments.put(ATTRIBUTE_QUALIFIED, Boolean.toString(fQualified)); 222 if (fPatterns != null && !"".equals(fPatterns)) fArguments.put(ATTRIBUTE_PATTERNS, fPatterns); 224 default: 225 break; 226 } 227 switch (type) { 228 case IJavaElement.TYPE: 229 fArguments.put(ATTRIBUTE_SIMILAR_DECLARATIONS, Boolean.toString(fSimilarDeclarations)); 230 fArguments.put(ATTRIBUTE_MATCH_STRATEGY, Integer.toString(fMatchStrategy)); 231 default: 232 break; 233 } 234 switch (type) { 235 case IJavaElement.PACKAGE_FRAGMENT: 236 fArguments.put(ATTRIBUTE_HIERARCHICAL, Boolean.toString(fHierarchical)); 237 default: 238 break; 239 } 240 } 241 242 255 public void setDeprecateDelegate(final boolean deprecate) { 256 fDeprecate= deprecate; 257 } 258 259 279 public void setFileNamePatterns(final String patterns) { 280 Assert.isNotNull(patterns); 281 Assert.isLegal(!"".equals(patterns), "Pattern must not be empty"); fPatterns= patterns; 283 } 284 285 296 public void setJavaElement(final IJavaElement element) { 297 Assert.isNotNull(element); 298 fJavaElement= element; 299 } 300 301 314 public void setKeepOriginal(final boolean delegate) { 315 fDelegate= delegate; 316 } 317 318 334 public void setMatchStrategy(final int strategy) { 335 Assert.isLegal(strategy == STRATEGY_EXACT || strategy == STRATEGY_EMBEDDED || strategy == STRATEGY_SUFFIX, "Wrong match strategy argument"); fMatchStrategy= strategy; 337 } 338 339 345 public void setNewName(final String name) { 346 Assert.isNotNull(name); 347 Assert.isLegal(!"".equals(name), "Name must not be empty"); fName= name; 349 } 350 351 368 public void setProject(final String project) { 369 super.setProject(project); 370 } 371 372 384 public void setRenameGetters(final boolean rename) { 385 fRenameGetter= rename; 386 } 387 388 400 public void setRenameSetters(final boolean rename) { 401 fRenameSetter= rename; 402 } 403 404 417 public void setUpdateHierarchy(final boolean update) { 418 fHierarchical= update; 419 } 420 421 439 public void setUpdateQualifiedNames(final boolean update) { 440 fQualified= update; 441 } 442 443 454 public void setUpdateReferences(final boolean update) { 455 fReferences= update; 456 } 457 458 470 public void setUpdateSimilarDeclarations(final boolean update) { 471 fSimilarDeclarations= update; 472 } 473 474 491 public void setUpdateTextualOccurrences(final boolean update) { 492 fTextual= update; 493 } 494 495 498 public RefactoringStatus validateDescriptor() { 499 RefactoringStatus status= super.validateDescriptor(); 500 if (fName == null || "".equals(fName)) status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameResourceDescriptor_no_new_name)); 502 if (fJavaElement == null) 503 status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameJavaElementDescriptor_no_java_element)); 504 else { 505 final int type= fJavaElement.getElementType(); 506 if (type == IJavaElement.JAVA_PROJECT && getProject() != null) 507 status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameJavaElementDescriptor_project_constraint)); 508 if (type == IJavaElement.PACKAGE_FRAGMENT_ROOT && fReferences) 509 status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameJavaElementDescriptor_reference_constraint)); 510 if (fTextual) { 511 switch (type) { 512 case IJavaElement.PACKAGE_FRAGMENT: 513 case IJavaElement.TYPE: 514 case IJavaElement.FIELD: 515 break; 516 default: 517 status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameJavaElementDescriptor_textual_constraint)); 518 } 519 } 520 if (fDeprecate) { 521 switch (type) { 522 case IJavaElement.METHOD: 523 case IJavaElement.FIELD: 524 break; 525 default: 526 status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameJavaElementDescriptor_deprecation_constraint)); 527 } 528 } 529 if (fDelegate) { 530 switch (type) { 531 case IJavaElement.METHOD: 532 case IJavaElement.FIELD: 533 break; 534 default: 535 status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameJavaElementDescriptor_delegate_constraint)); 536 } 537 } 538 if (fRenameGetter || fRenameSetter) { 539 if (type != IJavaElement.FIELD) 540 status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameJavaElementDescriptor_accessor_constraint)); 541 } 542 if (fQualified) { 543 switch (type) { 544 case IJavaElement.PACKAGE_FRAGMENT: 545 case IJavaElement.TYPE: 546 break; 547 default: 548 status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameJavaElementDescriptor_qualified_constraint)); 549 } 550 } 551 if (fSimilarDeclarations) { 552 switch (type) { 553 case IJavaElement.TYPE: 554 break; 555 default: 556 status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameJavaElementDescriptor_similar_constraint)); 557 } 558 } 559 if (fHierarchical) { 560 switch (type) { 561 case IJavaElement.PACKAGE_FRAGMENT: 562 break; 563 default: 564 status.merge(RefactoringStatus.createFatalErrorStatus(DescriptorMessages.RenameJavaElementDescriptor_hierarchical_constraint)); 565 } 566 } 567 } 568 return status; 569 } 570 } 571 | Popular Tags |