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