docs: private AstNode propertyName(int atPos, String s, int memberTypeFlags)
          throws IOException
      {
          int pos = atPos != -1 ? atPos : ts.tokenBeg, lineno = ts.lineno;
          int colonPos = -1;
          Name name = createNameNode(true, currentToken);
          Name ns = null;
  
          if (matchToken(Token.COLONCOLON, true)) {
              ns = name;
              colonPos = ts.tokenBeg;
  
              switch (nextToken()) {
                // handles name::name
                case Token.NAME:
                    name = createNameNode();
                    break;
  
                // handles name::*
                case Token.MUL:
                    saveNameTokenData(ts.tokenBeg, "*", ts.lineno);
                    name = createNameNode(false, -1);
                    break;
  
                // handles name::[expr] or *::[expr]
                case Token.LB:
                    return xmlElemRef(atPos, ns, colonPos);
  
                default:
                    reportError("msg.no.name.after.coloncolon");
                    return makeErrorNode();
              }
          }
  
          if (ns == null && memberTypeFlags == 0 && atPos == -1) {
              return name;
          }
  
          XmlPropRef ref = new XmlPropRef(pos, getNodeEnd(name) - pos);
          ref.setAtPos(atPos);
          ref.setNamespace(ns);
          ref.setColonPos(colonPos);
          ref.setPropName(name);
          ref.setLineno(lineno);
          return ref;
      }