@Nullable
  public final String getQualifiedName() {
    switch (token) {
      case NAME:
        String name = getString();
        return name.isEmpty() ? null : name;
      case GETPROP:
        StringBuilder builder = getQualifiedNameForGetProp(0);
        return builder != null ? builder.toString() : null;
      case THIS:
        return "this";
      case SUPER:
        return "super";
      default:
        return null;
    }
  }
@ Nullable public final String getQualifiedName ( ) { switch ( token ) { case NAME : String name = getString ( ) ; return name . isEmpty ( ) ? null : name ; case GETPROP : StringBuilder builder = getQualifiedNameForGetProp ( 0 ) ; return builder != null ? builder . toString ( ) : null ; case THIS : return "this" ; case SUPER : return "super" ; default : return null ; } }
This function takes a set of GETPROP nodes and produces a string that is each property
separated by dots. If the node ultimately under the left sub-tree is not a simple name, this is
not a valid qualified name.

@return a null if this is not a qualified name, or a dot-separated string of the name and
properties.