Bug 122176 Invalid project description when creating new project in default location when using NewJavaProjectWizardPage
When installing Parasoft Jtest 7.5 into Eclipse 3.2 M4, File > New > Jtest Example Project doesn't work when using the default location. I will attach a stack trace. This feature works in Eclipse 3.1.1, and I believe it also worked in Eclispe 3.2 M3. I've only tested it so far on Windows XP SP2. I've identified the problem in BuildPathsBlock.createProject(...): public static void createProject(IProject project, URI locationURI, IProgressMonitor monitor) throws CoreException { ... IProjectDescription desc= project.getWorkspace().newProjectDescription(project.getName()); if (locationURI != null && ResourcesPlugin.getWorkspace().getRoot().getLocationURI().equals(locationURI)) { locationURI= null; } desc.setLocationURI(locationURI); The locationURI is derived in NewJavaProjectWizardPage.java line 303 using IPath.toFile().toURI(), and can be for example: file:/C:/temp/workspace/ But ResourcesPlugin.getWorkspace().getRoot().getLocationURI() is: file:/C:/temp/workspace Hence, since they are not "equal", locationURI is not set to null, as is the expected behavior. Later in LocationValidator.validateProjectLocationURI(...) line 326 is when the failure status is created: if (FileUtil.isOverlapping(location, defaultDefaultLocation.toFile().toURI())) This problem does not appear in Eclipse 3.1.1, because only IPath's are being compared, not URI's: public static void createProject(IProject project, IPath locationPath, IProgressMonitor monitor) throws CoreException { ... if (Platform.getLocation().equals(locationPath)) { You might be able to fix this bug by just removing any slash at the end of the URI before calling equals. But maybe a more clever equals is required here.
org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/jarimport/JarImportWizard.java
try {
						final URI uri= getLocationURI(root.getRawClasspathEntry());
						if (uri != null) {
							final IJavaProject[] projects= model.getJavaProjects();
							final IProgressMonitor subMonitor= new SubProgressMonitor(monitor, 100, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
							try {
								subMonitor.beginTask(JarImportMessages.JarImportWizard_prepare_import, projects.length * 100);
								for (int index= 0; index < projects.length; index++) {
									final IPackageFragmentRoot[] roots= projects[index].getPackageFragmentRoots();
									final IProgressMonitor subsubMonitor= new SubProgressMonitor(subMonitor, 100, SubProgressMonitor.SUPPRESS_SUBTASK_LABEL);
									try {
										subsubMonitor.beginTask(JarImportMessages.JarImportWizard_prepare_import, roots.length);
										for (int offset= 0; offset < roots.length; offset++) {
											final IPackageFragmentRoot current= roots[offset];
											if (!current.equals(root) && current.getKind() == IPackageFragmentRoot.K_BINARY) {
												final IClasspathEntry entry= current.getRawClasspathEntry();
												if (entry.getEntryKind() == IClasspathEntry.CPE_LIBRARY) {
													final URI location= getLocationURI(entry);
													if (uri.equals(location))
														status.addFatalError(MessageFormat.format(JarImportMessages.JarImportWizard_error_shared_jar, new String[] { current.getJavaProject().getElementName()}));
												}
											}
											subsubMonitor.worked(1);
										}
									} finally {
										subsubMonitor.done();
									}
								}
							} finally {
								subMonitor.done();