553ac951b3
Change-Id: I5d4c0b4d15a05cfc30d87003785ca841c46b1a0f Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/426583 Reviewed-by: Stephen Adams <sra@google.com>
136 lines
4.6 KiB
Dart
136 lines
4.6 KiB
Dart
// Copyright (c) 2017, 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.
|
|
|
|
/*member: main:[null|powerset={null}]*/
|
|
main() {
|
|
thisExact();
|
|
thisSubclass();
|
|
thisSubclassExact();
|
|
thisSubtype();
|
|
thisSubtypeExact();
|
|
thisSubtypeMixedIn();
|
|
thisSubtypeExactMixedIn();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// Return `this` of a class with no subclasses.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class1.:[exact=Class1|powerset={N}{O}{N}]*/
|
|
class Class1 {
|
|
/*member: Class1.method:[exact=Class1|powerset={N}{O}{N}]*/
|
|
method() => this;
|
|
}
|
|
|
|
/*member: thisExact:[exact=Class1|powerset={N}{O}{N}]*/
|
|
thisExact() => Class1(). /*invoke: [exact=Class1|powerset={N}{O}{N}]*/ method();
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// Return `this` of a class with an instantiated subclass.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class2a.:[exact=Class2a|powerset={N}{O}{N}]*/
|
|
class Class2a {
|
|
/*member: Class2a.method:[subclass=Class2a|powerset={N}{O}{N}]*/
|
|
method() => this;
|
|
}
|
|
|
|
/*member: Class2b.:[exact=Class2b|powerset={N}{O}{N}]*/
|
|
class Class2b extends Class2a {}
|
|
|
|
/*member: thisSubclass:[subclass=Class2a|powerset={N}{O}{N}]*/
|
|
thisSubclass() {
|
|
Class2b();
|
|
return Class2a(). /*invoke: [exact=Class2a|powerset={N}{O}{N}]*/ method();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// Return `this` of a class with no instantiated subclasses.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class3a.:[exact=Class3a|powerset={N}{O}{N}]*/
|
|
class Class3a {
|
|
/*member: Class3a.method:[exact=Class3a|powerset={N}{O}{N}]*/
|
|
method() => this;
|
|
}
|
|
|
|
class Class3b extends Class3a {}
|
|
|
|
/*member: thisSubclassExact:[exact=Class3a|powerset={N}{O}{N}]*/
|
|
thisSubclassExact() {
|
|
return Class3a(). /*invoke: [exact=Class3a|powerset={N}{O}{N}]*/ method();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// Return `this` of a class that is mixed into an instantiated class.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class4a.:[exact=Class4a|powerset={N}{O}{N}]*/
|
|
mixin class Class4a {
|
|
/*member: Class4a.method:[subtype=Class4a|powerset={N}{O}{N}]*/
|
|
method() => this;
|
|
}
|
|
|
|
/*member: Class4b.:[exact=Class4b|powerset={N}{O}{N}]*/
|
|
class Class4b extends Object with Class4a {}
|
|
|
|
/*member: thisSubtype:[subtype=Class4a|powerset={N}{O}{N}]*/
|
|
thisSubtype() {
|
|
Class4b();
|
|
return Class4a(). /*invoke: [exact=Class4a|powerset={N}{O}{N}]*/ method();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// Return `this` of a class that is mixed into an uninstantiated class.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class5a.:[exact=Class5a|powerset={N}{O}{N}]*/
|
|
mixin class Class5a {
|
|
/*member: Class5a.method:[exact=Class5a|powerset={N}{O}{N}]*/
|
|
method() => this;
|
|
}
|
|
|
|
class Class5b extends Object with Class5a {}
|
|
|
|
/*member: thisSubtypeExact:[exact=Class5a|powerset={N}{O}{N}]*/
|
|
thisSubtypeExact() {
|
|
return Class5a(). /*invoke: [exact=Class5a|powerset={N}{O}{N}]*/ method();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// Return `this` of a mixed in class that is itself instantiated.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
/*member: Class6a.:[exact=Class6a|powerset={N}{O}{N}]*/
|
|
mixin class Class6a {
|
|
/*member: Class6a.method:[subtype=Class6a|powerset={N}{O}{N}]*/
|
|
method() => this;
|
|
}
|
|
|
|
/*member: Class6b.:[exact=Class6b|powerset={N}{O}{N}]*/
|
|
class Class6b extends Object with Class6a {}
|
|
|
|
/*member: thisSubtypeMixedIn:[subtype=Class6a|powerset={N}{O}{N}]*/
|
|
thisSubtypeMixedIn() {
|
|
Class6a();
|
|
return Class6b(). /*invoke: [exact=Class6b|powerset={N}{O}{N}]*/ method();
|
|
}
|
|
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
/// Return `this` of a mixed in class that is itself uninstantiated.
|
|
////////////////////////////////////////////////////////////////////////////////
|
|
|
|
mixin Class7a {
|
|
/*member: Class7a.method:[exact=Class7b|powerset={N}{O}{N}]*/
|
|
method() => this;
|
|
}
|
|
|
|
/*member: Class7b.:[exact=Class7b|powerset={N}{O}{N}]*/
|
|
class Class7b extends Object with Class7a {}
|
|
|
|
/*member: thisSubtypeExactMixedIn:[exact=Class7b|powerset={N}{O}{N}]*/
|
|
thisSubtypeExactMixedIn() {
|
|
return Class7b(). /*invoke: [exact=Class7b|powerset={N}{O}{N}]*/ method();
|
|
}
|