From c19adc635542004d2c2cdac55b447e7175391bf8 Mon Sep 17 00:00:00 2001 From: Alexander Markov Date: Wed, 16 Oct 2019 21:07:26 +0000 Subject: [PATCH] [vm,aot] Fix handling of exported extensions in TFA tree shaker Fixes https://github.com/flutter/flutter/issues/42845 Change-Id: If4734c16a46f74547f9fc92e4d4e26a969a9f809 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/121861 Reviewed-by: Ryan Macnak Commit-Queue: Alexander Markov --- .../type_flow/transformer.dart | 2 ++ .../vm/regress_flutter_42845_lib.dart | 12 ++++++++++++ .../vm/regress_flutter_42845_test.dart | 19 +++++++++++++++++++ 3 files changed, 33 insertions(+) create mode 100644 tests/language_2/vm/regress_flutter_42845_lib.dart create mode 100644 tests/language_2/vm/regress_flutter_42845_test.dart diff --git a/pkg/vm/lib/transformations/type_flow/transformer.dart b/pkg/vm/lib/transformations/type_flow/transformer.dart index f634d264b0b..bde9684bd6d 100644 --- a/pkg/vm/lib/transformations/type_flow/transformer.dart +++ b/pkg/vm/lib/transformations/type_flow/transformer.dart @@ -929,6 +929,8 @@ class _TreeShakerPass2 extends Transformer { return !shaker.isClassUsed(node); } else if (node is Typedef) { return !shaker.isTypedefUsed(node); + } else if (node is Extension) { + return !shaker.isExtensionUsed(node); } else { return !shaker.isMemberUsed(node as Member); } diff --git a/tests/language_2/vm/regress_flutter_42845_lib.dart b/tests/language_2/vm/regress_flutter_42845_lib.dart new file mode 100644 index 00000000000..f22d8322b77 --- /dev/null +++ b/tests/language_2/vm/regress_flutter_42845_lib.dart @@ -0,0 +1,12 @@ +// 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. + +extension TestExtension on int { + bool get isPositive => this > 0; + bool get isNegative => this < 0; +} + +extension UnusedExtension on int { + bool get isReallyZero => this == 0; +} diff --git a/tests/language_2/vm/regress_flutter_42845_test.dart b/tests/language_2/vm/regress_flutter_42845_test.dart new file mode 100644 index 00000000000..ac05e97211c --- /dev/null +++ b/tests/language_2/vm/regress_flutter_42845_test.dart @@ -0,0 +1,19 @@ +// 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. + +// SharedOptions=--enable-experiment=extension-methods + +// Tests exported extensions. + +import "regress_flutter_42845_lib.dart"; +export "regress_flutter_42845_lib.dart" show TestExtension, UnusedExtension; + +import "package:expect/expect.dart"; + +int i = 42; + +void main() { + Expect.isTrue(i.isPositive); + Expect.isFalse(i.isNegative); +}