// 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 "package:expect/expect.dart"; String toplevel = 'A'; class Foo { String x = 'x'; easy(z) { return x + y + z; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } // Shadow the 'y' field in various ways shadow_y_parameter(y) { return x + this.y + y; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } shadow_y_local(z) { var y = z; return x + this.y + y; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } shadow_y_capturedLocal(z) { var y = z; foo() { return x + this.y + y; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } return foo(); } shadow_y_closureParam(z) { foo(y) { return x + this.y + y; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } return foo(z); } shadow_y_localInsideClosure(z) { foo() { var y = z; return x + this.y + y; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } return foo(); } // Shadow the 'x' field in various ways shadow_x_parameter(x) { return this.x + y + x; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } shadow_x_local(z) { var x = z; return this.x + y + x; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } shadow_x_capturedLocal(z) { var x = z; foo() { return this.x + y + x; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } return foo(); } shadow_x_closureParam(z) { foo(x) { return this.x + y + x; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } return foo(z); } shadow_x_localInsideClosure(z) { foo() { var x = z; return this.x + y + x; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_IDENTIFIER // [cfe] The getter 'y' isn't defined for the class 'Foo'. } return foo(); } shadow_x_toplevel() { return x + this.y + toplevel + this.toplevel; // ^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER // [cfe] The getter 'y' isn't defined for the class 'Foo'. // ^^^^^^^^ // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_GETTER // [cfe] The getter 'toplevel' isn't defined for the class 'Foo'. } } class Sub extends Foo { String y = 'y'; String toplevel = 'B'; } main() { Expect.equals('xyz', new Sub().easy('z')); Expect.equals('xyz', new Sub().shadow_y_parameter('z')); Expect.equals('xyz', new Sub().shadow_y_local('z')); Expect.equals('xyz', new Sub().shadow_y_capturedLocal('z')); Expect.equals('xyz', new Sub().shadow_y_closureParam('z')); Expect.equals('xyz', new Sub().shadow_y_localInsideClosure('z')); Expect.equals('xyz', new Sub().shadow_x_parameter('z')); Expect.equals('xyz', new Sub().shadow_x_local('z')); Expect.equals('xyz', new Sub().shadow_x_capturedLocal('z')); Expect.equals('xyz', new Sub().shadow_x_closureParam('z')); Expect.equals('xyz', new Sub().shadow_x_localInsideClosure('z')); Expect.equals('xyAB', new Sub().shadow_x_toplevel()); }