code: private void visitInterfacePropertyAssignment(Node object, Node lvalue) {
      if (!lvalue.getParent().isAssign()) {
        // assignments to interface properties cannot be in destructuring patterns or for-of loops
        reportInvalidInterfaceMemberDeclaration(object);
        return;
      }
      Node assign = lvalue.getParent();
      Node rvalue = assign.getSecondChild();
      JSType rvalueType = getJSType(rvalue);
  
      // Only 2 values are allowed for interface methods:
      //    goog.abstractMethod
      //    function () {};
      // Other (non-method) interface properties must be stub declarations without assignments, e.g.
      //     someinterface.prototype.nonMethodProperty;
      // which is why we enforce that `rvalueType.isFunctionType()`.
      if (!rvalueType.isFunctionType()) {
        reportInvalidInterfaceMemberDeclaration(object);
      }
  
      if (rvalue.isFunction() && !NodeUtil.isEmptyBlock(NodeUtil.getFunctionBody(rvalue))) {
        String abstractMethodName = compiler.getCodingConvention().getAbstractMethodName();
        compiler.report(JSError.make(object, INTERFACE_METHOD_NOT_EMPTY, abstractMethodName));
      }
    }
docs: Visits an lvalue node for cases such as
  
  <pre>
  interface.prototype.property = ...;
  </pre>