Version 2.10.0-84.0.dev

Merge commit 'd511a851261028cbbc2794895b150bad77cc635b' into 'dev'
diff --git a/DEPS b/DEPS
index 94c47ce..f84b666 100644
--- a/DEPS
+++ b/DEPS
@@ -79,7 +79,7 @@
   "collection_rev": "583693680fc067e34ca5b72503df25e8b80579f9",
   "convert_rev": "c1b01f832835d3d8a06b0b246a361c0eaab35d3c",
   "crypto_rev": "f7c48b334b1386bc5ab0f706fbcd6df8496a87fc",
-  "csslib_rev": "166d3e07eabc8283c6137cfde17fb25b8bb40080",
+  "csslib_rev": "681a6603f86bbbe64e8af42d722aef63b028d241",
   "dart2js_info_rev" : "0632a623b08e1f601c7eba99e0186a581ae799e9",
 
   # Note: Updates to dart_style have to be coordinated with the infrastructure
diff --git a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
index f83015d..c695b73 100644
--- a/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
+++ b/pkg/analysis_server/lib/src/services/correction/bulk_fix_processor.dart
@@ -18,6 +18,7 @@
 import 'package:analysis_server/src/services/correction/dart/convert_to_contains.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_generic_function_syntax.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_if_null.dart';
+import 'package:analysis_server/src/services/correction/dart/convert_to_int_literal.dart';
 import 'package:analysis_server/src/services/correction/dart/convert_to_where_type.dart';
 import 'package:analysis_server/src/services/correction/dart/create_method.dart';
 import 'package:analysis_server/src/services/correction/dart/make_final.dart';
@@ -94,6 +95,7 @@
     LintNames.prefer_if_elements_to_conditional_expressions:
         ConvertConditionalExpressionToIfElement.newInstance,
     LintNames.prefer_if_null_operators: ConvertToIfNull.newInstance,
+    LintNames.prefer_int_literals: ConvertToIntLiteral.newInstance,
     LintNames.prefer_is_empty: ReplaceWithIsEmpty.newInstance,
     LintNames.prefer_is_not_empty: UesIsNotEmpty.newInstance,
     LintNames.prefer_iterable_whereType: ConvertToWhereType.newInstance,
diff --git a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_manager.dart b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_manager.dart
index a4a3f55..52cecbb 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_manager.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix/data_driven/transform_set_manager.dart
@@ -14,7 +14,7 @@
   static final TransformSetManager instance = TransformSetManager._();
 
   /// The name of the data file.
-  static const String _dataFileName = 'fix_data.yaml';
+  static const String dataFileName = 'fix_data.yaml';
 
   /// Initialize a newly created transform set manager.
   TransformSetManager._();
@@ -28,7 +28,7 @@
     var packageMap = package.packagesAvailableTo(libraryPath);
     for (var entry in packageMap.entries) {
       var directory = entry.value[0];
-      var file = directory.getChildAssumingFile(_dataFileName);
+      var file = directory.getChildAssumingFile(dataFileName);
       var transformSet = _loadTransformSet(file);
       if (transformSet != null) {
         transformSets.add(transformSet);
diff --git a/pkg/analysis_server/lib/src/services/correction/util.dart b/pkg/analysis_server/lib/src/services/correction/util.dart
index 2a65443..cbd971b 100644
--- a/pkg/analysis_server/lib/src/services/correction/util.dart
+++ b/pkg/analysis_server/lib/src/services/correction/util.dart
@@ -212,6 +212,14 @@
       kind == ElementKind.FIELD ||
       kind == ElementKind.METHOD) {
     return '${element.enclosingElement.displayName}.${element.displayName}';
+  } else if (kind == ElementKind.LIBRARY) {
+    // Libraries may not have names, so use a path relative to the context root.
+    final session = element.session;
+    final pathContext = session.resourceProvider.pathContext;
+    final rootPath = session.analysisContext.contextRoot.root.path;
+    final library = element as LibraryElement;
+
+    return pathContext.relative(library.source.fullName, from: rootPath);
   } else {
     return element.displayName;
   }
diff --git a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
index b6dacb9..dec50cc 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_class_member_test.dart
@@ -151,7 +151,7 @@
   }
 
   Future<void>
