anchor.diff:  
     @override
     js_ast.Expression visitPropertyGet(PropertyGet node) {
  -    return _emitPropertyGet(
  -        node.receiver, node.interfaceTarget, node.name.text);
  +    var propertyGet =
  +        _emitPropertyGet(node.receiver, node.interfaceTarget, node.name.text);
  +    if (_isCheckableNative(node.interfaceTarget)) {
  +      // If target is a native getter with a non-nullable type, add a null check
  +      // for soundness.
  +      return runtimeCall('checkNativeNonNull(#)', [propertyGet]);
  +    }
  +    return propertyGet;
     }
   
     @override
  
positive.code:   js_ast.Fun _emitNativeFunctionBody(Procedure node) {
      var name = _annotationName(node, isJSAnnotation) ?? node.name.text;
      if (node.isGetter) {
        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 {
        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]);
      }
    }
  
  
negative.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 {
  