code: @SuppressWarnings("ReferenceEquality")
    public final boolean matchesQualifiedName(Node n) {
      if (n.token != token) {
        return false;
      }
      switch (token) {
        case NAME:
          // ==, rather than equal as it is intern'd in setString
          return !getString().isEmpty() && getString() == n.getString();
        case THIS:
        case SUPER:
          return true;
        case GETPROP:
          // ==, rather than equal as it is intern'd in setString
          return getLastChild().getString() == n.getLastChild().getString()
              && getFirstChild().matchesQualifiedName(n.getFirstChild());
  
        case MEMBER_FUNCTION_DEF:
          // These are explicitly *not* qualified name components.
        default:
          return false;
      }
    }
docs: Returns whether a node matches a simple or a qualified name, such as <code>x</code> or <code>
  a.b.c</code> or <code>this.a</code>.