blob: cb5d87f707b4a0b1f4fb9b97d79e25aa6029094a [file] [log] [blame]
// Copyright (c) 2026, 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.
class A {
A a = new A();
A? aNull;
int n = 0;
Object? field;
method() {}
Object? call() => null;
Object? operator[](int index) => null;
void operator[]=(int index, Object? value) {}
A operator+(A other) => this;
A operator-() => this;
notCapturedMethodCall() {
method();
}
notCapturedExpression() {
this;
}
notCapturedPropertyGet() {
field;
}
notCapturedPropertySet() {
field = null;
}
notCapturedCall() {
this();
}
notCapturedIndexGet() {
this[0];
}
notCapturedIndexSet() {
this[0] = null;
}
notCapturedUnary() {
-this;
}
notCapturedBinary() {
this + this;
}
notCapturedPropertyCall() {
a();
}
notCapturedPropertyPrefix() {
++n;
}
notCapturedPropertyPostfix() {
n++;
}
notCapturedPropertyIndexGet() {
a[0];
}
notCapturedPropertyIndexSet() {
a[0] = null;
}
notCapturedPropertyIfNullAssignment() {
aNull ??= new A();
}
notCapturedPropertyCompoundAssignment() {
a += new A();
}
capturedMethodCall() {
return () => method();
}
capturedExpression() {
return () => this;
}
capturedPropertyGet() {
return () => field;
}
capturedPropertySet() {
return () { field = null; };
}
capturedCall() {
return () => this();
}
capturedIndexGet() {
return () => this[0];
}
capturedIndexSet() {
return () { this[0] = null; };
}
capturedUnary() {
return () => -this;
}
capturedBinary() {
return () => this + this;
}
capturedPropertyCall() {
return () => a();
}
capturedPropertyPrefix() {
return () => ++n;
}
capturedPropertyPostfix() {
return () => n++;
}
capturedPropertyIndexGet() {
return () => a[0];
}
capturedPropertyIndexSet() {
return () => (a[0] = null);
}
capturedPropertyIfNullAssignment() {
return () => (aNull ??= new A());
}
capturedPropertyCompoundAssignment() {
return () => (a += new A());
}
}
class B extends A {
@override
notCapturedMethodCall() {
super.method();
}
@override
notCapturedPropertyGet() {
super.field;
}
@override
notCapturedPropertySet() {
super.field = null;
}
@override
notCapturedCall() {
super();
}
@override
notCapturedIndexGet() {
super[0];
}
@override
notCapturedIndexSet() {
super[0] = null;
}
@override
notCapturedUnary() {
-super;
}
@override
notCapturedBinary() {
super + this;
}
@override
notCapturedPropertyCall() {
super.a();
}
@override
notCapturedPropertyPrefix() {
++super.n;
}
@override
notCapturedPropertyPostfix() {
super.n++;
}
@override
notCapturedPropertyIndexGet() {
super.a[0];
}
@override
notCapturedPropertyIndexSet() {
super.a[0] = null;
}
@override
notCapturedPropertyIfNullAssignment() {
super.aNull ??= new A();
}
@override
notCapturedPropertyCompoundAssignment() {
super.a += new A();
}
@override
capturedMethodCall() {
return () => super.method();
}
@override
capturedPropertyGet() {
return () => super.field;
}
@override
capturedPropertySet() {
return () { super.field = null; };
}
@override
capturedCall() {
return () => super();
}
@override
capturedIndexGet() {
return () => super[0];
}
@override
capturedIndexSet() {
return () { super[0] = null; };
}
@override
capturedUnary() {
return () => -super;
}
@override
capturedBinary() {
return () => super + this;
}
@override
capturedPropertyCall() {
return () => super.a();
}
@override
capturedPropertyPrefix() {
return () => ++super.n;
}
@override
capturedPropertyPostfix() {
return () => super.n++;
}
@override
capturedPropertyIndexGet() {
return () => super.a[0];
}
@override
capturedPropertyIndexSet() {
return () => (super.a[0] = null);
}
@override
capturedPropertyIfNullAssignment() {
return () => (super.aNull ??= new A());
}
@override
capturedPropertyCompoundAssignment() {
return () => (super.a += new A());
}
}