if (subjectType.isConstructor()) {
subjectType = subjectType.getAbstractDataType();
}
Strategy s = this.getStrategy();
DIRECTION direction = DIRECTION.BottomUp;
PROGRESS progress = PROGRESS.Continuing;
FIXEDPOINT fixedpoint = FIXEDPOINT.No;
if (s.isBottomUp()) {
direction = DIRECTION.BottomUp;
} else if (s.isBottomUpBreak()) {
direction = DIRECTION.BottomUp;
progress = PROGRESS.Breaking;
} else if (s.isInnermost()) {
direction = DIRECTION.BottomUp;
fixedpoint = FIXEDPOINT.Yes;
} else if (s.isTopDown()) {
direction = DIRECTION.TopDown;
} else if (s.isTopDownBreak()) {
direction = DIRECTION.TopDown;
progress = PROGRESS.Breaking;
} else if (s.isOutermost()) {
direction = DIRECTION.TopDown;
fixedpoint = FIXEDPOINT.Yes;
} else {
throw new ImplementationError("Unknown strategy " + s);
}