code: protected void parseRequiredPrimaryTypes( TokenStream tokens,
                                                JcrNodeDefinitionTemplate childDefn ) throws ConstraintViolationException {
          if (tokens.canConsume('(')) {
              List<Name> requiredTypes = parseNameList(tokens);
              if (requiredTypes.isEmpty()) {
                  requiredTypes.add(JcrNtLexicon.BASE);
              }
              childDefn.setRequiredPrimaryTypeNames(names(requiredTypes));
              tokens.consume(')');
          }
      }
docs: Parse the child node definition's list of required primary types, if they appear next on the token stream.
  
  @param tokens the tokens containing the definition; never null
  @param childDefn the child node definition; never null
  @throws ParsingException if there is a problem parsing the content
  @throws ConstraintViolationException not expected