### 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;
}
/**