docs: private void parseLocationStep(String selector,
                                   int start,
                                   int stepEnd)
      throws InvalidXPathSyntaxException
    {
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        tc.entry(cclass,
                 "parseLocationStep",
                 "selector: " + selector + ", start: " + start + ", end: " + stepEnd);
  
      int stepStart = start;
      int posOpenBracket = selector.indexOf("[", start);
      if(posOpenBracket > stepEnd || posOpenBracket == -1)
      {
        // Set posOpenBracket to avoid further processing
        posOpenBracket = -1;
        // No brackets so process whole of the location step
        String step = selector.substring(start,stepEnd);
        // Set the full name into the identifier. The full name is used in position assignment when
        // determining uniqueness of names. Only a full name will do.
        String full = selector.substring(0,stepEnd);
        // Add an IdentifierImpl for the location step to the array list
        selOperands.add(createIdentifierForSubExpression(step, full, true, false));      
      }
      
      int posCloseBracket = selector.indexOf("]", start); 
   
      boolean wrapWholeStep = false;
      boolean foundPredicates = false;
      ArrayList tempSelOperands = new ArrayList();
      while (posOpenBracket >= 0)
      {
        foundPredicates = true;
        if(posCloseBracket < posOpenBracket)
        {
          if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
            tc.exit(this,cclass, "parseLocationStep", "bracket error"); 
          
          InvalidXPathSyntaxException iex = new InvalidXPathSyntaxException(selector);
          FFDC.processException(cclass,
              "com.ibm.ws.sib.matchspace.selector.impl.XPath10ParserImpl",
              iex,
              "1:372:1.16"); 
          
          throw iex;
        }
        else
        {
          // The full selector path up to this point
          String full = selector.substring(0,posOpenBracket);
          
          // Factor out the location step first but be careful we may have a predicate
          if(start != posOpenBracket)
          {
            // Go ahead and deal with the location step
            String step = selector.substring(start,posOpenBracket);
            // Add an IdentifierImpl for the location step to the array list
            tempSelOperands.add(createIdentifierForSubExpression(step, full, true, false));    
          }
          
          // Now parse the predicate
          String predicate = selector.substring(posOpenBracket + 1,posCloseBracket);
          Selector parsedPredicate = parsePredicate(predicate, full);
          
          // Check whether we were able to parse
          if(parsedPredicate == null)
          {
            // Unable to parse the expression, so we need to wrap the entire step
  //          tempSelOperands.add(createIdentifierForSubExpression(predicate, false));
            wrapWholeStep = true;
            break;
          }
          else
          {
            // we were able to parse the expression with the MatchParser
            // Check that the predicate has Simple tests only
            if(!Matching.isSimple(parsedPredicate))
            {
              wrapWholeStep = true;
              break;
            }
            parsedPredicate.setExtended();
            tempSelOperands.add(parsedPredicate);
          }       
        }
          
        // Move to beyond the close bracket
        start = posCloseBracket+1;
        //Are there any more brackets?
        posOpenBracket = selector.indexOf("[", start);
        posCloseBracket = selector.indexOf("]", start); 
        
        // Have we found the last bracket in this location step?
        if(posOpenBracket > stepEnd || posOpenBracket == -1)
        {
          // Set posOpenBracket to avoid further processing
          posOpenBracket = -1; 
        }
      } // eof while
      
      if(foundPredicates)
      {
        // If we determined that we cannot parse this location step, then wrap it
        if(wrapWholeStep)
          wrapLocationStep(selector, stepStart,stepEnd);
        else
        {
          // PostProcessing here
          selOperands.addAll(tempSelOperands);
        }
      }
      if (TraceComponent.isAnyTracingEnabled() && tc.isEntryEnabled())
        tc.exit(this,cclass, "parseLocationStep");      
    }