code: private static boolean matchesPrototypeInstanceVar(Node node, NodeMetadata metadata,
        String name) {
      String[] parts = name.split(".prototype.");
      String className = parts[0];
      String propertyName = parts[1];
      JSType providedJsType = getJsType(metadata, className);
      if (providedJsType == null) {
        return false;
      }
      JSType jsType = null;
      if (node.hasChildren()) {
        jsType = node.getFirstChild().getJSType();
      }
      if (jsType == null) {
        return false;
      }
      jsType = jsType.restrictByNotNullOrUndefined();
      if (!jsType.isUnknownType()
          && !jsType.isAllType()
          && jsType.isSubtypeOf(providedJsType)) {
        if (node.isName() && propertyName.equals(node.getString())) {
          return true;
        } else if (node.isGetProp()
            && propertyName.equals(node.getLastChild().getString())) {
          return true;
        }
      }
      return false;
    }
docs: Checks to see if the node represents an access of an instance variable
  on an object given a prototype declaration of an object. For instance,
  {@code ns.AppContext.prototype.get} will match {@code appContext.get}
  or {@code this.get} when accessed from within the AppContext object.