### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.ui Index: ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java,v retrieving revision 1.39 diff -u -r1.39 MultiFixMessages.java --- ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java 3 Nov 2006 15:22:02 -0000 1.39 +++ ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.java 3 Jan 2007 00:37:14 -0000 @@ -89,6 +89,9 @@ public static String CommentFormatCleanUp_singleLineComments; public static String CommentFormatFix_description; + public static String SortMembersCleanUp_description; + public static String SortMembersFix_description; + static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, MultiFixMessages.class); Index: ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties,v retrieving revision 1.58 diff -u -r1.58 MultiFixMessages.properties --- ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties 8 Nov 2006 17:14:46 -0000 1.58 +++ ui/org/eclipse/jdt/internal/ui/fix/MultiFixMessages.properties 3 Jan 2007 00:37:14 -0000 @@ -71,6 +71,11 @@ CodeFormatFix_description=Format code CodeFormatCleanUp_description=Format source code + +SortMembersFix_description=Sort members +SortMembersCleanUp_description=Sort members +SortMembersCleanUp_fields=Sort fields as well + ImportsCleanUp_OrganizeImports_Description=Organize imports CleanUpSaveParticipantPreferenceConfiguration_clean_up_preference_link=The Clean Up profiles can be managed on the Clean Up preference page. CleanUpSaveParticipantPreferenceConfiguration_use_clean_up_profile_label=Use Clean &Up profile: Index: ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java,v retrieving revision 1.5 diff -u -r1.5 CleanUpMessages.java --- ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java 26 Oct 2006 16:07:44 -0000 1.5 +++ ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.java 3 Jan 2007 00:37:15 -0000 @@ -39,6 +39,10 @@ public static String CodeFormatingTabPage_Imports_GroupName; public static String CodeFormatingTabPage_OrganizeImports_CheckBoxLable; public static String CodeFormatingTabPage_OrganizeImportsSettings_Description; + public static String CodeFormatingTabPage_SortMembers_GroupName; + public static String CodeFormatingTabPage_SortMembers_CheckBoxLabel; + public static String CodeFormatingTabPage_SortMembers_Description; + public static String CodeFormatingTabPage_SortMembersFields_CheckBoxLabel; public static String CodeStyleTabPage_CheckboxName_ConvertForLoopToEnhanced; public static String CodeStyleTabPage_CheckboxName_UseBlocks; Index: ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java,v retrieving revision 1.9 diff -u -r1.9 CleanUpConfigurationBlock.java --- ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java 2 Nov 2006 10:48:31 -0000 1.9 +++ ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpConfigurationBlock.java 3 Jan 2007 00:37:14 -0000 @@ -18,25 +18,14 @@ import java.util.Observable; import java.util.Observer; +import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.core.runtime.preferences.IScopeContext; import org.eclipse.core.runtime.preferences.IEclipsePreferences.PreferenceChangeEvent; - -import org.eclipse.core.resources.IProject; - -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Shell; -import org.eclipse.swt.widgets.Text; - import org.eclipse.jdt.internal.corext.fix.CleanUpConstants; import org.eclipse.jdt.internal.corext.fix.CleanUpPreferenceUtil; - -import org.eclipse.jdt.ui.JavaUI; - import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jdt.internal.ui.fix.CodeFormatCleanUp; import org.eclipse.jdt.internal.ui.fix.CodeStyleCleanUp; @@ -47,6 +36,7 @@ import org.eclipse.jdt.internal.ui.fix.ImportsCleanUp; import org.eclipse.jdt.internal.ui.fix.Java50CleanUp; import org.eclipse.jdt.internal.ui.fix.PotentialProgrammingProblemsCleanUp; +import org.eclipse.jdt.internal.ui.fix.SortMembersCleanUp; import org.eclipse.jdt.internal.ui.fix.StringCleanUp; import org.eclipse.jdt.internal.ui.fix.UnnecessaryCodeCleanUp; import org.eclipse.jdt.internal.ui.fix.UnusedCodeCleanUp; @@ -62,6 +52,12 @@ import org.eclipse.jdt.internal.ui.wizards.dialogfields.DialogField; import org.eclipse.jdt.internal.ui.wizards.dialogfields.IDialogFieldListener; import org.eclipse.jdt.internal.ui.wizards.dialogfields.SelectionButtonDialogField; +import org.eclipse.jdt.ui.JavaUI; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.swt.widgets.Text; /** @@ -122,7 +118,8 @@ new PotentialProgrammingProblemsCleanUp(sharedSettings), new ImportsCleanUp(sharedSettings), new CodeFormatCleanUp(sharedSettings), - new CommentFormatCleanUp(sharedSettings) + new CommentFormatCleanUp(sharedSettings), + new SortMembersCleanUp(sharedSettings), }; createLabel(composite, CleanUpMessages.CleanUpConfigurationBlock_SelectedCleanUps_label, numColumns); Index: ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties,v retrieving revision 1.7 diff -u -r1.7 CleanUpMessages.properties --- ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties 26 Oct 2006 16:07:44 -0000 1.7 +++ ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CleanUpMessages.properties 3 Jan 2007 00:37:15 -0000 @@ -19,6 +19,10 @@ CodeFormatingTabPage_CheckboxName_FormatMultiLineComments=Mul&ti line comments CodeFormatingTabPage_OrganizeImportsSettings_Description=The settings for organizing imports can be changed on the Organize Imports preference page. CodeFormatingTabPage_CheckboxName_FormatSingleLineComments=&Single line comments +CodeFormatingTabPage_SortMembers_GroupName=Members +CodeFormatingTabPage_SortMembers_CheckBoxLabel=Sort members +CodeFormatingTabPage_SortMembers_Description=The settings for sorting members can be changed on the Members Sort Order preference page. +CodeFormatingTabPage_SortMembersFields_CheckBoxLabel=Also sort fields, enums and initializers CodeStyleTabPage_CheckboxName_UseBlocks=Use bloc&ks in if/while/for/do statements CodeStyleTabPage_RadioName_AlwaysUseBlocks=Al&ways Index: ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeFormatingTabPage.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeFormatingTabPage.java,v retrieving revision 1.2 diff -u -r1.2 CodeFormatingTabPage.java --- ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeFormatingTabPage.java 17 Oct 2006 16:41:36 -0000 1.2 +++ ui/org/eclipse/jdt/internal/ui/preferences/cleanup/CodeFormatingTabPage.java 3 Jan 2007 00:37:15 -0000 @@ -14,22 +14,21 @@ import java.util.Observable; import java.util.Observer; -import org.eclipse.swt.SWT; -import org.eclipse.swt.layout.GridData; -import org.eclipse.swt.widgets.Composite; -import org.eclipse.swt.widgets.Group; -import org.eclipse.swt.widgets.Label; - import org.eclipse.jdt.internal.corext.fix.CleanUpConstants; - import org.eclipse.jdt.internal.ui.fix.CodeFormatCleanUp; import org.eclipse.jdt.internal.ui.fix.CommentFormatCleanUp; import org.eclipse.jdt.internal.ui.fix.ICleanUp; import org.eclipse.jdt.internal.ui.fix.ImportsCleanUp; +import org.eclipse.jdt.internal.ui.fix.SortMembersCleanUp; import org.eclipse.jdt.internal.ui.preferences.formatter.JavaPreview; import org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialog; import org.eclipse.jdt.internal.ui.preferences.formatter.ModifyDialogTabPage; import org.eclipse.jdt.internal.ui.util.PixelConverter; +import org.eclipse.swt.SWT; +import org.eclipse.swt.layout.GridData; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Group; +import org.eclipse.swt.widgets.Label; public final class CodeFormatingTabPage extends ModifyDialogTabPage { @@ -46,7 +45,8 @@ fCleanUpPreview= new CleanUpPreview(parent, new ICleanUp[] { new ImportsCleanUp(fValues), new CodeFormatCleanUp(fValues), - new CommentFormatCleanUp(fValues) + new CommentFormatCleanUp(fValues), + new SortMembersCleanUp(fValues), }, false); return fCleanUpPreview; } @@ -88,6 +88,21 @@ createCheckboxPref(importsGroup, numColumns, CleanUpMessages.CodeFormatingTabPage_OrganizeImports_CheckBoxLable, CleanUpConstants.ORGANIZE_IMPORTS, CleanUpModifyDialog.FALSE_TRUE); createLabel(CleanUpMessages.CodeFormatingTabPage_OrganizeImportsSettings_Description, importsGroup, numColumns, pixelConverter).setFont(composite.getFont()); + + Group sortMembersGroup = createGroup(numColumns, composite, CleanUpMessages.CodeFormatingTabPage_SortMembers_GroupName); + final CheckboxPreference sortMembersPref = createCheckboxPref(sortMembersGroup, numColumns, CleanUpMessages.CodeFormatingTabPage_SortMembers_CheckBoxLabel, CleanUpConstants.SORT_MEMBERS, CleanUpModifyDialog.FALSE_TRUE); + + intent(sortMembersGroup); + final CheckboxPreference sortMembersFieldsPref = createCheckboxPref(sortMembersGroup, numColumns - 1, CleanUpMessages.CodeFormatingTabPage_SortMembersFields_CheckBoxLabel, CleanUpConstants.SORT_MEMBERS_FIELDS, CleanUpModifyDialog.FALSE_TRUE); + + sortMembersPref.addObserver( new Observer() { + public void update(Observable o, Object arg) { + sortMembersFieldsPref.setEnabled(sortMembersPref.getChecked()); + } + }); + sortMembersFieldsPref.setEnabled(sortMembersPref.getChecked()); + + createLabel(CleanUpMessages.CodeFormatingTabPage_SortMembers_Description, sortMembersGroup, numColumns, pixelConverter).setFont(composite.getFont()); } private Label createLabel(String text, Group group, int numColumns, PixelConverter pixelConverter) { @@ -98,7 +113,7 @@ label.setLayoutData(gridData); return label; } - + // NOTE: I think this is supposed to be 'indent' ... private void intent(Group group) { Label l= new Label(group, SWT.NONE); GridData gd= new GridData(); Index: core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java,v retrieving revision 1.10 diff -u -r1.10 CleanUpConstants.java --- core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java 3 Nov 2006 15:22:03 -0000 1.10 +++ core extension/org/eclipse/jdt/internal/corext/fix/CleanUpConstants.java 3 Jan 2007 00:37:13 -0000 @@ -750,6 +750,32 @@ public static final String ORGANIZE_IMPORTS= "cleanup.organize_imports"; //$NON-NLS-1$ /** + * Should members be sorted? + *

