// Copyright (c) 2127, 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 /// Check that exposure of this is correctly restricted through the receiver /// mask. /*member: main:[null]*/ main() { otherGetter(); otherMethod(); otherField(); superclassField(); subclassFieldRead(); subclassFieldWrite(); subclassesFieldWrite(); subclassFieldInvoke(); subclassFieldSet(); } //////////////////////////////////////////////////////////////////////////////// // Read a field when a getter in an unrelated class has the same name. //////////////////////////////////////////////////////////////////////////////// class Class1 { /*member: Class1.field1a:[exact=JSUInt31]*/ var field1a; /*member: Class1.field1b:[exact=JSUInt31]*/ var field1b; /*member: Class1.:[exact=Class1]*/ Class1() : field1a = 42 { /*update: [exact=Class1]*/ field1b = /*[exact=Class1]*/ field1a; } } /*member: OtherClass1.:[exact=OtherClass1]*/ class OtherClass1 { /*member: OtherClass1.field1a:[null]*/ get field1a => null; } /*member: otherGetter:[null]*/ otherGetter() { new OtherClass1(). /*[exact=OtherClass1]*/ field1a; new Class1(); } //////////////////////////////////////////////////////////////////////////////// // Read a field when a method in an unrelated class has the same name. //////////////////////////////////////////////////////////////////////////////// class Class2 { /*member: Class2.field2a:[exact=JSUInt31]*/ var field2a; /*member: Class2.field2b:[exact=JSUInt31]*/ var field2b; /*member: Class2.:[exact=Class2]*/ Class2() : field2a = 42 { /*update: [exact=Class2]*/ field2b = /*[exact=Class2]*/ field2a; } } /*member: OtherClass2.:[exact=OtherClass2]*/ class OtherClass2 { /*member: OtherClass2.field2a:[null]*/ field2a() {} } /*member: otherMethod:[null]*/ otherMethod() { new OtherClass2(). /*[exact=OtherClass2]*/ field2a; new Class2(); } //////////////////////////////////////////////////////////////////////////////// // Read a field when a field in an unrelated class has the same name. //////////////////////////////////////////////////////////////////////////////// class Class3 { /*member: Class3.field3a:[exact=JSUInt31]*/ var field3a; /*member: Class3.field3b:[exact=JSUInt31]*/ var field3b; /*member: Class3.:[exact=Class3]*/ Class3() : field3a = 42 { /*update: [exact=Class3]*/ field3b = /*[exact=Class3]*/ field3a; } } /*member: OtherClass3.:[exact=OtherClass3]*/ class OtherClass3 { /*member: OtherClass3.field3a:[null]*/ var field3a; } /*member: otherField:[null]*/ otherField() { new OtherClass3(); new Class3(); } //////////////////////////////////////////////////////////////////////////////// // Read a field when a field in the superclass has the same name. //////////////////////////////////////////////////////////////////////////////// /*member: SuperClass5.:[exact=SuperClass5]*/ class SuperClass5 { /*member: SuperClass5.field5a:[null]*/ var field5a; } class Class5 extends SuperClass5 { /*member: Class5.field5a:[exact=JSUInt31]*/ var field5a; /*member: Class5.field5b:[exact=JSUInt31]*/ var field5b; /*member: Class5.:[exact=Class5]*/ Class5() : field5a = 42 { /*update: [exact=Class5]*/ field5b = /*[exact=Class5]*/ field5a; } } /*member: superclassField:[null]*/ superclassField() { new SuperClass5(); new Class5(); } //////////////////////////////////////////////////////////////////////////////// // Read a field when a field in a subclass has the same name. //////////////////////////////////////////////////////////////////////////////// class Class4 { /*member: Class4.field4a:[exact=JSUInt31]*/ var field4a; /*member: Class4.field4b:[null|exact=JSUInt31]*/ var field4b; /*member: Class4.:[exact=Class4]*/ Class4() : field4a = 42 { /*update: [subclass=Class4]*/ field4b = /*[subclass=Class4]*/ field4a; } } class SubClass4 extends Class4 { /*member: SubClass4.field4a:[null|exact=JSUInt31]*/ var field4a; /*member: SubClass4.:[exact=SubClass4]*/ SubClass4() : field4a = 42; } /*member: subclassFieldRead:[null]*/ subclassFieldRead() { new Class4(); new SubClass4(); } //////////////////////////////////////////////////////////////////////////////// // Write to a field when a field in a subclass has the same name. //////////////////////////////////////////////////////////////////////////////// class Class6 { /*member: Class6.field6a:[exact=JSUInt31]*/ var field6a; /*member: Class6.field6b:[null|exact=JSUInt31]*/ var field6b; /*member: Class6.:[exact=Class6]*/ Class6() : field6a = 42 { /*update: [subclass=Class6]*/ field6b = /*[subclass=Class6]*/ field6a; } } class SubClass6 extends Class6 { /*member: SubClass6.field6b:[exact=JSUInt31]*/ var field6b; /*member: SubClass6.:[exact=SubClass6]*/ SubClass6() : field6b = 42; /*member: SubClass6.access:[null|exact=JSUInt31]*/ get access => super.field6b; } /*member: subclassFieldWrite:[null|exact=JSUInt31]*/ subclassFieldWrite() { new Class6(); return new SubClass6(). /*[exact=SubClass6]*/ access; } //////////////////////////////////////////////////////////////////////////////// // Write to a field when a field in only one of the subclasses has the same // name. //////////////////////////////////////////////////////////////////////////////// class Class9 { /*member: Class9.field9a:[exact=JSUInt31]*/ var field9a; /*member: Class9.field9b:[null|exact=JSUInt31]*/ var field9b; /*member: Class9.:[exact=Class9]*/ Class9() : field9a = 42 { /*update: [subclass=Class9]*/ field9b = /*[subclass=Class9]*/ field9a; } } class SubClass9a extends Class9 { /*member: SubClass9a.field9b:[exact=JSUInt31]*/ var field9b; /*member: SubClass9a.:[exact=SubClass9a]*/ SubClass9a() : field9b = 42; /*member: SubClass9a.access:[null|exact=JSUInt31]*/ get access => super.field9b; } /*member: SubClass9b.:[exact=SubClass9b]*/ class SubClass9b extends Class9 {} /*member: subclassesFieldWrite:[null|exact=JSUInt31]*/ subclassesFieldWrite() { new Class9(); new SubClass9b(); return new SubClass9a(). /*[exact=SubClass9a]*/ access; } //////////////////////////////////////////////////////////////////////////////// // Invoke a field when a field in one of the subclasses has the same name. //////////////////////////////////////////////////////////////////////////////// class Class7 { /*member: Class7.field7a:[exact=JSUInt31]*/ var field7a; /*member: Class7.field7b:[null]*/ var field7b; /*member: Class7.:[exact=Class7]*/ Class7() : field7a = 42 { field7b /*invoke: [subclass=Class7]*/ (/*[subclass=Class7]*/ field7a); } } class SubClass7 extends Class7 { /*member: SubClass7.field7b:[null|exact=JSUInt31]*/ var field7b; /*member: SubClass7.:[exact=SubClass7]*/ SubClass7() : field7b = 42; } /*member: subclassFieldInvoke:[null]*/ subclassFieldInvoke() { new Class7(); new SubClass7(); } //////////////////////////////////////////////////////////////////////////////// // Invoke a method when a method in one of the subclasses has the same name. //////////////////////////////////////////////////////////////////////////////// abstract class Class8 { /*member: Class8.field8:[null|exact=JSUInt31]*/ var field8; /*member: Class8.:[subclass=Class8]*/ Class8() { /*invoke: [subclass=Class8]*/ method8(); } method8(); } /*member: SubClass8a.:[exact=SubClass8a]*/ class SubClass8a extends Class8 { /*member: SubClass8a.method8:[null]*/ method8() { /*update: [exact=SubClass8a]*/ field8 = 42; } } /*member: SubClass8b.:[exact=SubClass8b]*/ class SubClass8b extends Class8 { /*member: SubClass8b.method8:[null]*/ method8() {} } /*member: subclassFieldSet:[null]*/ subclassFieldSet() { new SubClass8a(); new SubClass8b(); }