Version 2.14.0-216.0.dev

Merge commit 'a6fbe58644fd0a4b64ca3ce20c4aacbcd4bbb576' into 'dev'
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 5afa05af..c01791f 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -82,7 +82,7 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 155;
+  static const int DATA_VERSION = 156;
 
   /// The number of exception contexts allowed to write. Once this field is
   /// zero, we stop writing any new exception contexts in this process.
diff --git a/pkg/analyzer/lib/src/summary2/bundle_reader.dart b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
index 9133c5f..ab5c7de 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_reader.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_reader.dart
@@ -887,13 +887,13 @@
 
     element.typeParameters = _readTypeParameters();
 
-    var accessors = <PropertyAccessorElement>[];
     var fields = <FieldElement>[];
+    var accessors = <PropertyAccessorElement>[];
+    _readFields(unitElement, element, reference, accessors, fields);
     _readPropertyAccessors(
         unitElement, element, reference, accessors, fields, '@field');
-    _readFields(unitElement, element, reference, accessors, fields);
-    element.accessors = accessors;
     element.fields = fields;
+    element.accessors = accessors;
 
     element.constructors = _readConstructors(unitElement, element, reference);
     element.methods = _readMethods(unitElement, element, reference);
diff --git a/pkg/analyzer/lib/src/summary2/bundle_writer.dart b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
index 96a536b..78d6953 100644
--- a/pkg/analyzer/lib/src/summary2/bundle_writer.dart
+++ b/pkg/analyzer/lib/src/summary2/bundle_writer.dart
@@ -307,13 +307,13 @@
       _resolutionSink._writeTypeList(element.interfaces);
 
       _writeList(
-        element.accessors.where((e) => !e.isSynthetic).toList(),
-        _writePropertyAccessorElement,
-      );
-      _writeList(
         element.fields.where((e) => !e.isSynthetic).toList(),
         _writeFieldElement,
       );
+      _writeList(
+        element.accessors.where((e) => !e.isSynthetic).toList(),
+        _writePropertyAccessorElement,
+      );
       _writeList(element.constructors, _writeConstructorElement);
       _writeList(element.methods, _writeMethodElement);
       _sink._writeStringList(element.superInvokedNames);
diff --git a/pkg/analyzer/lib/src/summary2/element_builder.dart b/pkg/analyzer/lib/src/summary2/element_builder.dart
index 22ef219..e79d895 100644
--- a/pkg/analyzer/lib/src/summary2/element_builder.dart
+++ b/pkg/analyzer/lib/src/summary2/element_builder.dart
@@ -884,7 +884,21 @@
     var holder = _EnclosingContext(element.reference!, element,
         hasConstConstructor: hasConstConstructor);
     _withEnclosing(holder, () {
-      members.accept(this);
+      // When loading from bytes, we read fields first.
+      // There is no particular reason for this - we just have to store
+      // either non-synthetic fields first, or non-synthetic property
+      // accessors first. And we arbitrary decided to store fields first.
+      for (var member in members) {
+        if (member is FieldDeclaration) {
+          member.accept(this);
+        }
+      }
+      // ...then we load non-synthetic accessors.
+      for (var member in members) {
+        if (member is! FieldDeclaration) {
+          member.accept(this);
+        }
+      }
     });
     return holder;
   }
