Fix for Bug 56084 IllegalArgumentException deleting lines from a text file
diff --git a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Rules.java b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Rules.java index beeafe4..4a5b710 100644 --- a/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Rules.java +++ b/bundles/org.eclipse.core.resources/src/org/eclipse/core/internal/resources/Rules.java
@@ -8,9 +8,9 @@ * IBM - Initial API and implementation **********************************************************************/ package org.eclipse.core.internal.resources; +import java.util.HashSet; + import org.eclipse.core.resources.*; -import org.eclipse.core.resources.IResource; -import org.eclipse.core.resources.IResourceRuleFactory; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.MultiRule; /** @@ -60,9 +60,20 @@ public ISchedulingRule validateEditRule(IResource[] resources) { if (resources.length == 0) return null; + //optimize rule for single file if (resources.length == 1) - return resources[0].isReadOnly() ? resources[0] : null; - return new MultiRule(resources); + return resources[0].isReadOnly() ? parent(resources[0]) : null; + //need a lock on the parents of all read-only files + HashSet rules = new HashSet(); + for (int i = 0; i < resources.length; i++) + if (resources[i].isReadOnly()) + rules.add(parent(resources[i])); + if (rules.isEmpty()) + return null; + if (rules.size() == 1) + return (ISchedulingRule)rules.iterator().next(); + ISchedulingRule[] ruleArray = (ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()]); + return new MultiRule(ruleArray); } } private static IResourceRuleFactory factory = ResourcesPlugin.getWorkspace().getRuleFactory();