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/wizards/JavaProjectWizardSecondPage.java
IClasspathEntry[] defaultJRELibrary= PreferenceConstants.getDefaultJRELibrary();
		String compliance= fFirstPage.getCompilerCompliance();
		IPath jreContainerPath= new Path(JavaRuntime.JRE_CONTAINER);
		if (compliance == null || defaultJRELibrary.length > 1 || !jreContainerPath.isPrefixOf(defaultJRELibrary[0].getPath())) {
			
			return defaultJRELibrary;
		}
		IVMInstall inst= fFirstPage.getJVM();
		if (inst != null) {
			IPath newPath= jreContainerPath.append(inst.getVMInstallType().getId()).append(inst.getName());
			return new IClasspathEntry[] { JavaCore.newContainerEntry(newPath) };
		}
		return defaultJRELibrary;
	}
	
	private void rememberExistingFiles(URI projectLocation) throws CoreException {
		fDotProjectBackup= null;
		fDotClasspathBackup= null;
		
		IFileStore file= EFS.getStore(projectLocation);
		if (file.fetchInfo().exists()) {
			IFileStore projectFile= file.getChild(FILENAME_PROJECT);
			if (projectFile.fetchInfo().exists()) {
				fDotProjectBackup= createBackup(projectFile, "project-desc");  
			}
			IFileStore classpathFile= file.getChild(FILENAME_CLASSPATH);
			if (classpathFile.fetchInfo().exists()) {
				fDotClasspathBackup= createBackup(classpathFile, "classpath-desc");  
			}
		}