diff --git a/pkg/analyzer/lib/src/summary2/top_level_inference.dart b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
index 8c0f4f3..a9072ab 100644
--- a/pkg/analyzer/lib/src/summary2/top_level_inference.dart
+++ b/pkg/analyzer/lib/src/summary2/top_level_inference.dart
@@ -7,6 +7,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/scope.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/ast/extensions.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -209,17 +210,30 @@
     // Update types of a mixin application constructor formal parameters.
     var baseConstructor = _baseConstructor;
     if (baseConstructor != null) {
+      var constructor = _constructor as ConstructorElementImpl;
       var substitution = Substitution.fromInterfaceType(
         baseConstructor.superType,
       );
       forCorrespondingPairs<ParameterElement, ParameterElement>(
-        _constructor.parameters,
+        constructor.parameters,
         baseConstructor.element.parameters,
         (parameter, baseParameter) {
           var type = substitution.substituteType(baseParameter.type);
           (parameter as ParameterElementImpl).type = type;
         },
       );
+      // Update arguments of `SuperConstructorInvocation` to have the types
+      // (which we have just set) of the corresponding formal parameters.
+      // MixinApp(x, y) : super(x, y);
+      var initializers = constructor.constantInitializers;
+      var initializer = initializers.single as SuperConstructorInvocation;
+      forCorrespondingPairs<ParameterElement, Expression>(
+        constructor.parameters,
+        initializer.argumentList.arguments,
+        (parameter, argument) {
+          (argument as SimpleIdentifierImpl).staticType = parameter.type;
+        },
+      );
     }
 
     isEvaluated = true;
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 4961d3e..3ea7149 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -25696,22 +25696,15 @@
           C
           D
         fields
+          f @101
+            type: T
           synthetic g @-1
             type: U
           synthetic s @-1
             type: int
-          f @101
-            type: T
         constructors
           synthetic @-1
         accessors
-          get g @112
-            returnType: U
-          set s @126
-            parameters
-              requiredPositional v @132
-                type: int
-            returnType: void
           synthetic get f @-1
             returnType: T
           synthetic set f @-1
@@ -25719,6 +25712,13 @@
               requiredPositional _f @-1
                 type: T
             returnType: void
+          get g @112
+            returnType: U
+          set s @126
+            parameters
+              requiredPositional v @132
+                type: int
+            returnType: void
         methods
           m @144
             parameters
diff --git a/pkg/vm_service/CHANGELOG.md b/pkg/vm_service/CHANGELOG.md
index 1613626..4d071d5 100644
--- a/pkg/vm_service/CHANGELOG.md
+++ b/pkg/vm_service/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+## 7.1.1
+- Update to version `3.47` of the spec.
+- Added `shows` and `hides` properties to `LibraryDependency`.
+
 ## 7.1.0
 - Update to version `3.46` of the spec.
 - Move `sourcePosition` properties into `ClassRef`, `FieldRef`, and `FuncRef`.
diff --git a/pkg/vm_service/java/version.properties b/pkg/vm_service/java/version.properties
index 9e3fb90..88bab86 100644
--- a/pkg/vm_service/java/version.properties
+++ b/pkg/vm_service/java/version.properties
@@ -1 +1 @@
-version=3.46
+version=3.47
diff --git a/pkg/vm_service/lib/src/vm_service.dart b/pkg/vm_service/lib/src/vm_service.dart
index a460c69..209f06e 100644
--- a/pkg/vm_service/lib/src/vm_service.dart
+++ b/pkg/vm_service/lib/src/vm_service.dart
@@ -26,7 +26,7 @@
         HeapSnapshotObjectNoData,
         HeapSnapshotObjectNullData;
 
-const String vmServiceVersion = '3.46.0';
+const String vmServiceVersion = '3.47.0';
 
 /// @optional
 const String optional = 'optional';
@@ -5765,11 +5765,21 @@
   /// The library being imported or exported.
   LibraryRef? target;
 
+  /// The list of symbols made visible from this dependency.
+  @optional
+  List<String>? shows;
+
+  /// The list of symbols hidden from this dependency.
+  @optional
+  List<String>? hides;
+
   LibraryDependency({
     required this.isImport,
     required this.isDeferred,
     required this.prefix,
     required this.target,
+    this.shows,
+    this.hides,
   });
 
   LibraryDependency._fromJson(Map<String, dynamic> json) {
@@ -5778,6 +5788,8 @@
     prefix = json['prefix'] ?? '';
     target = createServiceObject(json['target'], const ['LibraryRef'])
         as LibraryRef?;
+    shows = json['shows'] == null ? null : List<String>.from(json['shows']);
+    hides = json['hides'] == null ? null : List<String>.from(json['hides']);
   }
 
   Map<String, dynamic> toJson() {
@@ -5788,6 +5800,8 @@
       'prefix': prefix,
       'target': target?.toJson(),
     });
