Files
sdk/runtime/tests/vm/dart/stacktrace_mixin_application_test.dart
T
Ben Konyi 1219c5e3ab [ VM / Service ] Use the name of the a function's defining mixin instead of the
mixin application to qualify function names in profiler and exception stack traces.

Given:

```
class Foo {
  foo() => "foo";
}

class Bar with Foo {}
```

The stack frame for `foo()` currently displays as `Bar&Foo.foo`. Now,
the stack frame for `foo()` will have the name `Foo.foo`.

Fixes https://github.com/dart-lang/sdk/issues/36999

Change-Id: Ic1c0d00f38725ee088812ff0926eef4f343ebdf1
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/111482
Commit-Queue: Ben Konyi <bkonyi@google.com>
Reviewed-by: Siva Annamalai <asiva@google.com>
Reviewed-by: Ryan Macnak <rmacnak@google.com>
2019-08-15 21:10:47 +00:00

29 lines
850 B
Dart

// 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.
import "package:expect/expect.dart";
mixin Bar {
bar() => throw "bar";
}
mixin Baz {}
class Foo with Baz, Bar {}
main() {
final foo = Foo();
try {
foo.bar();
} catch (e, st) {
final stack = st.toString();
// Check that stack frames for methods defined in a mixin Bar actually show
// only the mixin name rather than some combination of the name of the class
// that mixed in Bar along with other mixin names.
//
// Prior to the fix for issue #36999, this frame would have been named
// Foo&Baz&Bar.bar rather than simply Bar.bar.
Expect.isTrue(stack.contains('#0 Bar.bar'));
}
}