Bug 528258 - Pass command args to resolve Builder's SchedulingRule
Change-Id: Ib8d599bd72a8ddaec63b51bab9c7efe3a7e85e76
Signed-off-by: Mickael Istria <mistria@redhat.com>
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildManager.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildManager.java
index 2c0f42d..1b2c196 100644
--- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildManager.java
+++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/events/BuildManager.java
@@ -1122,7 +1122,7 @@
/**
* Returns the scheduling rule that is required for building the project.
*/
- public ISchedulingRule getRule(IBuildConfiguration buildConfiguration, int trigger, String builderName, Map<String, String> args) {
+ public ISchedulingRule getRule(IBuildConfiguration buildConfiguration, int trigger, String builderName, Map<String, String> buildArgs) {
IProject project = buildConfiguration.getProject();
MultiStatus status = new MultiStatus(ResourcesPlugin.PI_RESOURCES, IResourceStatus.INTERNAL_ERROR, Messages.events_errors, null);
if (builderName == null) {
@@ -1134,10 +1134,16 @@
BuildContext context = new BuildContext(buildConfiguration);
for (int i = 0; i < commands.length; i++) {
BuildCommand command = (BuildCommand) commands[i];
+ Map<String, String> allArgs = command.getArguments(true);
+ if (allArgs == null) {
+ allArgs = buildArgs;
+ } else if (buildArgs != null) {
+ allArgs.putAll(buildArgs);
+ }
try {
IncrementalProjectBuilder builder = getBuilder(buildConfiguration, command, i, status, context);
if (builder != null) {
- ISchedulingRule builderRule = builder.getRule(trigger, args);
+ ISchedulingRule builderRule = builder.getRule(trigger, allArgs);
if (builderRule != null)
rules.add(builderRule);
else
@@ -1156,11 +1162,18 @@
}
} else {
// Returns the derived resources for the specified builderName
- ICommand command = getCommand(project, builderName, args);
+ ICommand command = getCommand(project, builderName, buildArgs);
+ Map<String, String> allArgs = new HashMap<>();
+ if (command.getArguments() != null) {
+ allArgs.putAll(command.getArguments());
+ }
+ if (buildArgs != null) {
+ allArgs.putAll(buildArgs);
+ }
try {
IncrementalProjectBuilder builder = getBuilder(buildConfiguration, command, -1, status);
if (builder != null)
- return builder.getRule(trigger, args);
+ return builder.getRule(trigger, allArgs);
} catch (CoreException e) {
status.add(e.getStatus());
diff --git a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/ParallelBuildChainTest.java b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/ParallelBuildChainTest.java
index 5c73963..35463cc 100644
--- a/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/ParallelBuildChainTest.java
+++ b/tests/org.eclipse.core.tests.resources/src/org/eclipse/core/tests/internal/builders/ParallelBuildChainTest.java
@@ -77,10 +77,11 @@
Map<String, String> args = command.getArguments();
if (args == null) {
args = Collections.singletonMap(TimerBuilder.RULE_TYPE_ARG, type.toString());
- command.setArguments(args);
} else {
args.put(TimerBuilder.RULE_TYPE_ARG, type.toString());
}
+ command.setArguments(args);
+ projectDescription.setBuildSpec(new ICommand[] {command});
project.setDescription(projectDescription, getMonitor());
}
}
@@ -113,4 +114,5 @@
setTimerBuilderSchedulingRuleForAllProjects(RuleType.CURRENT_PROJECT, getMonitor());
testIndividualProjectBuildsInParallelNoConflict();
}
+
}