// Split the expression into individual property names.
// We then optimize what we can from the expression. This will
// shorten the expression and, in some cases, eliminate
// it. We also check to see if the binding can be an invariant.
String[] split = new StringSplitter('.').splitToArray(_expression);
int count = optimizeRootObject(split);
// We'ver removed some or all of the initial elements of split
// but have to account for anthing left over.