+    _setIfNotNull(json, 'shows', shows?.map((f) => f).toList());
+    _setIfNotNull(json, 'hides', hides?.map((f) => f).toList());
     return json;
   }
 
diff --git a/pkg/vm_service/test/library_dependency_test.dart b/pkg/vm_service/test/library_dependency_test.dart
new file mode 100644
index 0000000..5f308ef
--- /dev/null
+++ b/pkg/vm_service/test/library_dependency_test.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2021, 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.
+
+// ignore: unused_import
+import 'dart:isolate' show Isolate, SendPort hide Capability;
+
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service.dart';
+
+import 'common/service_test_common.dart';
+import 'common/test_helper.dart';
+
+export 'dart:io' show Socket hide SecureSocket;
+
+void testMain() => null;
+
+final tests = <IsolateTest>[
+  (VmService service, IsolateRef isolateRef) async {
+    final isolate = await service.getIsolate(isolateRef.id!);
+    final libRef = isolate.libraries!.firstWhere(
+      (lib) => lib.uri!.contains('library_dependency_test.dart'),
+    );
+    final lib = await service.getObject(isolate.id!, libRef.id!) as Library;
+
+    for (final dep in lib.dependencies!) {
+      final name = dep.target!.name!;
+      if (name == 'dart.isolate') {
+        expect(dep.isImport, true);
+        expect(dep.shows, ['Isolate', 'SendPort']);
+        expect(dep.hides, ['Capability']);
+      } else if (name == 'dart.io') {
+        expect(dep.isImport, false);
+        expect(dep.shows, ['Socket']);
+        expect(dep.hides, ['SecureSocket']);
+      } else {
+        expect(dep.isImport, true);
+        expect(dep.shows, null);
+        expect(dep.hides, null);
+      }
+    }
+  },
+];
+
+main([args = const <String>[]]) => runIsolateTests(
+      args,
+      tests,
+      'library_dependency_test.dart',
+      testeeConcurrent: testMain,
+    );
diff --git a/runtime/observatory/tests/service/get_version_rpc_test.dart b/runtime/observatory/tests/service/get_version_rpc_test.dart
index 5ff857b..fad888f 100644
--- a/runtime/observatory/tests/service/get_version_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
     final result = await vm.invokeRpcNoUpgrade('getVersion', {});
     expect(result['type'], 'Version');
     expect(result['major'], 3);
-    expect(result['minor'], 46);
+    expect(result['minor'], 47);
     expect(result['_privateMajor'], 0);
     expect(result['_privateMinor'], 0);
   },
diff --git a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
index 8090856..c7b238a 100644
--- a/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
+++ b/runtime/observatory_2/tests/service_2/get_version_rpc_test.dart
@@ -12,7 +12,7 @@
     var result = await vm.invokeRpcNoUpgrade('getVersion', {});
     expect(result['type'], equals('Version'));
     expect(result['major'], equals(3));
-    expect(result['minor'], equals(46));
+    expect(result['minor'], equals(47));
     expect(result['_privateMajor'], equals(0));
     expect(result['_privateMinor'], equals(0));
   },
diff --git a/runtime/vm/object_service.cc b/runtime/vm/object_service.cc
index 3f91520..2fa6cda 100644
--- a/runtime/vm/object_service.cc
+++ b/runtime/vm/object_service.cc
@@ -488,6 +488,27 @@
   }
 }
 
