Index: core extension/org/eclipse/jdt/internal/corext/fix/AddUnimplementedMethodsOperation.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/fix/AddUnimplementedMethodsOperation.java,v
retrieving revision 1.6
diff -u -r1.6 AddUnimplementedMethodsOperation.java
--- core extension/org/eclipse/jdt/internal/corext/fix/AddUnimplementedMethodsOperation.java 31 Dec 2008 21:13:16 -0000 1.6
+++ core extension/org/eclipse/jdt/internal/corext/fix/AddUnimplementedMethodsOperation.java 30 Jun 2009 14:12:37 -0000
@@ -11,6 +11,8 @@
package org.eclipse.jdt.internal.corext.fix;
+import java.util.Arrays;
+
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
@@ -36,6 +38,7 @@
import org.eclipse.jdt.internal.corext.fix.CompilationUnitRewriteOperationsFix.CompilationUnitRewriteOperation;
import org.eclipse.jdt.internal.corext.refactoring.structure.CompilationUnitRewrite;
import org.eclipse.jdt.internal.corext.util.Messages;
+import org.eclipse.jdt.internal.corext.util.MethodsSourcePositionComparator;
import org.eclipse.jdt.ui.JavaElementLabels;
@@ -153,6 +156,8 @@
if (binding == null)
return new IMethodBinding[0];
- return StubUtility2.getUnimplementedMethods(binding, implementAbstractsOfInput);
+ IMethodBinding[] unimplementedMethods= StubUtility2.getUnimplementedMethods(binding, implementAbstractsOfInput);
+ Arrays.sort(unimplementedMethods, new MethodsSourcePositionComparator(binding));
+ return unimplementedMethods;
}
}
Index: core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java,v
retrieving revision 1.40
diff -u -r1.40 AddUnimplementedMethodsOperation.java
--- core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java 31 Dec 2008 21:13:24 -0000 1.40
+++ core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddUnimplementedMethodsOperation.java 30 Jun 2009 14:12:37 -0000
@@ -11,6 +11,7 @@
package org.eclipse.jdt.internal.corext.codemanipulation;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.eclipse.core.runtime.CoreException;
@@ -41,6 +42,7 @@
import org.eclipse.jdt.core.dom.rewrite.ImportRewrite.ImportRewriteContext;
import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
+import org.eclipse.jdt.internal.corext.util.MethodsSourcePositionComparator;
import org.eclipse.jdt.internal.ui.preferences.JavaPreferencesSettings;
@@ -193,6 +195,8 @@
methodsToImplement= StubUtility2.getUnimplementedMethods(currTypeBinding);
}
+ Arrays.sort(methodsToImplement, new MethodsSourcePositionComparator(fType));
+
ImportRewriteContext context= null;
int insertionPosition= fInsertPos;
if (insertionPosition == -1 && fASTRoot.types().size() > 0) {
Index: core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddDelegateMethodsOperation.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddDelegateMethodsOperation.java,v
retrieving revision 1.34
diff -u -r1.34 AddDelegateMethodsOperation.java
--- core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddDelegateMethodsOperation.java 11 Sep 2008 11:59:48 -0000 1.34
+++ core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddDelegateMethodsOperation.java 30 Jun 2009 14:12:36 -0000
@@ -11,6 +11,7 @@
package org.eclipse.jdt.internal.corext.codemanipulation;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.List;
import org.eclipse.core.runtime.Assert;
@@ -40,6 +41,7 @@
import org.eclipse.jdt.core.dom.rewrite.ImportRewrite;
import org.eclipse.jdt.core.dom.rewrite.ListRewrite;
+import org.eclipse.jdt.internal.corext.util.DelegateEntryComparator;
import org.eclipse.jdt.internal.corext.util.JavaModelUtil;
import org.eclipse.jdt.ui.CodeStyleConfiguration;
@@ -173,6 +175,8 @@
ContextSensitiveImportRewriteContext context= new ContextSensitiveImportRewriteContext(fASTRoot, typeDecl.getStartPosition(), importRewrite);
+ Arrays.sort(fDelegatesToCreate, new DelegateEntryComparator());
+
for (int i= 0; i < fDelegatesToCreate.length; i++) {
IMethodBinding delegateMethod= fDelegatesToCreate[i].delegateMethod;
IVariableBinding field= fDelegatesToCreate[i].field;
Index: core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java,v
retrieving revision 1.48
diff -u -r1.48 AddGetterSetterOperation.java
--- core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java 11 Sep 2008 11:59:47 -0000 1.48
+++ core extension/org/eclipse/jdt/internal/corext/codemanipulation/AddGetterSetterOperation.java 30 Jun 2009 14:12:37 -0000
@@ -10,6 +10,10 @@
*******************************************************************************/
package org.eclipse.jdt.internal.corext.codemanipulation;
+import java.util.Arrays;
+import java.util.HashSet;
+import java.util.Set;
+
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
@@ -308,28 +312,31 @@
}
fSkipAllExisting= (fSkipExistingQuery == null);
- if (!fSort) {
- for (int index= 0; index < fAccessorFields.length; index++) {
- generateGetterMethod(fAccessorFields[index], listRewriter);
- generateSetterMethod(fAccessorFields[index], astRewrite, listRewriter);
+
+ Set accessors = new HashSet(Arrays.asList(fAccessorFields));
+ Set getters = new HashSet(Arrays.asList(fGetterFields));
+ Set setters= new HashSet(Arrays.asList(fSetterFields));
+ IField[] fields= fType.getFields();
+ for (int i= 0; i < fields.length; i++) {
+ if (accessors.contains(fields[i])) {
+ generateGetterMethod(fields[i], listRewriter);
+ generateSetterMethod(fields[i], astRewrite, listRewriter);
+ monitor.worked(1);
+ if (monitor.isCanceled()) {
+ throw new OperationCanceledException();
+ }
+ } else if (getters.contains(fields[i])) {
+ generateGetterMethod(fields[i], listRewriter);
+ monitor.worked(1);
+ if (monitor.isCanceled()) {
+ throw new OperationCanceledException();
+ }
+ } else if (setters.contains(fields[i])) {
+ generateSetterMethod(fields[i], astRewrite, listRewriter);
monitor.worked(1);
if (monitor.isCanceled()) {
throw new OperationCanceledException();
}
- }
- }
- for (int index= 0; index < fGetterFields.length; index++) {
- generateGetterMethod(fGetterFields[index], listRewriter);
- monitor.worked(1);
- if (monitor.isCanceled()) {
- throw new OperationCanceledException();
- }
- }
- for (int index= 0; index < fSetterFields.length; index++) {
- generateSetterMethod(fSetterFields[index], astRewrite, listRewriter);
- monitor.worked(1);
- if (monitor.isCanceled()) {
- throw new OperationCanceledException();
}
}
fEdit= astRewrite.rewriteAST();
Index: core extension/org/eclipse/jdt/internal/corext/util/DelegateEntryComparator.java
===================================================================
RCS file: core extension/org/eclipse/jdt/internal/corext/util/DelegateEntryComparator.java
diff -N core extension/org/eclipse/jdt/internal/corext/util/DelegateEntryComparator.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ core extension/org/eclipse/jdt/internal/corext/util/DelegateEntryComparator.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,72 @@
+package org.eclipse.jdt.internal.corext.util;
+
+import java.util.Comparator;
+
+import org.eclipse.jdt.core.IField;
+import org.eclipse.jdt.core.IMethod;
+import org.eclipse.jdt.core.ISourceRange;
+import org.eclipse.jdt.core.JavaModelException;
+import org.eclipse.jdt.core.dom.IVariableBinding;
+
+import org.eclipse.jdt.internal.corext.codemanipulation.AddDelegateMethodsOperation.DelegateEntry;
+
+/**
+ * A comparator which sorts instances of DelegateEntry according to order in which delegate methods
+ * should be generated in a type. More formally, if T
is a class and d1
+ * and d2
are two DelegateEntries representing delegate methods which are about to be
+ * added to T
then according to this comparator d1
is less than
+ * d2
iff one of following holds:
+ *
d1
and d2
represent methods delegated to the same field of
+ * T
, that field's type has a source attachment and method of d1
appears
+ * in that source before method of d2
d1
and d2
represent methods delegated to the same field of
+ * T
, that field's type doesn't have a source attachment and name of method of
+ * d1
alphabetically precedes name of method of d2
d1
and d2
represent methods delegated to different fields
+ * f1
and f2
; field f1
is declared before f2
in
+ * type T
m1
and m2
+ * are methods of type T
then according to this comparator m1
is less than
+ * m2
iff one of following holds:
+ * m1
and m2
are defined in the same type (T
or any
+ * supertype of T
), that type has a source attachment and m1
appears
+ * before m2
in source of that typem1
and m2
are defined in the same type (T
or any
+ * supertype of T
), that type doesn't have a source attachment and name of
+ * m1
alphabetically precedes name of m2
m1
is defined in T
and m2
is defined in any supertype
+ * of T
m1
is defined in a superclass of T
and m2
is defined
+ * in a superinterface of T
m1
and m2
are defined in different superclasses of T
+ * and a class which defines m2
extends class which defines m1
+ * m1
and m2
are defined in different superinterfaces of
+ * T
and an interface which defines m1
appears before an interface which
+ * defines m2
in implements
clause of declaration of type T