-      test_checkFinalConditions_publicToPrivate_usedInOtherLibrary() async {
+      test_checkFinalConditions_publicToPrivate_usedInNamedLibrary() async {
     await indexTestUnit('''
 class A {
   test() {}
@@ -170,7 +170,31 @@
     refactoring.newName = '_newName';
     var status = await refactoring.checkFinalConditions();
     assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
-        expectedMessage: "Renamed method will be invisible in 'my.lib'.");
+        expectedMessage:
+            "Renamed method will be invisible in '${convertPath("lib/lib.dart")}'.");
+  }
+
+  Future<void>
+      test_checkFinalConditions_publicToPrivate_usedInUnnamedLibrary() async {
+    await indexTestUnit('''
+class A {
+  var foo = 1;
+}
+''');
+    await indexUnit('/home/test/lib/lib.dart', '''
+import 'test.dart';
+
+main(A a) {
+  print(a.foo);
+}
+''');
+    createRenameRefactoringAtString('foo');
+    // check status
+    refactoring.newName = '_newName';
+    var status = await refactoring.checkFinalConditions();
+    assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
+        expectedMessage:
+            "Renamed field will be invisible in '${convertPath("lib/lib.dart")}'.");
   }
 
   Future<void>
diff --git a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
index 5ddd748..0e64120 100644
--- a/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
+++ b/pkg/analysis_server/test/services/refactoring/rename_unit_member_test.dart
@@ -84,7 +84,8 @@
     refactoring.newName = '_NewName';
     var status = await refactoring.checkFinalConditions();
     assertRefactoringStatus(status, RefactoringProblemSeverity.ERROR,
-        expectedMessage: "Renamed class will be invisible in 'my.lib'.");
+        expectedMessage:
+            "Renamed class will be invisible in '${convertPath("lib/lib.dart")}'.");
   }
 
   Future<void> test_checkFinalConditions_shadowedBy_MethodElement() async {
diff --git a/pkg/analysis_server/test/src/services/correction/fix/bulk/convert_to_int_literal_test.dart b/pkg/analysis_server/test/src/services/correction/fix/bulk/convert_to_int_literal_test.dart
new file mode 100644
index 0000000..a86f1f6
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/bulk/convert_to_int_literal_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2020, 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:analysis_server/src/services/linter/lint_names.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'bulk_fix_processor.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(ConvertToIntLiteralTest);
+  });
+}
+
+@reflectiveTest
+class ConvertToIntLiteralTest extends BulkFixProcessorTest {
+  @override
+  String get lintCode => LintNames.prefer_int_literals;
+
+  Future<void> test_singleFile() async {
+    await resolveTestUnit('''
+const double d1 = 42.0;
+double d2 = 7.0e2;
+''');
+    await assertHasFix('''
+const double d1 = 42;
+double d2 = 700;
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart
index 077f112..8b3aa1e 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/bulk/test_all.dart
@@ -15,6 +15,7 @@
     as convert_to_generic_function_syntax;
 import 'convert_to_if_element_test.dart' as convert_to_if_element;
 import 'convert_to_if_null_test.dart' as convert_to_if_null;
+import 'convert_to_int_literal_test.dart' as convert_to_int_literal;
 import 'convert_to_single_quoted_strings_test.dart'
     as convert_to_single_quoted_strings;
 import 'convert_to_spread_test.dart' as convert_to_spread;
@@ -58,6 +59,7 @@
     convert_to_generic_function_syntax.main();
     convert_to_if_element.main();
     convert_to_if_null.main();
+    convert_to_int_literal.main();
     convert_to_single_quoted_strings.main();
     convert_to_spread.main();
     convert_to_where_type.main();
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
index 6aaca00..4e48e50 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/data_driven_test_support.dart
@@ -6,6 +6,9 @@
 import 'package:analysis_server/src/services/correction/fix.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set.dart';
+import 'package:analysis_server/src/services/correction/fix/data_driven/transform_set_manager.dart';
+import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/dart/error/hint_codes.dart';
 import 'package:analyzer_plugin/utilities/fixes/fixes.dart';
 
 import '../fix_processor.dart';
@@ -19,6 +22,17 @@
   @override
   FixKind get kind => DartFixKind.DATA_DRIVEN;
 
+  /// Add the file containing the data used by the data-driven fix with the
+  /// given [content].
+  void addPackageDataFile(String content) {
+    addPackageFile('p', TransformSetManager.dataFileName, content);
+  }
+
+  /// A method that can be used as an error filter to ignore any unused_import
+  /// diagnostics.
+  bool ignoreUnusedImport(AnalysisError error) =>
+      error.errorCode != HintCode.UNUSED_IMPORT;
+
   /// Set the content of the library that defines the element referenced by the
   /// data on which this test is based.
   void setPackageContent(String content) {
@@ -31,4 +45,10 @@
       TransformSet()..addTransform(transform)
     ];
   }
+
+  @override
+  void tearDown() {
+    DataDriven.transformSetsForTests = null;
+    super.tearDown();
+  }
 }
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/end_to_end_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/end_to_end_test.dart
new file mode 100644
index 0000000..e483534
--- /dev/null
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/end_to_end_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2020, 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:test_reflective_loader/test_reflective_loader.dart';
+
+import 'data_driven_test_support.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(EndToEndTest);
+  });
+}
+
+@reflectiveTest
+class EndToEndTest extends DataDrivenFixProcessorTest {
+  Future<void> test_rename() async {
+    setPackageContent('''
+class New {}
+''');
+    addPackageDataFile('''
+version: 1
+transforms:
+- title: 'Rename to New'
+  element:
+    uris:
+      - '$importUri'
+    components:
+      - 'Old'
+  changes:
+    - kind: 'rename'
+      newName: 'New'
+''');
+    await resolveTestUnit('''
+import '$importUri';
+
+void f(Old o) {}
+''');
+    await assertHasFix('''
+import '$importUri';
+
+void f(New o) {}
+''', errorFilter: ignoreUnusedImport);
+  }
+}
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/rename_test.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/rename_test.dart
index cd29b71..466f678 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/rename_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/rename_test.dart
@@ -5,8 +5,6 @@
 import 'package:analysis_server/src/services/correction/fix/data_driven/element_descriptor.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/rename.dart';
 import 'package:analysis_server/src/services/correction/fix/data_driven/transform.dart';
