diff options
5 files changed, 69 insertions, 67 deletions
diff --git a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/BuilderTests.java b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/BuilderTests.java index 3a900025ca..d517653084 100644 --- a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/BuilderTests.java +++ b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/BuilderTests.java @@ -15,6 +15,7 @@ import java.lang.reflect.Method; import java.util.Arrays; import java.util.Enumeration; import java.util.Hashtable; +import java.util.List; import java.util.Vector; import junit.framework.*; @@ -320,16 +321,23 @@ public class BuilderTests extends TestCase { /** Verifies that the given elements have problems. */ protected void expectingProblemsFor(IPath[] roots, String expected) { - StringBuffer buffer = new StringBuffer(); + Problem[] problems = allSortedProblems(roots); + assumeEquals("Invalid problem(s)!!!", expected, arrayToString(problems)); //$NON-NLS-1$ + } + + /** + * Verifies that the given element has the expected problems. + */ + protected void expectingProblemsFor(IPath root, List expected) { + expectingProblemsFor(new IPath[] { root }, expected); + } + + /** + * Verifies that the given elements have the expected problems. + */ + protected void expectingProblemsFor(IPath[] roots, List expected) { Problem[] allProblems = allSortedProblems(roots); - if (allProblems != null) { - for (int i=0, length=allProblems.length; i<length; i++) { - if (i>0) buffer.append('\n'); - buffer.append(allProblems[i]); - } - } - String actual = buffer.toString(); - assumeEquals("Invalid problem(s)!!!", expected, actual); //$NON-NLS-1$ + assumeEquals("Invalid problem(s)!!!", arrayToString(expected.toArray()), arrayToString(allProblems)); } /** Verifies that the given element has a specific problem. @@ -369,7 +377,7 @@ public class BuilderTests extends TestCase { System.out.println("--------------------------------------------------------------------------------"); System.out.println("Missing problem while running test "+getName()+":"); System.out.println(" - expected : " + problem); - System.out.println(" - current: " + problemsToString(rootProblems)); + System.out.println(" - current: " + arrayToString(rootProblems)); assumeTrue("missing expected problem: " + problem, false); } } @@ -424,15 +432,19 @@ public class BuilderTests extends TestCase { /* get the leaf problems for this type */ Problem[] problems = env.getProblemsFor(path); - System.out.println(problemsToString(problems)); + System.out.println(arrayToString(problems)); + System.out.println(); } } - protected String problemsToString(Problem[] problems) { + protected String arrayToString(Object[] array) { StringBuffer buffer = new StringBuffer(); - for (int j = 0; j < problems.length; j++) { - buffer.append(problems[j].toString()); - buffer.append('\n'); + int length = array == null ? 0 : array.length; + for (int i = 0; i < length; i++) { + if (array[i] != null) { + if (i > 0) buffer.append('\n'); + buffer.append(array[i].toString()); + } } return buffer.toString(); } diff --git a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/BuildpathTests.java b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/BuildpathTests.java index 49e4878272..513d427180 100644 --- a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/BuildpathTests.java +++ b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/BuildpathTests.java @@ -542,7 +542,6 @@ public void testMissingLibrary4() throws JavaModelException { } // https://bugs.eclipse.org/bugs/show_bug.cgi?id=172345 public void testIncompatibleJdkLEvelOnProject() throws JavaModelException { - this.abortOnFailure = false; // NOT sure this test will pass on releng boxes => do not abort on failures // Create project IPath projectPath = env.addProject("Project"); @@ -562,41 +561,33 @@ public void testIncompatibleJdkLEvelOnProject() throws JavaModelException { project.setOption(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL, CompilerOptions.WARNING); incrementalBuild(); long projectRuntimeJDKLevel = CompilerOptions.versionToJdkLevel(projectRuntime); - StringBuffer buffer = new StringBuffer(); - for (int i = 0, max = classlibs.length; i < max; i++) { + int max = classlibs.length; + List expectedProblems = new ArrayList(); + for (int i = 0; i < max; i++) { String path = project.getPackageFragmentRoot(classlibs[i]).getPath().makeRelative().toString(); Object target = JavaModel.getTarget(ResourcesPlugin.getWorkspace().getRoot(), new Path(path).makeAbsolute(), true); long libraryJDK = org.eclipse.jdt.internal.core.util.Util.getJdkLevel(target); if (libraryJDK > projectRuntimeJDKLevel) { - if (i>0) buffer.append('\n'); - buffer.append(getJdkLevelProblem(projectRuntime, path, IMarker.SEVERITY_WARNING)); + expectedProblems.add(getJdkLevelProblem(projectRuntime, path, IMarker.SEVERITY_WARNING)); } } - - expectingProblemsFor( - projectPath, - String.valueOf(buffer) - ); + expectingProblemsFor(projectPath, expectedProblems); // Change project incompatible jdk level preferences to error, perform incremental build and expect 2 problems project.setOption(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL, CompilerOptions.ERROR); incrementalBuild(); - buffer = new StringBuffer(); - for (int i = 0, max = classlibs.length; i < max; i++) { + expectedProblems = new ArrayList(); + for (int i = 0; i < max; i++) { String path = project.getPackageFragmentRoot(classlibs[i]).getPath().makeRelative().toString(); Object target = JavaModel.getTarget(ResourcesPlugin.getWorkspace().getRoot(), new Path(path).makeAbsolute(), true); long libraryJDK = org.eclipse.jdt.internal.core.util.Util.getJdkLevel(target); if (libraryJDK > projectRuntimeJDKLevel) { - if (i>0) buffer.append('\n'); - buffer.append(getJdkLevelProblem(projectRuntime, path, IMarker.SEVERITY_ERROR)); + expectedProblems.add(getJdkLevelProblem(projectRuntime, path, IMarker.SEVERITY_ERROR)); } } - expectingProblemsFor( - projectPath, - "Problem : The project cannot be built until build path errors are resolved [ resource : </Project> range : <-1,-1> category : <10> severity : <2>]\n" + - String.valueOf(buffer) - ); + expectedProblems.add("Problem : The project cannot be built until build path errors are resolved [ resource : </Project> range : <-1,-1> category : <10> severity : <2>]"); + expectingProblemsFor(projectPath, expectedProblems); // Remove project to avoid side effect on other tests env.removeProject(projectPath); @@ -610,7 +601,6 @@ public void testIncompatibleJdkLEvelOnWksp() throws JavaModelException { IEclipsePreferences preferences = manager.getInstancePreferences(); String incompatibleJdkLevel = preferences.get(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL, null); try { - this.abortOnFailure = false; // NOT sure this test will pass on all releng boxes => do not abort on failures // Create project IPath projectPath = env.addProject("Project"); @@ -631,42 +621,33 @@ public void testIncompatibleJdkLEvelOnWksp() throws JavaModelException { preferences.put(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL, JavaCore.WARNING); incrementalBuild(); - StringBuffer buffer = new StringBuffer(); - for (int i = 0, max = classlibs.length; i < max; i++) { + List expectedProblems = new ArrayList(); + int max = classlibs.length; + for (int i = 0; i < max; i++) { String path = project.getPackageFragmentRoot(classlibs[i]).getPath().makeRelative().toString(); Object target = JavaModel.getTarget(ResourcesPlugin.getWorkspace().getRoot(), new Path(path).makeAbsolute(), true); long libraryJDK = org.eclipse.jdt.internal.core.util.Util.getJdkLevel(target); if (libraryJDK > wkspRuntimeJDKLevel) { - if (i>0) buffer.append('\n'); - buffer.append(getJdkLevelProblem(wkspRuntime, path, IMarker.SEVERITY_WARNING)); + expectedProblems.add(getJdkLevelProblem(wkspRuntime, path, IMarker.SEVERITY_WARNING)); } } - - expectingProblemsFor( - projectPath, - String.valueOf(buffer) - ); + expectingProblemsFor(projectPath, expectedProblems); // Change workspace incompatible jdk level preferences to error, perform incremental build and expect 2 problems preferences.put(JavaCore.CORE_INCOMPATIBLE_JDK_LEVEL, JavaCore.ERROR); incrementalBuild(); - buffer = new StringBuffer(); - for (int i = 0, max = classlibs.length; i < max; i++) { + expectedProblems = new ArrayList(); + for (int i = 0; i < max; i++) { String path = project.getPackageFragmentRoot(classlibs[i]).getPath().makeRelative().toString(); Object target = JavaModel.getTarget(ResourcesPlugin.getWorkspace().getRoot(), new Path(path).makeAbsolute(), true); long libraryJDK = org.eclipse.jdt.internal.core.util.Util.getJdkLevel(target); if (libraryJDK > wkspRuntimeJDKLevel) { - if (i>0) buffer.append('\n'); - buffer.append(getJdkLevelProblem(wkspRuntime, path, IMarker.SEVERITY_ERROR)); + expectedProblems.add(getJdkLevelProblem(wkspRuntime, path, IMarker.SEVERITY_ERROR)); } } - - expectingProblemsFor( - projectPath, - "Problem : The project cannot be built until build path errors are resolved [ resource : </Project> range : <-1,-1> category : <10> severity : <2>]\n" + - String.valueOf(buffer) - ); + expectedProblems.add("Problem : The project cannot be built until build path errors are resolved [ resource : </Project> range : <-1,-1> category : <10> severity : <2>]"); + expectingProblemsFor(projectPath, expectedProblems); // Remove project to avoid side effect on other tests env.removeProject(projectPath); diff --git a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests.java b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests.java index 62012c6d54..c9125f84cb 100644 --- a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests.java +++ b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/IncrementalTests.java @@ -188,9 +188,9 @@ public class IncrementalTests extends BuilderTests { incrementalBuild(projectPath); expectingProblemsFor( new IPath[]{ pathToA, pathToB, pathToC }, - "Problem : The public type _A must be defined in its own file [ resource : </Project/src/p/A.java> range : <25,27> category : <40> severity : <2>]\n" + "Problem : A cannot be resolved to a type [ resource : </Project/src/p/B.java> range : <35,36> category : <40> severity : <2>]\n" + - "Problem : The hierarchy of the type C is inconsistent [ resource : </Project/src/p/C.java> range : <25,26> category : <40> severity : <2>]" + "Problem : The hierarchy of the type C is inconsistent [ resource : </Project/src/p/C.java> range : <25,26> category : <40> severity : <2>]\n" + + "Problem : The public type _A must be defined in its own file [ resource : </Project/src/p/A.java> range : <25,27> category : <40> severity : <2>]" ); expectingSpecificProblemFor(pathToA, new Problem("_A", "The public type _A must be defined in its own file", pathToA, 25, 27, CategorizedProblem.CAT_TYPE, IMarker.SEVERITY_ERROR)); //$NON-NLS-1$ //$NON-NLS-2$ expectingSpecificProblemFor(pathToB, new Problem("B", "A cannot be resolved to a type", pathToB, 35, 36, CategorizedProblem.CAT_TYPE, IMarker.SEVERITY_ERROR)); //$NON-NLS-1$ //$NON-NLS-2$ diff --git a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/Problem.java b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/Problem.java index cd2b3e56bf..2f72a363c2 100644 --- a/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/Problem.java +++ b/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/Problem.java @@ -118,17 +118,24 @@ public int getSeverity() { } public int compareTo(Object o) { - Problem problem = (Problem) o; - if (!(this.getLocation().equals(problem.getLocation()))) { - return this.getLocation().compareTo(problem.getLocation()); - } - if (this.getStart() < problem.getStart()) { - return -1; - } - if (this.getEnd() < problem.getEnd()) { - return -1; + if(o instanceof Problem){ + Problem problem = (Problem) o; + /* Replace initial implementation with toString() comparison otherwise the problems order may change + * when different VM are used (see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=213570)... + if (!(this.getLocation().equals(problem.getLocation()))) { + return this.getLocation().compareTo(problem.getLocation()); + } + if (this.getStart() < problem.getStart()) { + return -1; + } + if (this.getEnd() < problem.getEnd()) { + return -1; + } + return this.getMessage().compareTo(problem.getMessage()); + */ + return this.toString().compareTo(problem.toString()); } - return this.getMessage().compareTo(problem.getMessage()); + return -1; } } diff --git a/org.eclipse.jdt.core/buildnotes_jdt-core.html b/org.eclipse.jdt.core/buildnotes_jdt-core.html index 8f3593e2cb..74aa59ab43 100644 --- a/org.eclipse.jdt.core/buildnotes_jdt-core.html +++ b/org.eclipse.jdt.core/buildnotes_jdt-core.html @@ -49,7 +49,9 @@ Eclipse SDK 3.4M5 - %date% - 3.4 MILESTONE 5 <h2>What's new in this drop</h2> <h3>Problem Reports Fixed</h3> -<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213509">213509</a> +<a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213570">213570</a> +IncrementalTests#testRenameMainType() fails with IBM JRE 6.0 +<br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=213509">213509</a> [dom] IMethodBinding.getParameterAnnotations returns annotations for wrong parameter <br><a href="http://bugs.eclipse.org/bugs/show_bug.cgi?id=204749">204749</a> [1.5][javadoc] NPE in JavadocQualifiedTypeReference |