1 11 package org.eclipse.jdt.internal.corext.refactoring; 12 13 import java.util.ArrayList ; 14 import java.util.Iterator ; 15 import java.util.List ; 16 17 import org.eclipse.core.runtime.Assert; 18 import org.eclipse.core.runtime.CoreException; 19 20 import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor; 21 22 import org.eclipse.jdt.internal.corext.refactoring.rename.RenamingNameSuggestor; 23 import org.eclipse.jdt.internal.corext.refactoring.tagging.IDelegateUpdating; 24 import org.eclipse.jdt.internal.corext.refactoring.tagging.INameUpdating; 25 import org.eclipse.jdt.internal.corext.refactoring.tagging.IQualifiedNameUpdating; 26 import org.eclipse.jdt.internal.corext.refactoring.tagging.IReferenceUpdating; 27 import org.eclipse.jdt.internal.corext.refactoring.tagging.ISimilarDeclarationUpdating; 28 import org.eclipse.jdt.internal.corext.refactoring.tagging.ITextUpdating; 29 import org.eclipse.jdt.internal.corext.util.Messages; 30 31 import org.eclipse.jdt.ui.JavaElementLabels; 32 33 import org.eclipse.jdt.internal.ui.JavaPlugin; 34 35 40 public final class JavaRefactoringDescriptorComment { 41 42 43 private static final String ELEMENT_DELIMITER= RefactoringCoreMessages.JavaRefactoringDescriptorComment_element_delimiter; 44 45 46 private static final String LINE_DELIMITER= System.getProperty("line.separator", "\n"); 48 57 public static String createCompositeSetting(final String caption, final String [] settings) { 58 Assert.isNotNull(caption); 59 Assert.isNotNull(settings); 60 final StringBuffer buffer= new StringBuffer (128); 61 buffer.append(caption); 62 for (int index= 0; index < settings.length; index++) { 63 if (settings[index] != null && !"".equals(settings[index])) { buffer.append(LINE_DELIMITER); 65 buffer.append(ELEMENT_DELIMITER); 66 buffer.append(settings[index]); 67 } else { 68 buffer.append(LINE_DELIMITER); 69 buffer.append(ELEMENT_DELIMITER); 70 buffer.append(RefactoringCoreMessages.JavaRefactoringDescriptor_not_available); 71 } 72 } 73 return buffer.toString(); 74 } 75 76 77 private final String fHeader; 78 79 80 private final List fSettings= new ArrayList (6); 81 82 91 public JavaRefactoringDescriptorComment(final Object object, final String header) { 92 Assert.isNotNull(object); 93 Assert.isNotNull(header); 94 fHeader= header; 95 initializeInferredSettings(object); 96 } 97 98 106 public void addSetting(final int index, final String setting) { 107 Assert.isTrue(index >= 0); 108 Assert.isNotNull(setting); 109 Assert.isTrue(!"".equals(setting)); fSettings.add(index, setting); 111 } 112 113 119 public void addSetting(final String setting) { 120 Assert.isNotNull(setting); 121 Assert.isTrue(!"".equals(setting)); fSettings.add(setting); 123 } 124 125 130 public String asString() { 131 final StringBuffer buffer= new StringBuffer (256); 132 buffer.append(fHeader); 133 for (final Iterator iterator= fSettings.iterator(); iterator.hasNext();) { 134 final String setting= (String ) iterator.next(); 135 buffer.append(LINE_DELIMITER); 136 buffer.append(Messages.format(RefactoringCoreMessages.JavaRefactoringDescriptor_inferred_setting_pattern, setting)); 137 } 138 return buffer.toString(); 139 } 140 141 146 public int getCount() { 147 return fSettings.size(); 148 } 149 150 156 private void initializeInferredSettings(final Object object) { 157 if (object instanceof INameUpdating) { 158 final INameUpdating updating= (INameUpdating) object; 159 fSettings.add(Messages.format(RefactoringCoreMessages.JavaRefactoringDescriptor_original_element_pattern, JavaElementLabels.getTextLabel(updating.getElements()[0], JavaElementLabels.ALL_FULLY_QUALIFIED))); 160 try { 161 final Object element= updating.getNewElement(); 162 if (element != null) 163 fSettings.add(Messages.format(RefactoringCoreMessages.JavaRefactoringDescriptor_renamed_element_pattern, JavaElementLabels.getTextLabel(element, JavaElementLabels.ALL_FULLY_QUALIFIED))); 164 else { 165 final String oldLabel= JavaElementLabels.getTextLabel(updating.getElements()[0], JavaElementLabels.ALL_FULLY_QUALIFIED); 166 final String newName= updating.getCurrentElementName(); 167 if (newName.length() < oldLabel.length()) { 168 final String newLabel= oldLabel.substring(0, oldLabel.length() - newName.length()); 169 fSettings.add(Messages.format(RefactoringCoreMessages.JavaRefactoringDescriptor_renamed_element_pattern, newLabel + updating.getNewElementName())); 170 } 171 } 172 } catch (CoreException exception) { 173 JavaPlugin.log(exception); 174 } 175 } else if (object instanceof RefactoringProcessor) { 176 final RefactoringProcessor processor= (RefactoringProcessor) object; 177 final Object [] elements= processor.getElements(); 178 if (elements != null) { 179 if (elements.length == 1 && elements[0] != null) 180 fSettings.add(Messages.format(RefactoringCoreMessages.JavaRefactoringDescriptor_original_element_pattern, JavaElementLabels.getTextLabel(elements[0], JavaElementLabels.ALL_FULLY_QUALIFIED))); 181 else if (elements.length > 1) { 182 final StringBuffer buffer= new StringBuffer (128); 183 buffer.append(RefactoringCoreMessages.JavaRefactoringDescriptor_original_elements); 184 for (int index= 0; index < elements.length; index++) { 185 if (elements[index] != null) { 186 buffer.append(LINE_DELIMITER); 187 buffer.append(ELEMENT_DELIMITER); 188 buffer.append(JavaElementLabels.getTextLabel(elements[index], JavaElementLabels.ALL_FULLY_QUALIFIED)); 189 } else { 190 buffer.append(LINE_DELIMITER); 191 buffer.append(ELEMENT_DELIMITER); 192 buffer.append(RefactoringCoreMessages.JavaRefactoringDescriptor_not_available); 193 } 194 } 195 fSettings.add(buffer.toString()); 196 } 197 } 198 } 199 if (object instanceof IReferenceUpdating) { 200 final IReferenceUpdating updating= (IReferenceUpdating) object; 201 if (updating.canEnableUpdateReferences() && updating.getUpdateReferences()) 202 fSettings.add(RefactoringCoreMessages.JavaRefactoringDescriptor_update_references); 203 } 204 if (object instanceof ISimilarDeclarationUpdating) { 205 final ISimilarDeclarationUpdating updating= (ISimilarDeclarationUpdating) object; 206 if (updating.canEnableSimilarDeclarationUpdating() && updating.getUpdateSimilarDeclarations()) { 207 final int strategy= updating.getMatchStrategy(); 208 if (strategy == RenamingNameSuggestor.STRATEGY_EXACT) 209 fSettings.add(RefactoringCoreMessages.JavaRefactoringDescriptor_rename_similar); 210 else if (strategy == RenamingNameSuggestor.STRATEGY_EMBEDDED) 211 fSettings.add(RefactoringCoreMessages.JavaRefactoringDescriptor_rename_similar_embedded); 212 else if (strategy == RenamingNameSuggestor.STRATEGY_SUFFIX) 213 fSettings.add(RefactoringCoreMessages.JavaRefactoringDescriptor_rename_similar_suffix); 214 } 215 } 216 if (object instanceof IQualifiedNameUpdating) { 217 final IQualifiedNameUpdating updating= (IQualifiedNameUpdating) object; 218 if (updating.canEnableQualifiedNameUpdating() && updating.getUpdateQualifiedNames()) { 219 final String patterns= updating.getFilePatterns(); 220 if (patterns != null && !"".equals(patterns)) fSettings.add(Messages.format(RefactoringCoreMessages.JavaRefactoringDescriptor_qualified_names_pattern, patterns.trim())); 222 else 223 fSettings.add(RefactoringCoreMessages.JavaRefactoringDescriptor_qualified_names); 224 } 225 } 226 if (object instanceof ITextUpdating) { 227 final ITextUpdating updating= (ITextUpdating) object; 228 if (updating.canEnableTextUpdating()) 229 fSettings.add(RefactoringCoreMessages.JavaRefactoringDescriptor_textual_occurrences); 230 } 231 if (object instanceof IDelegateUpdating) { 232 final IDelegateUpdating updating= (IDelegateUpdating) object; 233 if (updating.canEnableDelegateUpdating() && updating.getDelegateUpdating()) { 234 if (updating.getDeprecateDelegates()) 235 fSettings.add(RefactoringCoreMessages.JavaRefactoringDescriptor_keep_original_deprecated); 236 else 237 fSettings.add(RefactoringCoreMessages.JavaRefactoringDescriptor_keep_original); 238 } 239 } 240 } 241 242 248 public void removeSetting(final int index) { 249 Assert.isTrue(index >= 0); 250 fSettings.remove(index); 251 } 252 } 253 | Popular Tags |