|  | // Copyright (c) 2014, 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. | 
|  |  | 
|  | import "native_testing.dart"; | 
|  |  | 
|  | makeA() native; | 
|  | nativeFirst(x, y) native; | 
|  |  | 
|  | void setup() { | 
|  | JS('', r""" | 
|  | (function(){ | 
|  | self.nativeFirst = function(x, y) { return x; }; | 
|  |  | 
|  | function A() {} | 
|  | self.makeA = function() { return new A() }; | 
|  | self.nativeConstructor(A); | 
|  | })()"""); | 
|  | applyTestExtensions(['A']); | 
|  | } | 
|  |  | 
|  | @Native("A") | 
|  | class A { | 
|  | var _foo; | 
|  |  | 
|  | get foo => _foo; | 
|  |  | 
|  | init() { | 
|  | _foo = () => 42; | 
|  | } | 
|  | } | 
|  |  | 
|  | class B { | 
|  | var foo = 499; | 
|  | } | 
|  |  | 
|  | class C { | 
|  | foo() => 499; | 
|  | } | 
|  |  | 
|  | class D { | 
|  | var foo = () => 499; | 
|  | } | 
|  |  | 
|  | main() { | 
|  | nativeTesting(); | 
|  | setup(); | 
|  | var a = makeA(); | 
|  | a.init(); | 
|  | var b = new B(); | 
|  | var c = new C(); | 
|  | var d = new D(); | 
|  | a = nativeFirst(a, b); | 
|  | a = nativeFirst(a, c); | 
|  | a = nativeFirst(a, d); | 
|  | // The variable a is still an instance of class A, but dart2js can't infer | 
|  | // that anymore. | 
|  | Expect.equals(42, a.foo()); | 
|  | } |