### Eclipse Workspace Patch 1.0 #P org.eclipse.core.resources Index: src/org/eclipse/core/internal/events/BuildManager.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildManager.java,v retrieving revision 1.114 diff -u -r1.114 BuildManager.java --- src/org/eclipse/core/internal/events/BuildManager.java 15 Mar 2010 17:24:16 -0000 1.114 +++ src/org/eclipse/core/internal/events/BuildManager.java 24 Mar 2010 14:43:51 -0000 @@ -991,6 +991,7 @@ if (project.isAccessible()) { Set rules = new HashSet(); commands = ((Project) project).internalGetDescription().getBuildSpec(false); + boolean hasNullBuildRule = false; for (int i = 0; i < commands.length; i++) { BuildCommand command = (BuildCommand) commands[i]; try { @@ -999,6 +1000,8 @@ ISchedulingRule builderRule = builder.getRule(); if (builderRule != null) rules.add(builderRule); + else + hasNullBuildRule = true; } } catch (CoreException e) { status.add(e.getStatus()); @@ -1006,7 +1009,10 @@ } if (rules.isEmpty()) return null; - return new MultiRule((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()])); + // Bug 306824 - Builders returning a null rule can't work safely if other builders require a non-null rule + // Be pessimistic and fall back to the default build rule (workspace root) in this case. + if (!hasNullBuildRule) + return new MultiRule((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()])); } } else { // Returns the derived resources for the specified builderName