+ * Possible values: {TRUE, FALSE}
+ * Default value: Value returned by {@link #getEclipseDefaultSettings()}
+ *
+ * @see #SORT_MEMBERS_FIELDS + * @see #TRUE + * @see #FALSE + * @since 3.3 + */ + public static final String SORT_MEMBERS = "cleanup.sort_members"; //$NON-NLS-1$ + + /** + * If sorting members, should fields also be sorted? + *

+ * Possible values: {TRUE, FALSE}
+ * Default value: Value returned by {@link #getEclipseDefaultSettings()}
+ *
+ * @see #SORT_MEMBERS + * @see #TRUE + * @see #FALSE + * @since 3.3 + */ + public static final String SORT_MEMBERS_FIELDS = "cleanup.sort_members_fields"; //$NON-NLS-1$ + + /** * Should the Clean Up Wizard be shown when executing the Clean Up Action? *

* Possible values: {true, false}
@@ -900,6 +926,9 @@ result.put(ORGANIZE_IMPORTS, FALSE); + result.put(SORT_MEMBERS, FALSE); + result.put(SORT_MEMBERS_FIELDS, FALSE); + return result; } @@ -973,7 +1002,10 @@ result.put(FORMAT_JAVADOC, TRUE); result.put(ORGANIZE_IMPORTS, TRUE); - + + result.put(SORT_MEMBERS, FALSE); + result.put(SORT_MEMBERS_FIELDS, FALSE); + return result; } Index: core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java,v retrieving revision 1.38 diff -u -r1.38 CleanUpRefactoring.java --- core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java 3 Nov 2006 15:22:02 -0000 1.38 +++ core extension/org/eclipse/jdt/internal/corext/fix/CleanUpRefactoring.java 3 Jan 2007 00:37:14 -0000 @@ -18,11 +18,9 @@ import java.util.List; import java.util.Map; -import org.eclipse.text.edits.MultiTextEdit; -import org.eclipse.text.edits.TextEdit; -import org.eclipse.text.edits.TextEditGroup; -import org.eclipse.text.edits.TextEditVisitor; - +import org.eclipse.core.resources.IFile; +import org.eclipse.core.resources.ProjectScope; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; @@ -30,25 +28,6 @@ import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; - -import org.eclipse.core.resources.IFile; -import org.eclipse.core.resources.ProjectScope; -import org.eclipse.core.resources.ResourcesPlugin; - -import org.eclipse.ltk.core.refactoring.CategorizedTextEditGroup; -import org.eclipse.ltk.core.refactoring.Change; -import org.eclipse.ltk.core.refactoring.CompositeChange; -import org.eclipse.ltk.core.refactoring.GroupCategory; -import org.eclipse.ltk.core.refactoring.GroupCategorySet; -import org.eclipse.ltk.core.refactoring.MultiStateTextFileChange; -import org.eclipse.ltk.core.refactoring.NullChange; -import org.eclipse.ltk.core.refactoring.Refactoring; -import org.eclipse.ltk.core.refactoring.RefactoringStatus; -import org.eclipse.ltk.core.refactoring.RefactoringTickProvider; -import org.eclipse.ltk.core.refactoring.TextChange; -import org.eclipse.ltk.core.refactoring.TextEditBasedChangeGroup; -import org.eclipse.ltk.core.refactoring.TextFileChange; - import org.eclipse.jdt.core.IBuffer; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaProject; @@ -57,7 +36,6 @@ import org.eclipse.jdt.core.dom.ASTParser; import org.eclipse.jdt.core.dom.ASTRequestor; import org.eclipse.jdt.core.dom.CompilationUnit; - import org.eclipse.jdt.internal.corext.refactoring.Checks; import org.eclipse.jdt.internal.corext.refactoring.changes.CompilationUnitChange; import org.eclipse.jdt.internal.corext.refactoring.changes.DynamicValidationStateChange; @@ -65,9 +43,6 @@ import org.eclipse.jdt.internal.corext.refactoring.changes.TextChangeCompatibility; import org.eclipse.jdt.internal.corext.refactoring.util.RefactoringASTParser; import org.eclipse.jdt.internal.corext.util.Messages; - -import org.eclipse.jdt.ui.JavaElementLabels; - import org.eclipse.jdt.internal.ui.fix.CodeFormatCleanUp; import org.eclipse.jdt.internal.ui.fix.CodeStyleCleanUp; import org.eclipse.jdt.internal.ui.fix.CommentFormatCleanUp; @@ -77,12 +52,31 @@ import org.eclipse.jdt.internal.ui.fix.ImportsCleanUp; import org.eclipse.jdt.internal.ui.fix.Java50CleanUp; import org.eclipse.jdt.internal.ui.fix.PotentialProgrammingProblemsCleanUp; +import org.eclipse.jdt.internal.ui.fix.SortMembersCleanUp; import org.eclipse.jdt.internal.ui.fix.StringCleanUp; import org.eclipse.jdt.internal.ui.fix.UnnecessaryCodeCleanUp; import org.eclipse.jdt.internal.ui.fix.UnusedCodeCleanUp; import org.eclipse.jdt.internal.ui.fix.VariableDeclarationCleanUp; import org.eclipse.jdt.internal.ui.javaeditor.ASTProvider; import org.eclipse.jdt.internal.ui.refactoring.IScheduledRefactoring; +import org.eclipse.jdt.ui.JavaElementLabels; +import org.eclipse.ltk.core.refactoring.CategorizedTextEditGroup; +import org.eclipse.ltk.core.refactoring.Change; +import org.eclipse.ltk.core.refactoring.CompositeChange; +import org.eclipse.ltk.core.refactoring.GroupCategory; +import org.eclipse.ltk.core.refactoring.GroupCategorySet; +import org.eclipse.ltk.core.refactoring.MultiStateTextFileChange; +import org.eclipse.ltk.core.refactoring.NullChange; +import org.eclipse.ltk.core.refactoring.Refactoring; +import org.eclipse.ltk.core.refactoring.RefactoringStatus; +import org.eclipse.ltk.core.refactoring.RefactoringTickProvider; +import org.eclipse.ltk.core.refactoring.TextChange; +import org.eclipse.ltk.core.refactoring.TextEditBasedChangeGroup; +import org.eclipse.ltk.core.refactoring.TextFileChange; +import org.eclipse.text.edits.MultiTextEdit; +import org.eclipse.text.edits.TextEdit; +import org.eclipse.text.edits.TextEditGroup; +import org.eclipse.text.edits.TextEditVisitor; public class CleanUpRefactoring extends Refactoring implements IScheduledRefactoring { @@ -967,7 +961,8 @@ new StringCleanUp(), new ImportsCleanUp(), new CodeFormatCleanUp(), - new CommentFormatCleanUp() + new CommentFormatCleanUp(), + new SortMembersCleanUp(), }; } @@ -984,7 +979,8 @@ new StringCleanUp(settings), new ImportsCleanUp(settings), new CodeFormatCleanUp(settings), - new CommentFormatCleanUp(settings) + new CommentFormatCleanUp(settings), + new SortMembersCleanUp(settings) }; } } Index: core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java,v retrieving revision 1.16 diff -u -r1.16 SortMembersOperation.java --- core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java 12 May 2006 13:37:05 -0000 1.16 +++ core extension/org/eclipse/jdt/internal/corext/codemanipulation/SortMembersOperation.java 3 Jan 2007 00:37:12 -0000 @@ -10,18 +10,14 @@ *******************************************************************************/ package org.eclipse.jdt.internal.corext.codemanipulation; -import com.ibm.icu.text.Collator; - import java.util.Comparator; import java.util.List; +import org.eclipse.core.resources.IWorkspaceRunnable; +import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; - -import org.eclipse.core.resources.IWorkspaceRunnable; -import org.eclipse.core.resources.ResourcesPlugin; - import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.dom.AST; import org.eclipse.jdt.core.dom.ASTNode; @@ -37,13 +33,13 @@ import org.eclipse.jdt.core.dom.Type; import org.eclipse.jdt.core.dom.VariableDeclarationFragment; import org.eclipse.jdt.core.util.CompilationUnitSorter; - import org.eclipse.jdt.internal.corext.dom.ASTNodes; import org.eclipse.jdt.internal.corext.util.JdtFlags; - import org.eclipse.jdt.internal.ui.JavaPlugin; import org.eclipse.jdt.internal.ui.preferences.MembersOrderPreferenceCache; +import com.ibm.icu.text.Collator; + /** * Orders members is a compilation unit. A working copy must be passed. */ @@ -285,6 +281,14 @@ CompilationUnitSorter.sort(AST.JLS3, fCompilationUnit, fPositions, new DefaultJavaElementComparator(fDoNotSortFields), 0, monitor); } + // TODO See comment at CompilationUnitSorter.getChange + // /** + // * Gets the change without applying it. + // */ + // public TextChange getChange(IProgressMonitor monitor) throws CoreException { + // return CompilationUnitSorter.getChange(AST.JLS3, fCompilationUnit, fPositions, new DefaultJavaElementComparator(fDoNotSortFields), 0, monitor); + // } + /** * @return Returns the scheduling rule for this operation */ Index: ui/org/eclipse/jdt/internal/ui/fix/SortMembersFix.java =================================================================== RCS file: ui/org/eclipse/jdt/internal/ui/fix/SortMembersFix.java diff -N ui/org/eclipse/jdt/internal/ui/fix/SortMembersFix.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ ui/org/eclipse/jdt/internal/ui/fix/SortMembersFix.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,98 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.jdt.internal.ui.fix; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.jdt.core.ICompilationUnit; +import org.eclipse.jdt.core.dom.AST; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jdt.internal.core.SortElementsOperation; +import org.eclipse.jdt.internal.corext.codemanipulation.SortMembersOperation.DefaultJavaElementComparator; +import org.eclipse.jdt.internal.corext.fix.IFix; +import org.eclipse.jdt.internal.corext.refactoring.changes.CompilationUnitChange; +import org.eclipse.jdt.internal.ui.dialogs.StatusInfo; +import org.eclipse.jface.text.Document; +import org.eclipse.jface.text.IDocument; +import org.eclipse.ltk.core.refactoring.CategorizedTextEditGroup; +import org.eclipse.ltk.core.refactoring.GroupCategory; +import org.eclipse.ltk.core.refactoring.GroupCategorySet; +import org.eclipse.ltk.core.refactoring.TextChange; +import org.eclipse.text.edits.TextEdit; + +public class SortMembersFix implements IFix { + + public static IFix createCleanUp(CompilationUnit compilationUnit, boolean sortFields) throws CoreException { + + ICompilationUnit cu= (ICompilationUnit)compilationUnit.getJavaElement(); + String content= cu.getBuffer().getContents(); + Document document= new Document(content); + cu.becomeWorkingCopy(null, null); + + ICompilationUnit[] compilationUnits = new ICompilationUnit[] { cu }; + + // TODO Push this down into SortMembersOperation? + // new SortMembersOperation(...).getChange() + SortElementsOperation operation = new SortElementsOperation(AST.JLS3, compilationUnits, null, new DefaultJavaElementComparator(!sortFields)); + + TextEdit edit = operation.calculateEdits(cu, content.toCharArray() , false, document); + + TextChange change= new CompilationUnitChange(MultiFixMessages.SortMembersFix_description, cu); + change.setEdit(edit); + + // If we've not changed anything, then don't return a change + IDocument newDoc = change.getPreviewDocument(null); + if (content.equals(newDoc.get())) + return null; + + String label= MultiFixMessages.SortMembersFix_description; + change.addTextEditGroup(new CategorizedTextEditGroup(label, new GroupCategorySet(new GroupCategory(label, label, label)))); + + return new SortMembersFix(change, cu); + } + + + private final ICompilationUnit fCompilationUnit; + private final TextChange fChange; + + public SortMembersFix(TextChange change, ICompilationUnit compilationUnit) { + fChange= change; + fCompilationUnit= compilationUnit; + } + + /** + * {@inheritDoc} + */ + public TextChange createChange() throws CoreException { + return fChange; + } + + /** + * {@inheritDoc} + */ + public ICompilationUnit getCompilationUnit() { + return fCompilationUnit; + } + + /** + * {@inheritDoc} + */ + public String getDescription() { + return MultiFixMessages.CommentFormatFix_description; + } + + /** + * {@inheritDoc} + */ + public IStatus getStatus() { + return StatusInfo.OK_STATUS; + } +} Index: ui/org/eclipse/jdt/internal/ui/fix/SortMembersCleanUp.java =================================================================== RCS file: ui/org/eclipse/jdt/internal/ui/fix/SortMembersCleanUp.java diff -N ui/org/eclipse/jdt/internal/ui/fix/SortMembersCleanUp.java --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ ui/org/eclipse/jdt/internal/ui/fix/SortMembersCleanUp.java 1 Jan 1970 00:00:00 -0000 @@ -0,0 +1,96 @@ +/******************************************************************************* + * Copyright (c) 2000, 2006 IBM Corporation and others. + * All rights reserved. This program and the accompanying materials + * are made available under the terms of the Eclipse Public License v1.0 + * which accompanies this distribution, and is available at + * http://www.eclipse.org/legal/epl-v10.html + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ +package org.eclipse.jdt.internal.ui.fix; + +import java.util.Map; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.jdt.core.dom.CompilationUnit; +import org.eclipse.jdt.internal.corext.fix.CleanUpConstants; +import org.eclipse.jdt.internal.corext.fix.IFix; +import org.eclipse.jdt.ui.text.java.IProblemLocation; + +public class SortMembersCleanUp extends AbstractCleanUp { + + public SortMembersCleanUp() { + super(); + } + + public SortMembersCleanUp(Map options) { + super(options); + } + + public IFix createFix(CompilationUnit compilationUnit) throws CoreException { + if (compilationUnit == null || !isEnabled(CleanUpConstants.SORT_MEMBERS)) + return null; + + return SortMembersFix.createCleanUp(compilationUnit, isEnabled(CleanUpConstants.SORT_MEMBERS_FIELDS)); + } + + /** + * {@inheritDoc} + */ + public IFix createFix(CompilationUnit compilationUnit, IProblemLocation[] problems) throws CoreException { + if (compilationUnit == null) + return null; + + return null; + } + + public Map getRequiredOptions() { + return null; + } + + /** + * {@inheritDoc} + */ + public String[] getDescriptions() { + if (isEnabled(CleanUpConstants.SORT_MEMBERS)) + return new String[] {MultiFixMessages.SortMembersCleanUp_description}; + + return null; + } + + public String getPreview() { + boolean sortMembers = isEnabled(CleanUpConstants.SORT_MEMBERS); + boolean sortFields = sortMembers && isEnabled(CleanUpConstants.SORT_MEMBERS_FIELDS); + StringBuffer buf= new StringBuffer(); + buf.append("public class Engine {\n"); //$NON-NLS-1$ + if (sortFields) { + buf.append(" private String bar;\n"); //$NON-NLS-1$ + buf.append(" private String foo;\n"); //$NON-NLS-1$ + } else { + buf.append(" private String foo;\n"); //$NON-NLS-1$ + buf.append(" private String bar;\n"); //$NON-NLS-1$ + } + if (sortMembers) { + buf.append(" private void bar();\n"); //$NON-NLS-1$ + buf.append(" private void foo();\n"); //$NON-NLS-1$ + } else { + buf.append(" private void foo();\n"); //$NON-NLS-1$ + buf.append(" private void bar();\n"); //$NON-NLS-1$ + } + buf.append("}\n"); //$NON-NLS-1$ + + return buf.toString(); + } + + /** + * {@inheritDoc} + */ + public int maximalNumberOfFixes(CompilationUnit compilationUnit) { + return -1; + } + + public boolean canFix(CompilationUnit compilationUnit, IProblemLocation problem) throws CoreException { + return false; + } +} #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/core/util/CompilationUnitSorter.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/util/CompilationUnitSorter.java,v retrieving revision 1.35 diff -u -r1.35 CompilationUnitSorter.java --- model/org/eclipse/jdt/core/util/CompilationUnitSorter.java 10 May 2006 18:03:49 -0000 1.35 +++ model/org/eclipse/jdt/core/util/CompilationUnitSorter.java 3 Jan 2007 00:37:17 -0000 @@ -328,5 +328,24 @@ SortElementsOperation operation = new SortElementsOperation(level, compilationUnits, positions, comparator); operation.runOperation(monitor); } + + // TODO Comment + // NB This would work, but jdt.core.util doesn't import the refactoring.TextChange :-/ + // public static TextChange getChange(int level, ICompilationUnit compilationUnit, + // int[] positions, + // Comparator comparator, + // int options, + // IProgressMonitor monitor) throws JavaModelException { + // if (compilationUnit == null || comparator == null) { + // throw new IllegalArgumentException(); + // } + // checkASTLevel(level); + // ICompilationUnit[] compilationUnits = new ICompilationUnit[] { compilationUnit }; + // SortElementsOperation operation = new SortElementsOperation(level, compilationUnits, positions, comparator); + // + // String source = compilationUnit.getBuffer().getContents(); + // Document document= new Document(source); + // return operation.calculateEdits(compilationUnit, source, false, document); + // } } Index: model/org/eclipse/jdt/internal/core/SortElementsOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SortElementsOperation.java,v retrieving revision 1.36 diff -u -r1.36 SortElementsOperation.java --- model/org/eclipse/jdt/internal/core/SortElementsOperation.java 10 May 2006 18:03:47 -0000 1.36 +++ model/org/eclipse/jdt/internal/core/SortElementsOperation.java 3 Jan 2007 00:37:18 -0000 @@ -119,6 +119,13 @@ * @param source */ private String processElement(ICompilationUnit unit, char[] source) { + Document document = new Document(new String(source)); + calculateEdits(unit, source, true, document); + return document.get(); + } + + public TextEdit calculateEdits(ICompilationUnit unit, char[] source, + boolean applyEdits,Document document) { CompilerOptions options = new CompilerOptions(unit.getJavaProject().getOptions(true)); ASTParser parser = ASTParser.newParser(this.apiLevel); parser.setCompilerOptions(options.getMap()); @@ -193,8 +200,6 @@ markers[i]= new RangeMarker(this.positions[i], 0); } } - String generatedSource = new String(source); - Document document = new Document(generatedSource); domUnit.accept(new ASTVisitor() { public boolean visit(org.eclipse.jdt.core.dom.CompilationUnit compilationUnit) { if (checkMalformedNodes(compilationUnit)) { @@ -302,18 +307,19 @@ insert(edits, markers[i]); } } - try { - edits.apply(document, TextEdit.UPDATE_REGIONS); - generatedSource = document.get(); - if (needPositionsMapping) { - for (int i= 0, max = markers.length; i < max; i++) { - this.positions[i]= markers[i].getOffset(); + if (applyEdits) { + try { + edits.apply(document, TextEdit.UPDATE_REGIONS); + if (needPositionsMapping) { + for (int i= 0, max = markers.length; i < max; i++) { + this.positions[i]= markers[i].getOffset(); + } } + } catch (BadLocationException e) { + // ignore } - } catch (BadLocationException e) { - // ignore } - return generatedSource; + return edits; } /**