|  | // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file | 
|  | // for details. All rights reserved. Use of this source code is governed by a | 
|  | // BSD-style license that can be found in the LICENSE file. | 
|  |  | 
|  | // @dart = 2.7 | 
|  |  | 
|  | // Test that methods implemented (not extended) in js-interop classes are still | 
|  | // considered live. | 
|  |  | 
|  | @JS() | 
|  | library anonymous_js_test; | 
|  |  | 
|  | import 'package:js/js.dart'; | 
|  |  | 
|  | @JS() | 
|  | @anonymous | 
|  | abstract class A { | 
|  | external factory A(); | 
|  | external String get a; | 
|  | external set a(String a); | 
|  | } | 
|  |  | 
|  | @JS() | 
|  | @anonymous | 
|  | abstract class B implements A { | 
|  | external factory B(); | 
|  | external String get b; | 
|  | external set b(String b); | 
|  | } | 
|  |  | 
|  | void main() { | 
|  | final b = B(); | 
|  | // This setter is missing if we don't assume the receiver could be an | 
|  | // unknown but concrete implementation of A. | 
|  | b.a = 'Hi'; | 
|  | b.b = 'Hello'; | 
|  | if (b.a != 'Hi') throw 'b.a'; | 
|  | if (b.b != 'Hello') throw 'b.b'; | 
|  | } |