+static void PrintShowHideNamesToJSON(JSONObject* jsobj, const Namespace& ns) {
+  Array& arr = Array::Handle();
+  String& name = String::Handle();
+  arr ^= ns.show_names();
+  if (!arr.IsNull()) {
+    JSONArray jsarr(jsobj, "shows");
+    for (intptr_t i = 0; i < arr.Length(); ++i) {
+      name ^= arr.At(i);
+      jsarr.AddValue(name.ToCString());
+    }
+  }
+  arr ^= ns.hide_names();
+  if (!arr.IsNull()) {
+    JSONArray jsarr(jsobj, "hides");
+    for (intptr_t i = 0; i < arr.Length(); ++i) {
+      name ^= arr.At(i);
+      jsarr.AddValue(name.ToCString());
+    }
+  }
+}
+
 void Library::PrintJSONImpl(JSONStream* stream, bool ref) const {
   const String& id = String::Handle(private_key());
   JSONObject jsobj(stream);
@@ -529,6 +550,7 @@
       jsdep.AddProperty("isImport", true);
       target = ns.target();
       jsdep.AddProperty("target", target);
+      PrintShowHideNamesToJSON(&jsdep, ns);
     }
 
     // Exports.
@@ -543,6 +565,7 @@
       jsdep.AddProperty("isImport", false);
       target = ns.target();
       jsdep.AddProperty("target", target);
+      PrintShowHideNamesToJSON(&jsdep, ns);
     }
 
     // Prefixed imports.
@@ -569,6 +592,7 @@
             jsdep.AddProperty("prefix", prefix_name.ToCString());
             target = ns.target();
             jsdep.AddProperty("target", target);
+            PrintShowHideNamesToJSON(&jsdep, ns);
           }
         }
       }
diff --git a/runtime/vm/service.h b/runtime/vm/service.h
index 390eee4..4b411a3 100644
--- a/runtime/vm/service.h
+++ b/runtime/vm/service.h
@@ -15,7 +15,7 @@
 namespace dart {
 
 #define SERVICE_PROTOCOL_MAJOR_VERSION 3
-#define SERVICE_PROTOCOL_MINOR_VERSION 46
+#define SERVICE_PROTOCOL_MINOR_VERSION 47
 
 class Array;
 class EmbedderServiceHandler;
diff --git a/runtime/vm/service/service.md b/runtime/vm/service/service.md
index c0d874a..ed0eebb 100644
--- a/runtime/vm/service/service.md
+++ b/runtime/vm/service/service.md
@@ -1,8 +1,8 @@
-# Dart VM Service Protocol 3.46
+# Dart VM Service Protocol 3.47
 
 > Please post feedback to the [observatory-discuss group][discuss-list]
 
-This document describes of _version 3.46_ of the Dart VM Service Protocol. This
+This document describes of _version 3.47_ of the Dart VM Service Protocol. This
 protocol is used to communicate with a running Dart Virtual Machine.
 
 To use the Service Protocol, start the VM with the *--observe* flag.
@@ -3155,6 +3155,12 @@
 
   // The library being imported or exported.
   @Library target;
+
+  // The list of symbols made visible from this dependency.
+  string[] shows [optional];
+
+  // The list of symbols hidden from this dependency.
+  string[] hides [optional];
 }
 ```
 
@@ -4051,5 +4057,6 @@
 3.44 | Added `identityHashCode` property to `@Instance` and `Instance`.
 3.45 | Added `setBreakpointState` RPC and `BreakpointUpdated` event kind.
 3.46 | Moved `sourceLocation` property into reference types for `Class`, `Field`, and `Function`.
+3.47 | Added `shows` and `hides` properties to `LibraryDependency`.
 
 [discuss-list]: https://groups.google.com/a/dartlang.org/forum/#!forum/observatory-discuss
diff --git a/tools/VERSION b/tools/VERSION
index 1ca8171..9da0255 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 14
 PATCH 0
-PRERELEASE 215
+PRERELEASE 216
 PRERELEASE_PATCH 0
\ No newline at end of file