* Adds a new scheduling rule to the stack of rules for this thread. Throws
* a runtime exception if the new rule is not compatible with the base
* scheduling rule for this thread.
*/
void push(final ISchedulingRule rule) {
final ISchedulingRule baseRule = getRule();
if (++top >= ruleStack.length) {
ISchedulingRule[] newStack = new ISchedulingRule[ruleStack.length * 2];
System.arraycopy(ruleStack, 0, newStack, 0, ruleStack.length);
ruleStack = newStack;
}
ruleStack[top] = rule;
if (JobManager.DEBUG_BEGIN_END)
lastPush = (RuntimeException) new RuntimeException().fillInStackTrace();
//check for containment last because we don't want to fail again on endRule
if (baseRule != null && rule != null && !baseRule.contains(rule))
illegalPush(rule, baseRule);
}