code: private void addTypesToFunctions(
        Node objLit, String thisType, PolymerClassDefinition.DefinitionType defType) {
      checkState(objLit.isObjectLit());
      for (Node keyNode : objLit.children()) {
        Node value = keyNode.getLastChild();
        if (value != null && value.isFunction()) {
          JSDocInfoBuilder fnDoc = JSDocInfoBuilder.maybeCopyFrom(keyNode.getJSDocInfo());
          fnDoc.recordThisType(
              new JSTypeExpression(new Node(Token.BANG, IR.string(thisType)), VIRTUAL_FILE));
          keyNode.setJSDocInfo(fnDoc.build());
        }
      }
  
      // Add @this and @return to default property values.
      for (MemberDefinition property :
          PolymerPassStaticUtils.extractProperties(
              objLit,
              defType,
              compiler,
              /** constructor= */
              null)) {
        if (!property.value.isObjectLit()) {
          continue;
        }
  
        Node defaultValue = NodeUtil.getFirstPropMatchingKey(property.value, "value");
        if (defaultValue == null || !defaultValue.isFunction()) {
          continue;
        }
        Node defaultValueKey = defaultValue.getParent();
        JSDocInfoBuilder fnDoc = JSDocInfoBuilder.maybeCopyFrom(defaultValueKey.getJSDocInfo());
        fnDoc.recordThisType(
            new JSTypeExpression(new Node(Token.BANG, IR.string(thisType)), VIRTUAL_FILE));
        fnDoc.recordReturnType(PolymerPassStaticUtils.getTypeFromProperty(property, compiler));
        defaultValueKey.setJSDocInfo(fnDoc.build());
      }
    }
docs: Adds an @this annotation to all functions in the objLit.