### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core.tests.model Index: src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java,v retrieving revision 1.165.2.2 diff -u -r1.165.2.2 AbstractJavaModelTests.java --- src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java 2 Jun 2006 14:06:51 -0000 1.165.2.2 +++ src/org/eclipse/jdt/core/tests/model/AbstractJavaModelTests.java 9 Jun 2006 10:57:27 -0000 @@ -568,6 +568,10 @@ } assertEquals("Unepexeted type parameters", expected, actual); } + protected void assertSortedStringsEqual(String message, String expected, String[] strings) { + Util.sort(strings); + assertStringsEqual(message, expected, strings); + } protected void assertStringsEqual(String message, String expected, String[] strings) { String actual = toString(strings, true/*add extra new lines*/); if (!expected.equals(actual)) { Index: src/org/eclipse/jdt/core/tests/model/ClasspathTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/ClasspathTests.java,v retrieving revision 1.151 diff -u -r1.151 ClasspathTests.java --- src/org/eclipse/jdt/core/tests/model/ClasspathTests.java 6 Apr 2006 15:25:04 -0000 1.151 +++ src/org/eclipse/jdt/core/tests/model/ClasspathTests.java 9 Jun 2006 10:57:30 -0000 @@ -1976,11 +1976,11 @@ public void testEncodeDecodeEntry02() { assertEncodeDecodeEntry( "P", - "\n" + + "\n" + " \n" + - " \n" + + " \n" + " \n" + - "\n", + "\n", JavaCore.newSourceEntry( new Path("/P/src"), new IPath[] {new Path("**/Y.java")}, @@ -2005,14 +2005,14 @@ public void testEncodeDecodeEntry04() { assertEncodeDecodeEntry( "P", - "\n" + + "\n" + " \n" + - " \n" + + " \n" + " \n" + " \n" + " \n" + " \n" + - "\n", + "\n", JavaCore.newLibraryEntry( new Path("/P/lib.jar"), new Path("/P/src.zip"), @@ -2028,12 +2028,12 @@ public void testEncodeDecodeEntry05() { assertEncodeDecodeEntry( "P", - "\n" + + "\n" + " \n" + - " \n" + + " \n" + " \n" + " \n" + - " \n" + + " \n" + " \n" + "\n", JavaCore.newLibraryEntry( @@ -2182,7 +2182,7 @@ "\n" + " \n" + " \n" + - " \n" + + " \n" + " \n" + " \n" + " \n" + @@ -2209,8 +2209,8 @@ "\n" + " \n" + " \n" + - " \n" + - " \n" + + " \n" + + " \n" + " \n" + " \n" + " \n" + @@ -3653,9 +3653,9 @@ "\n" + "\n" + " \n" + - " \n" + + " \n" + " \n" + - "\n", + "\n", contents); } finally { deleteProject("P"); @@ -3751,17 +3751,17 @@ "\n" + "\n" + " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + - " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + " \n" + "\n", contents); Index: src/org/eclipse/jdt/core/tests/model/WorkingCopyOwnerTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/WorkingCopyOwnerTests.java,v retrieving revision 1.56 diff -u -r1.56 WorkingCopyOwnerTests.java --- src/org/eclipse/jdt/core/tests/model/WorkingCopyOwnerTests.java 2 May 2006 15:01:45 -0000 1.56 +++ src/org/eclipse/jdt/core/tests/model/WorkingCopyOwnerTests.java 9 Jun 2006 10:57:33 -0000 @@ -133,7 +133,7 @@ this.workingCopy = getCompilationUnit("P/Y.java"); this.workingCopy.becomeWorkingCopy(null, null); - assertElementsEqual( + assertSortedElementsEqual( "Unexpected children of default package", "X.java [in [in [in P]]]\n" + "[Working copy] Y.java [in [in [in P]]]", Index: src/org/eclipse/jdt/core/tests/model/JavaLikeExtensionsTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaLikeExtensionsTests.java,v retrieving revision 1.5 diff -u -r1.5 JavaLikeExtensionsTests.java --- src/org/eclipse/jdt/core/tests/model/JavaLikeExtensionsTests.java 29 Mar 2006 04:03:07 -0000 1.5 +++ src/org/eclipse/jdt/core/tests/model/JavaLikeExtensionsTests.java 9 Jun 2006 10:57:31 -0000 @@ -47,11 +47,11 @@ * Ensures that the known Java-like extensions are correct. */ public void testGetJavaLikeExtensions01() { - assertStringsEqual( + assertSortedStringsEqual( "Unexpected file extensions", - "java\n" + + "bar\n" + "foo\n" + - "bar\n", + "java\n", JavaCore.getJavaLikeExtensions() ); } @@ -64,12 +64,12 @@ try { if (javaContentType != null) javaContentType.addFileSpec("abc", IContentType.FILE_EXTENSION_SPEC); - assertStringsEqual( + assertSortedStringsEqual( "Unexpected file extensions", - "java\n" + - "foo\n" + + "abc\n" + "bar\n" + - "abc\n", + "foo\n" + + "java\n", JavaCore.getJavaLikeExtensions() ); } finally { Index: src/org/eclipse/jdt/core/tests/model/TypeHierarchyTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/TypeHierarchyTests.java,v retrieving revision 1.55.2.1 diff -u -r1.55.2.1 TypeHierarchyTests.java --- src/org/eclipse/jdt/core/tests/model/TypeHierarchyTests.java 6 Jun 2006 14:41:15 -0000 1.55.2.1 +++ src/org/eclipse/jdt/core/tests/model/TypeHierarchyTests.java 9 Jun 2006 10:57:33 -0000 @@ -540,16 +540,16 @@ "Super types:\n" + " Object [in Object.class [in java.lang [in "+ getExternalJCLPathString() + " [in TypeHierarchy]]]]\n" + "Sub types:\n" + - " Y1 [in foo() [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + + " [in [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + " Y2 [in foo() [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + + " [in field1 [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + + " [in field2 [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + " [in foo() [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + + " [in [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + " [in field2 [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + - " [in field2 [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + - " [in field1 [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + - " [in [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + - " Y1 [in [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + + " Y1 [in foo() [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + " Y2 [in [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n" + - " [in [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n", + " Y1 [in [in A [in A.java [in p7 [in src [in TypeHierarchy]]]]]]\n", hierarchy); } /* @@ -561,10 +561,10 @@ assertHierarchyEquals( "Focus: X [in X.java [in [in src [in TypeHierarchy15]]]]\n" + "Super types:\n" + - " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " ArrayList [in ArrayList.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + - " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + + " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " AbstractList [in AbstractList.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + + " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " Object [in Object.class [in java.lang [in "+ getExternalJCLPathString("1.5") + " [in TypeHierarchy15]]]]\n" + "Sub types:\n", hierarchy @@ -579,8 +579,8 @@ assertHierarchyEquals( "Focus: ArrayList [in ArrayList.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + "Super types:\n" + - " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " AbstractList [in AbstractList.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + + " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " Object [in Object.class [in java.lang [in "+ getExternalJCLPathString("1.5") + " [in TypeHierarchy15]]]]\n" + "Sub types:\n" + " X [in X.java [in [in src [in TypeHierarchy15]]]]\n" + @@ -597,10 +597,10 @@ assertHierarchyEquals( "Focus: Y [in Y.java [in [in src [in TypeHierarchy15]]]]\n" + "Super types:\n" + - " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " ArrayList [in ArrayList.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + - " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + + " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " AbstractList [in AbstractList.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + + " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " Object [in Object.class [in java.lang [in "+ getExternalJCLPathString("1.5") + " [in TypeHierarchy15]]]]\n" + "Sub types:\n", hierarchy @@ -616,10 +616,10 @@ assertHierarchyEquals( "Focus: X [in X.java [in [in src [in TypeHierarchy15]]]]\n" + "Super types:\n" + - " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " ArrayList [in ArrayList.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + - " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + + " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " AbstractList [in AbstractList.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + + " List [in List.class [in util [in lib15.jar [in TypeHierarchy15]]]]\n" + " Object [in Object.class [in java.lang [in "+ getExternalJCLPathString("1.5") + " [in TypeHierarchy15]]]]\n" + "Sub types:\n", hierarchy @@ -1374,18 +1374,18 @@ assertHierarchyEquals( "Focus: \n" + "Sub types of root classes:\n" + - " X [in X.java [in [in [in P1]]]]\n" + - " Z [in Z.java [in [in [in P3]]]]\n" + + " Class [in Class.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + " Y [in Y.java [in [in [in P2]]]]\n" + - " Throwable [in Throwable.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + - " Exception [in Exception.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + - " RuntimeException [in RuntimeException.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + + " Z [in Z.java [in [in [in P3]]]]\n" + + " String [in String.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + + " Error [in Error.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + + " CloneNotSupportedException [in CloneNotSupportedException.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + " IllegalMonitorStateException [in IllegalMonitorStateException.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + " InterruptedException [in InterruptedException.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + - " CloneNotSupportedException [in CloneNotSupportedException.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + - " Error [in Error.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + - " String [in String.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + - " Class [in Class.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n", + " RuntimeException [in RuntimeException.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + + " Exception [in Exception.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + + " Throwable [in Throwable.class [in java.lang [in "+ getExternalJCLPathString() + " [in P1]]]]\n" + + " X [in X.java [in [in [in P1]]]]\n", hierarchy); } finally { deleteProjects(new String[] {"P1", "P2", "P3"}); Index: src/org/eclipse/jdt/core/tests/model/JavaProjectTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.model/src/org/eclipse/jdt/core/tests/model/JavaProjectTests.java,v retrieving revision 1.67 diff -u -r1.67 JavaProjectTests.java --- src/org/eclipse/jdt/core/tests/model/JavaProjectTests.java 4 May 2006 09:33:14 -0000 1.67 +++ src/org/eclipse/jdt/core/tests/model/JavaProjectTests.java 9 Jun 2006 10:57:32 -0000 @@ -238,7 +238,7 @@ createFile("/P/pack/X.java", "package pack; public class X {}"); createFile("/P/pack/Y.bar", "package pack; public class Y {}"); IPackageFragment pkg = getPackage("/P/pack"); - assertElementsEqual( + assertSortedElementsEqual( "Unexpected children of package pack", "X.java [in pack [in [in P]]]\n" + "Y.bar [in pack [in [in P]]]", @@ -1132,33 +1132,34 @@ String containerKey = UserLibraryManager.CP_USERLIBRARY_PREFERENCES_PREFIX+"TEST"; String libraryPreference = instancePreferences.get(containerKey, null); assertNotNull("Should get a preference for TEST user library", libraryPreference); - StringBuffer expected = new StringBuffer(); - expected.append("\r\n"); - expected.append("\r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append(" \r\n"); - expected.append("\r\n"); - String expectedString = org.eclipse.jdt.core.tests.util.Util.convertToIndependantLineDelimiter(expected.toString()); - assertEquals("Invalid library contents", expectedString, org.eclipse.jdt.core.tests.util.Util.convertToIndependantLineDelimiter(libraryPreference)); + + assertSourceEquals( + "Invalid library contents", + "\n" + + "\n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + " \n" + + "\n", + libraryPreference); } } #P org.eclipse.jdt.core.tests.compiler Index: src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.compiler/src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java,v retrieving revision 1.59.2.4 diff -u -r1.59.2.4 BatchCompilerTest.java --- src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java 30 May 2006 13:34:14 -0000 1.59.2.4 +++ src/org/eclipse/jdt/core/tests/compiler/regression/BatchCompilerTest.java 9 Jun 2006 10:57:36 -0000 @@ -1078,7 +1078,7 @@ String expectedLogContents = "\n" + "\n" + - "\n" + + "\n" + " \n" + " \n" + " \n" + @@ -1170,10 +1170,10 @@ " NORMALIZED SECTION\n" + " \n" + " \n" + - " \n" + - " \n" + + " \n" + + " \n" + " \n" + - " \n" + + " \n" + " \n" + " \n" + " \n" + @@ -1183,7 +1183,7 @@ " \n" + " \n" + " \n" + - " \n" + + " \n" + " \n" + "\n"; String normalizedExpectedLogContents = #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java,v retrieving revision 1.94 diff -u -r1.94 TypeHierarchy.java --- model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java 4 Apr 2006 13:10:36 -0000 1.94 +++ model/org/eclipse/jdt/internal/core/hierarchy/TypeHierarchy.java 9 Jun 2006 10:57:40 -0000 @@ -1471,17 +1471,16 @@ toString(buffer, this.focusType, 1, false); } else { buffer.append("Sub types of root classes:\n"); //$NON-NLS-1$ - IType[] roots= getRootClasses(); + IJavaElement[] roots = Util.sortCopy(getRootClasses()); for (int i= 0; i < roots.length; i++) { - toString(buffer, roots[i], 1, false); + toString(buffer, (IType) roots[i], 1, false); } } if (this.rootClasses.size > 1) { buffer.append("Root classes:\n"); //$NON-NLS-1$ - IType[] roots = this.getRootClasses(); + IJavaElement[] roots = Util.sortCopy(getRootClasses()); for (int i = 0, length = roots.length; i < length; i++) { - IType type = roots[i]; - toString(buffer, type, 1, false); + toString(buffer, (IType) roots[i], 1, false); } } else if (this.rootClasses.size == 0) { // see http://bugs.eclipse.org/bugs/show_bug.cgi?id=24691 @@ -1499,11 +1498,12 @@ */ private void toString(StringBuffer buffer, IType type, int indent, boolean ascendant) { IType[] types= ascendant ? getSupertypes(type) : getSubtypes(type); - for (int i= 0; i < types.length; i++) { + IJavaElement[] sortedTypes = Util.sortCopy(types); + for (int i= 0; i < sortedTypes.length; i++) { for (int j= 0; j < indent; j++) { buffer.append(" "); //$NON-NLS-1$ } - JavaElement element = (JavaElement)types[i]; + JavaElement element = (JavaElement)sortedTypes[i]; buffer.append(element.toStringWithAncestors(false/*don't show key*/)); buffer.append('\n'); toString(buffer, types[i], indent + 1, ascendant); Index: batch/org/eclipse/jdt/internal/compiler/batch/Main.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/batch/org/eclipse/jdt/internal/compiler/batch/Main.java,v retrieving revision 1.254.2.1 diff -u -r1.254.2.1 Main.java --- batch/org/eclipse/jdt/internal/compiler/batch/Main.java 30 May 2006 13:34:28 -0000 1.254.2.1 +++ batch/org/eclipse/jdt/internal/compiler/batch/Main.java 9 Jun 2006 10:57:39 -0000 @@ -28,9 +28,7 @@ import java.text.MessageFormat; import java.util.ArrayList; import java.util.Arrays; -import java.util.Collections; import java.util.Date; -import java.util.Enumeration; import java.util.HashMap; import java.util.Iterator; import java.util.Locale; @@ -958,12 +956,15 @@ buffer.append("<"); //$NON-NLS-1$ buffer.append(name); if (params != null) { - for (Enumeration enumeration = Collections.enumeration(params.keySet()); enumeration.hasMoreElements();) { + int length = parameters.size(); + String[] keys = new String[length]; + parameters.keySet().toArray(keys); + Arrays.sort(keys); + for (int i = 0; i < length; i++) { buffer.append(" "); //$NON-NLS-1$ - String key= (String) enumeration.nextElement(); - buffer.append(key); + buffer.append(keys[i]); buffer.append("=\""); //$NON-NLS-1$ - buffer.append(getEscaped(String.valueOf(params.get(key)))); + buffer.append(getEscaped(String.valueOf(params.get(keys[i])))); buffer.append("\""); //$NON-NLS-1$ } } Index: model/org/eclipse/jdt/internal/core/XMLWriter.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/XMLWriter.java,v retrieving revision 1.8 diff -u -r1.8 XMLWriter.java --- model/org/eclipse/jdt/internal/core/XMLWriter.java 5 Sep 2005 11:39:01 -0000 1.8 +++ model/org/eclipse/jdt/internal/core/XMLWriter.java 9 Jun 2006 10:57:39 -0000 @@ -11,8 +11,6 @@ package org.eclipse.jdt.internal.core; import java.io.PrintWriter; import java.io.Writer; -import java.util.Collections; -import java.util.Enumeration; import java.util.HashMap; import org.eclipse.jdt.core.IJavaProject; @@ -80,12 +78,15 @@ sb.append("<"); //$NON-NLS-1$ sb.append(name); if (parameters != null) { - for (Enumeration en = Collections.enumeration(parameters.keySet()); en.hasMoreElements();) { + int length = parameters.size(); + String[] keys = new String[length]; + parameters.keySet().toArray(keys); + Util.sort(keys); + for (int i = 0; i < length; i++) { sb.append(" "); //$NON-NLS-1$ - String key= (String) en.nextElement(); - sb.append(key); + sb.append(keys[i]); sb.append("=\""); //$NON-NLS-1$ - sb.append(getEscaped(String.valueOf(parameters.get(key)))); + sb.append(getEscaped(String.valueOf(parameters.get(keys[i])))); sb.append("\""); //$NON-NLS-1$ } } Index: model/org/eclipse/jdt/internal/core/util/Util.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Util.java,v retrieving revision 1.95 diff -u -r1.95 Util.java --- model/org/eclipse/jdt/internal/core/util/Util.java 26 Apr 2006 14:41:03 -0000 1.95 +++ model/org/eclipse/jdt/internal/core/util/Util.java 9 Jun 2006 10:57:41 -0000 @@ -45,6 +45,7 @@ import org.eclipse.jdt.internal.compiler.classfmt.ClassFormatException; import org.eclipse.jdt.internal.compiler.parser.ScannerHelper; import org.eclipse.jdt.internal.compiler.util.SuffixConstants; +import org.eclipse.jdt.internal.core.JavaElement; import org.eclipse.jdt.internal.core.JavaModelManager; import org.eclipse.jdt.internal.core.PackageFragmentRoot; import org.eclipse.jface.text.BadLocationException; @@ -1950,6 +1951,23 @@ } /** + * Sorts an array of Java elements based on their toStringWithAncestors(), + * returning a new array with the sorted items. + * The original array is left untouched. + */ + public static IJavaElement[] sortCopy(IJavaElement[] elements) { + int len = elements.length; + IJavaElement[] copy = new IJavaElement[len]; + System.arraycopy(elements, 0, copy, 0, len); + sort(copy, new Comparer() { + public int compare(Object a, Object b) { + return ((JavaElement) a).toStringWithAncestors().compareTo(((JavaElement) b).toStringWithAncestors()); + } + }); + return copy; + } + + /** * Sorts an array of Strings, returning a new array * with the sorted items. The original array is left untouched. */