-import 'package:analyzer/error/error.dart';
-import 'package:analyzer/src/dart/error/hint_codes.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'data_driven_test_support.dart';
@@ -532,7 +530,7 @@
 import '$importUri';
 
 class C extends New {}
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 }
 
@@ -552,7 +550,7 @@
 import '$importUri';
 
 class C implements New {}
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 }
 
@@ -572,7 +570,7 @@
 import '$importUri';
 
 class C with New {}
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 
   Future<void> test_mixin_reference_inWith() async {
@@ -589,7 +587,7 @@
 import '$importUri';
 
 class C with New {}
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 }
 
@@ -637,7 +635,7 @@
 import '$importUri';
 
 extension E on New {}
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 
   Future<void> test_class_reference_inTypeAnnotation() async {
@@ -654,7 +652,7 @@
 import '$importUri';
 
 void f(New o) {}
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 
   Future<void> test_typedef_reference() async {
@@ -671,7 +669,7 @@
 import '$importUri';
 
 void f(New o) {}
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 }
 
@@ -697,7 +695,7 @@
 void f() {
   New();
 }
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 
   Future<void> test_extension_reference_override() async {
@@ -716,7 +714,7 @@
 import '$importUri';
 
 var l = New('a').double;
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 
   Future<void> test_field_instance_reference() async {
@@ -760,7 +758,7 @@
 void f() {
   new();
 }
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 }
 
@@ -793,7 +791,6 @@
 @reflectiveTest
 class Rename_UndefinedIdentifierTest extends _AbstractRenameTest {
   Future<void> test_class_reference_staticField() async {
-    // CompileTimeErrorCode.UNDEFINED_IDENTIFIER
     setPackageContent('''
 class New {
   static String empty = '';
@@ -809,7 +806,7 @@
 import '$importUri';
 
 var s = New.empty;
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 
   Future<void> test_extension_reference_staticField() async {
@@ -828,7 +825,7 @@
 import '$importUri';
 
 var s = New.empty;
-''', errorFilter: _ignoreUnusedImport);
+''', errorFilter: ignoreUnusedImport);
   }
 }
 
@@ -931,9 +928,6 @@
 }
 
 class _AbstractRenameTest extends DataDrivenFixProcessorTest {
-  bool _ignoreUnusedImport(AnalysisError error) =>
-      error.errorCode != HintCode.UNUSED_IMPORT;
-
   Transform _rename(List<String> components, String newName) => Transform(
           title: 'title',
           element: ElementDescriptor(
diff --git a/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart b/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart
index aeb109f..6b9b51a 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/data_driven/test_all.dart
@@ -6,6 +6,7 @@
 
 import 'add_type_parameter_test.dart' as add_type_parameter_change;
 import 'diagnostics/test_all.dart' as diagnostics;
+import 'end_to_end_test.dart' as end_to_end;
 import 'modify_parameters_test.dart' as modify_parameters;
 import 'rename_test.dart' as rename_change;
 import 'transform_set_manager_test.dart' as transform_set_manager;
@@ -15,6 +16,7 @@
   defineReflectiveSuite(() {
     add_type_parameter_change.main();
     diagnostics.main();
+    end_to_end.main();
     modify_parameters.main();
     rename_change.main();
     transform_set_manager.main();
diff --git a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
index 669d189..fe41371 100644
--- a/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/binary_expression_resolver.dart
@@ -136,13 +136,18 @@
     left = node.leftOperand;
 
     var flow = _flowAnalysis?.flow;
-    flow?.equalityOp_rightBegin(left, left.staticType);
+    var leftExtensionOverride = left is ExtensionOverride;
+    if (!leftExtensionOverride) {
+      flow?.equalityOp_rightBegin(left, left.staticType);
+    }
 
     var right = node.rightOperand;
     right.accept(_resolver);
     right = node.rightOperand;
 
-    flow?.equalityOp_end(node, right, right.staticType, notEqual: notEqual);
+    if (!leftExtensionOverride) {
+      flow?.equalityOp_end(node, right, right.staticType, notEqual: notEqual);
+    }
 
     _resolveUserDefinableElement(
       node,
diff --git a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
index 10c2bac..38ca656 100644
--- a/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/binary_expression_test.dart
@@ -39,6 +39,24 @@
     );
   }
 
+  test_bangEq_extensionOverride_left() async {
+    await assertErrorsInCode(r'''
+extension E on int {}
+
+void f(int a) {
+  E(a) != 0;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR, 46, 2),
+    ]);
+
+    assertBinaryExpression(
+      findNode.binary('!= 0'),
+      element: null,
+      type: 'dynamic',
+    );
+  }
+
   test_eqEq() async {
     await assertNoErrorsInCode(r'''
 f(int a, int b) {
@@ -56,6 +74,24 @@
     );
   }
 
+  test_eqEq_extensionOverride_left() async {
+    await assertErrorsInCode(r'''
+extension E on int {}
+
+void f(int a) {
+  E(a) == 0;
+}
+''', [
+      error(CompileTimeErrorCode.UNDEFINED_EXTENSION_OPERATOR, 46, 2),
+    ]);
+
+    assertBinaryExpression(
+      findNode.binary('== 0'),
+      element: null,
+      type: 'dynamic',
+    );
+  }
+
   test_eqEqEq() async {
     await assertErrorsInCode(r'''
 f(int a, int b) {
diff --git a/runtime/vm/image_snapshot.cc b/runtime/vm/image_snapshot.cc
index cb2ef41..7c8ba6a 100644
--- a/runtime/vm/image_snapshot.cc
+++ b/runtime/vm/image_snapshot.cc
@@ -334,6 +334,7 @@
       cls ^= owner.raw();
       name = cls.ScrubbedName();
       lib = cls.library();
+      url = lib.url();
       js.PrintPropertyStr("l", url);
       js.PrintPropertyStr("c", name);
     }
diff --git a/runtime/vm/raw_object.h b/runtime/vm/raw_object.h
index dcd7f99..39e0254 100644
--- a/runtime/vm/raw_object.h
+++ b/runtime/vm/raw_object.h
@@ -2143,15 +2143,16 @@
 
   VISIT_FROM(ObjectPtr, name_)
   StringPtr name_;       // Library prefix name.
-  LibraryPtr importer_;  // Library which declares this prefix.
   ArrayPtr imports_;     // Libraries imported with this prefix.
-  VISIT_TO(ObjectPtr, imports_)
+  LibraryPtr importer_;  // Library which declares this prefix.
+  VISIT_TO(ObjectPtr, importer_)
   ObjectPtr* to_snapshot(Snapshot::Kind kind) {
     switch (kind) {
-      case Snapshot::kFull:
-      case Snapshot::kFullJIT:
       case Snapshot::kFullAOT:
         return reinterpret_cast<ObjectPtr*>(&imports_);
+      case Snapshot::kFull:
+      case Snapshot::kFullJIT:
+        return reinterpret_cast<ObjectPtr*>(&importer_);
       case Snapshot::kMessage:
       case Snapshot::kNone:
       case Snapshot::kInvalid:
diff --git a/tests/language/deferred/prefix_importer_tree_shaken_deferred.dart b/tests/language/deferred/prefix_importer_tree_shaken_deferred.dart
new file mode 100644
index 0000000..4bf00ef
--- /dev/null
+++ b/tests/language/deferred/prefix_importer_tree_shaken_deferred.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2020, 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.
+
+@pragma("vm:never-inline")
+bar() {
+  return "bar";
+}
diff --git a/tests/language/deferred/prefix_importer_tree_shaken_immediate.dart b/tests/language/deferred/prefix_importer_tree_shaken_immediate.dart
new file mode 100644
index 0000000..c85a5b7
--- /dev/null
+++ b/tests/language/deferred/prefix_importer_tree_shaken_immediate.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2020, 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 "prefix_importer_tree_shaken_deferred.dart" deferred as d;
+
+@pragma("vm:prefer-inline")
+load() => d.loadLibrary();
+
+@pragma("vm:prefer-inline")
+foo() => d.bar();
diff --git a/tests/language/deferred/prefix_importer_tree_shaken_test.dart b/tests/language/deferred/prefix_importer_tree_shaken_test.dart
new file mode 100644
index 0000000..ccb0246
--- /dev/null
+++ b/tests/language/deferred/prefix_importer_tree_shaken_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2020, 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.
+
+/// VMOptions=--dwarf_stack_traces=true
+/// VMOptions=--dwarf_stack_traces=false
+
+import "prefix_importer_tree_shaken_immediate.dart" as i;
+
+main() async {
+  await i.load();
+  print(await i.foo());
+}
diff --git a/tests/language_2/deferred/prefix_importer_tree_shaken_deferred.dart b/tests/language_2/deferred/prefix_importer_tree_shaken_deferred.dart
new file mode 100644
index 0000000..4bf00ef
--- /dev/null
+++ b/tests/language_2/deferred/prefix_importer_tree_shaken_deferred.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2020, 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.
+
+@pragma("vm:never-inline")
+bar() {
+  return "bar";
+}
diff --git a/tests/language_2/deferred/prefix_importer_tree_shaken_immediate.dart b/tests/language_2/deferred/prefix_importer_tree_shaken_immediate.dart
new file mode 100644
index 0000000..c85a5b7
--- /dev/null
+++ b/tests/language_2/deferred/prefix_importer_tree_shaken_immediate.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2020, 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 "prefix_importer_tree_shaken_deferred.dart" deferred as d;
+
+@pragma("vm:prefer-inline")
+load() => d.loadLibrary();
+
+@pragma("vm:prefer-inline")
+foo() => d.bar();
diff --git a/tests/language_2/deferred/prefix_importer_tree_shaken_test.dart b/tests/language_2/deferred/prefix_importer_tree_shaken_test.dart
new file mode 100644
index 0000000..ccb0246
--- /dev/null
+++ b/tests/language_2/deferred/prefix_importer_tree_shaken_test.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2020, 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.
+
+/// VMOptions=--dwarf_stack_traces=true
+/// VMOptions=--dwarf_stack_traces=false
+
+import "prefix_importer_tree_shaken_immediate.dart" as i;
+
+main() async {
+  await i.load();
+  print(await i.foo());
+}
diff --git a/tools/VERSION b/tools/VERSION
index 72296d4..ef50155 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 10
 PATCH 0
-PRERELEASE 83
+PRERELEASE 84
 PRERELEASE_PATCH 0
\ No newline at end of file