### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/internal/core/builder/ClasspathDirectory.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/builder/ClasspathDirectory.java,v retrieving revision 1.38 diff -u -r1.38 ClasspathDirectory.java --- model/org/eclipse/jdt/internal/core/builder/ClasspathDirectory.java 7 Mar 2009 01:08:10 -0000 1.38 +++ model/org/eclipse/jdt/internal/core/builder/ClasspathDirectory.java 25 Mar 2009 20:45:17 -0000 @@ -33,7 +33,7 @@ ClasspathDirectory(IContainer binaryFolder, boolean isOutputFolder, AccessRuleSet accessRuleSet) { this.binaryFolder = binaryFolder; - this.isOutputFolder = isOutputFolder; + this.isOutputFolder = isOutputFolder || binaryFolder.getProjectRelativePath().isEmpty(); // if binaryFolder == project, then treat it as an outputFolder this.directoryCache = new SimpleLookupTable(5); this.accessRuleSet = accessRuleSet; } #P org.eclipse.jdt.core.tests.builder Index: src/org/eclipse/jdt/core/tests/builder/EfficiencyTests.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core.tests.builder/src/org/eclipse/jdt/core/tests/builder/EfficiencyTests.java,v retrieving revision 1.14 diff -u -r1.14 EfficiencyTests.java --- src/org/eclipse/jdt/core/tests/builder/EfficiencyTests.java 27 Jun 2008 16:02:02 -0000 1.14 +++ src/org/eclipse/jdt/core/tests/builder/EfficiencyTests.java 25 Mar 2009 20:45:18 -0000 @@ -27,6 +27,37 @@ return buildTestSuite(EfficiencyTests.class); } + public void testProjectAsClassFolder() throws JavaModelException { + IPath projectPath1 = env.addProject("Project1"); //$NON-NLS-1$ + env.addExternalJars(projectPath1, Util.getJavaClassLibs()); + + IPath projectPath2 = env.addProject("Project2"); //$NON-NLS-1$ + env.addExternalJars(projectPath2, Util.getJavaClassLibs()); + env.addClassFolder(projectPath2, projectPath1, false); + + env.addClass(projectPath2, "p1", "X", //$NON-NLS-1$ //$NON-NLS-2$ + "package p1;\n"+ //$NON-NLS-1$ + "public abstract class X {}\n" //$NON-NLS-1$ + ); + + env.addClass(projectPath2, "p2", "Y", //$NON-NLS-1$ //$NON-NLS-2$ + "package p2;\n"+ //$NON-NLS-1$ + "public class Y {}\n" //$NON-NLS-1$ + ); + + fullBuild(); + + env.addClass(projectPath2, "p1", "X", //$NON-NLS-1$ //$NON-NLS-2$ + "package p1;\n"+ //$NON-NLS-1$ + "public class X {}\n" //$NON-NLS-1$ + ); + + incrementalBuild(projectPath2); + + // if a full build happens instead of an incremental, then both types will be recompiled + expectingCompiledClasses(new String[]{"p1.X"}); //$NON-NLS-1$ + } + public void testEfficiency() throws JavaModelException { IPath projectPath = env.addProject("Project"); //$NON-NLS-1$ env.addExternalJars(projectPath, Util.getJavaClassLibs());