anchor.diff:    js_ast.Fun _emitNativeFunctionBody(Procedure node) {
       var name = _annotationName(node, isJSAnnotation) ?? node.name.text;
       if (node.isGetter) {
  -      return js_ast.Fun([], js.block('{ return this.#; }', [name]));
  +      var returnValue = js('this.#', [name]);
  +      if (_isNullCheckableNative(node)) {
  +        // Add a potential null-check on native getter if type is non-nullable.
  +        returnValue = runtimeCall('checkNativeNonNull(#)', [returnValue]);
  +      }
  +      return js_ast.Fun([], js.block('{ return #; }', [returnValue]));
       } else if (node.isSetter) {
         var params = _emitParameters(node.function);
         return js_ast.Fun(
             params, js.block('{ this.# = #; }', [name, params.last]));
       } else {
  -      return js.fun(
  -          'function (...args) { return this.#.apply(this, args); }', name);
  +      var returnValue = js('this.#.apply(this, args)', [name]);
  +      if (_isNullCheckableNative(node)) {
  +        // Add a potential null-check on return value if type is non-nullable.
  +        returnValue = runtimeCall('checkNativeNonNull(#)', [returnValue]);
  +      }
  +      return js.fun('function (...args) { return #; }', [returnValue]);
       }
     }
   
  
positive.code:       // Fields on a native class are implicitly native.
        // Methods/getters/setters are marked external/native.
        if (member is Field || _isExternal(member)) {
          var jsName = _annotationName(member, isJSName);
          return jsName != null && jsName != name;
        } else {
  
negative.code: 
    @override
    js_ast.Expression visitPropertyGet(PropertyGet node) {
      return _emitPropertyGet(
          node.receiver, node.interfaceTarget, node.name.text);
    }
  
    @override
  