|  | // Copyright (c) 2019, 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.9 | 
|  |  | 
|  | class Foo { | 
|  | int what; | 
|  |  | 
|  | Foo() : what = 0; | 
|  | Foo.publicNamed() : what = 1; | 
|  | Foo._privateNamed() : what = 2; | 
|  |  | 
|  | int publicMethod() { | 
|  | return 42; | 
|  | } | 
|  |  | 
|  | int _privateMethod() { | 
|  | return 43; | 
|  | } | 
|  |  | 
|  | static int publicStaticMethod() { | 
|  | return 44; | 
|  | } | 
|  |  | 
|  | static int _privateStaticMethod() { | 
|  | return 45; | 
|  | } | 
|  |  | 
|  | int publicField = 84; | 
|  | int _privateField = 85; | 
|  | static int publicStaticField = 86; | 
|  | static int _privateStaticField = 87; | 
|  |  | 
|  | int get publicGetter => -1; | 
|  | int get _privateGetter => -2; | 
|  | static int get publicStaticGetter => -3; | 
|  | static int get _privateStaticGetter => -4; | 
|  |  | 
|  | void set publicSetter(int x) {} | 
|  | void set _privateSetter(int x) {} | 
|  | static void set publicStaticSetter(int x) {} | 
|  | static void set _privateStaticSetter(int x) {} | 
|  | } | 
|  |  | 
|  | extension PublicExtension on Foo { | 
|  | int publicPublicExtensionMethod() { | 
|  | return 20; | 
|  | } | 
|  |  | 
|  | int _publicPrivateExtensionMethod() { | 
|  | return 21; | 
|  | } | 
|  |  | 
|  | static int publicPublicStaticExtensionMethod() { | 
|  | return 22; | 
|  | } | 
|  |  | 
|  | static int _publicPrivateStaticExtensionMethod() { | 
|  | return 23; | 
|  | } | 
|  |  | 
|  | static int publicPublicStaticExtensionField = 24; | 
|  | static int _publicPrivateStaticExtensionField = 25; | 
|  |  | 
|  | int get publicPublicExtensionGetter { | 
|  | return 26; | 
|  | } | 
|  |  | 
|  | int get _publicPrivateExtensionGetter { | 
|  | return 27; | 
|  | } | 
|  |  | 
|  | static int get publicPublicStaticExtensionGetter { | 
|  | return 28; | 
|  | } | 
|  |  | 
|  | static int get _publicPrivateStaticExtensionGetter { | 
|  | return 29; | 
|  | } | 
|  |  | 
|  | void set publicPublicExtensionSetter(int x) {} | 
|  |  | 
|  | void set _publicPrivateExtensionSetter(int x) {} | 
|  |  | 
|  | static void set publicPublicStaticExtensionSetter(int x) {} | 
|  |  | 
|  | static void set _publicPrivateStaticExtensionSetter(int x) {} | 
|  | } | 
|  |  | 
|  | extension _PrivateExtension on Foo { | 
|  | int privatePublicExtensionMethod() { | 
|  | return 30; | 
|  | } | 
|  |  | 
|  | int _privatePrivateExtensionMethod() { | 
|  | return 31; | 
|  | } | 
|  |  | 
|  | static int privatePublicStaticExtensionMethod() { | 
|  | return 32; | 
|  | } | 
|  |  | 
|  | static int _privatePrivateStaticExtensionMethod() { | 
|  | return 33; | 
|  | } | 
|  |  | 
|  | static int privatePublicStaticExtensionField = 34; | 
|  | static int _privatePrivateStaticExtensionField = 35; | 
|  |  | 
|  | int get privatePublicExtensionGetter { | 
|  | return 36; | 
|  | } | 
|  |  | 
|  | int get _privatePrivateExtensionGetter { | 
|  | return 37; | 
|  | } | 
|  |  | 
|  | static int get privatePublicStaticExtensionGetter { | 
|  | return 38; | 
|  | } | 
|  |  | 
|  | static int get _privatePrivateStaticExtensionGetter { | 
|  | return 39; | 
|  | } | 
|  |  | 
|  | void set privatePublicExtensionSetter(int x) {} | 
|  |  | 
|  | void set _privatePrivateExtensionSetter(int x) {} | 
|  |  | 
|  | static void set privatePublicStaticExtensionSetter(int x) {} | 
|  |  | 
|  | static void set _privatePrivateStaticExtensionSetter(int x) {} | 
|  | } | 
|  |  | 
|  | int publicTopLevelMethod() { | 
|  | return 50; | 
|  | } | 
|  |  | 
|  | int _privateTopLevelMethod() { | 
|  | return 51; | 
|  | } | 
|  |  | 
|  | int publicTopLevelField = 52; | 
|  | int _privateTopLevelField = 53; | 
|  |  | 
|  | int get publicTopLevelGetter { | 
|  | return 54; | 
|  | } | 
|  |  | 
|  | int get _privateTopLevelGetter { | 
|  | return 55; | 
|  | } | 
|  |  | 
|  | void set publicTopLevelSetter(int x) {} | 
|  |  | 
|  | void set _privateTopLevelSetter(int x) {} | 
|  |  | 
|  | main() { | 
|  | // Class constructors. | 
|  | Foo foo = new Foo(); | 
|  | assert(foo.what == 0); | 
|  | foo = new Foo.publicNamed(); | 
|  | assert(foo.what == 1); | 
|  | foo = new Foo._privateNamed(); | 
|  | assert(foo.what == 2); | 
|  |  | 
|  | // Class methods. | 
|  | assert(foo.publicMethod() == 42); | 
|  | assert(foo._privateMethod() == 43); | 
|  | assert(Foo.publicStaticMethod() == 44); | 
|  | assert(Foo._privateStaticMethod() == 45); | 
|  |  | 
|  | // Class fields. | 
|  | assert(foo.publicField == 84); | 
|  | foo.publicField = -84; | 
|  | assert(foo.publicField == -84); | 
|  | assert(foo._privateField == 85); | 
|  | foo._privateField = -85; | 
|  | assert(foo._privateField == -85); | 
|  | assert(Foo.publicStaticField == 86); | 
|  | Foo.publicStaticField = -86; | 
|  | assert(Foo.publicStaticField == -86); | 
|  | assert(Foo._privateStaticField == 87); | 
|  | Foo._privateStaticField = -87; | 
|  | assert(Foo._privateStaticField == -87); | 
|  |  | 
|  | // Class getters. | 
|  | assert(foo.publicGetter == -1); | 
|  | assert(foo._privateGetter == -2); | 
|  | assert(Foo.publicStaticGetter == -3); | 
|  | assert(Foo._privateStaticGetter == -4); | 
|  |  | 
|  | // Class setters. | 
|  | foo.publicSetter = 42; | 
|  | foo._privateSetter = 42; | 
|  | Foo.publicStaticSetter = 42; | 
|  | Foo._privateStaticSetter = 42; | 
|  |  | 
|  | // Extension methods. | 
|  | assert(foo.publicPublicExtensionMethod() == 20); | 
|  | assert(foo._publicPrivateExtensionMethod() == 21); | 
|  | assert(PublicExtension.publicPublicStaticExtensionMethod() == 22); | 
|  | assert(PublicExtension._publicPrivateStaticExtensionMethod() == 23); | 
|  | assert(foo.privatePublicExtensionMethod() == 30); | 
|  | assert(foo._privatePrivateExtensionMethod() == 31); | 
|  | assert(_PrivateExtension.privatePublicStaticExtensionMethod() == 32); | 
|  | assert(_PrivateExtension._privatePrivateStaticExtensionMethod() == 33); | 
|  |  | 
|  | // Extension fields. | 
|  | assert(PublicExtension.publicPublicStaticExtensionField == 24); | 
|  | PublicExtension.publicPublicStaticExtensionField = -24; | 
|  | assert(PublicExtension.publicPublicStaticExtensionField == -24); | 
|  | assert(PublicExtension._publicPrivateStaticExtensionField == 25); | 
|  | PublicExtension._publicPrivateStaticExtensionField = -25; | 
|  | assert(PublicExtension._publicPrivateStaticExtensionField == -25); | 
|  | assert(_PrivateExtension.privatePublicStaticExtensionField == 34); | 
|  | _PrivateExtension.privatePublicStaticExtensionField = -34; | 
|  | assert(_PrivateExtension.privatePublicStaticExtensionField == -34); | 
|  | assert(_PrivateExtension._privatePrivateStaticExtensionField == 35); | 
|  | _PrivateExtension._privatePrivateStaticExtensionField = -35; | 
|  | assert(_PrivateExtension._privatePrivateStaticExtensionField == -35); | 
|  |  | 
|  | // Extension getters. | 
|  | assert(foo.publicPublicExtensionGetter == 26); | 
|  | assert(foo._publicPrivateExtensionGetter == 27); | 
|  | assert(PublicExtension.publicPublicStaticExtensionGetter == 28); | 
|  | assert(PublicExtension._publicPrivateStaticExtensionGetter == 29); | 
|  | assert(foo.privatePublicExtensionGetter == 36); | 
|  | assert(foo._privatePrivateExtensionGetter == 37); | 
|  | assert(_PrivateExtension.privatePublicStaticExtensionGetter == 38); | 
|  | assert(_PrivateExtension._privatePrivateStaticExtensionGetter == 39); | 
|  |  | 
|  | // Extension setters. | 
|  | foo.publicPublicExtensionSetter = 42; | 
|  | foo._publicPrivateExtensionSetter = 42; | 
|  | PublicExtension.publicPublicStaticExtensionSetter = 42; | 
|  | PublicExtension._publicPrivateStaticExtensionSetter = 42; | 
|  | foo.privatePublicExtensionSetter = 42; | 
|  | foo._privatePrivateExtensionSetter = 42; | 
|  | _PrivateExtension.privatePublicStaticExtensionSetter = 42; | 
|  | _PrivateExtension._privatePrivateStaticExtensionSetter = 42; | 
|  |  | 
|  | // Top-level methods. | 
|  | assert(publicTopLevelMethod() == 50); | 
|  | assert(_privateTopLevelMethod() == 51); | 
|  |  | 
|  | // Top-level fields. | 
|  | assert(publicTopLevelField == 52); | 
|  | publicTopLevelField = -52; | 
|  | assert(publicTopLevelField == -52); | 
|  | assert(_privateTopLevelField == 53); | 
|  | _privateTopLevelField = -53; | 
|  | assert(_privateTopLevelField == -53); | 
|  |  | 
|  | // Top-level getters. | 
|  | assert(publicTopLevelGetter == 54); | 
|  | assert(_privateTopLevelGetter == 55); | 
|  |  | 
|  | // Top-level setters. | 
|  | publicTopLevelSetter = 42; | 
|  | _privateTopLevelSetter = 42; | 
|  | } |