code: public static String getBestLValueName(@Nullable Node lValue) {
      if (lValue == null || lValue.getParent() == null) {
        return null;
      }
      if (lValue.getParent().isClassMembers() && !lValue.isComputedProp()) {
        String className = NodeUtil.getName(lValue.getGrandparent());
        if (className == null) { // Anonymous class
          return null;
        }
        String methodName = lValue.getString();
        String maybePrototype = lValue.isStaticMember() ? "." : ".prototype.";
        return className + maybePrototype + methodName;
      }
      // TODO(sdh): Tighten this to simply require !lValue.isQuotedString()
      // Could get rid of the isJSIdentifier check, but may need to fix depot.
      if (mayBeObjectLitKey(lValue)) {
        Node owner = getBestLValue(lValue.getParent());
        if (owner != null) {
          String ownerName = getBestLValueName(owner);
          if (ownerName != null) {
            String key = getObjectLitKeyName(lValue);
            return TokenStream.isJSIdentifier(key) ? ownerName + "." + key : null;
          }
        }
        return null;
      }
      return lValue.getQualifiedName();
    }
docs: Get the name of the given l-value node.