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();