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