Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(475)

Unified Diff: tool/input_sdk/private/debugger.dart

Issue 2176233002: Library children object fix (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Generic iteration loop Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | tool/sdk_expected_errors.txt » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: tool/input_sdk/private/debugger.dart
diff --git a/tool/input_sdk/private/debugger.dart b/tool/input_sdk/private/debugger.dart
index 8cdbeb0a45826ebc4dca27e7ad74b90edc36df5f..0f470d9d1e2905d32b76e9ae5321459f4c9ff229 100644
--- a/tool/input_sdk/private/debugger.dart
+++ b/tool/input_sdk/private/debugger.dart
@@ -209,6 +209,12 @@ Object safeGetProperty(Object protoChain, String name) {
}
}
+safeProperties(object) => new Map.fromIterable(
+ getOwnPropertyNames(object)
+ .where((each) => safeGetProperty(object, each) != null),
+ key: (name) => name,
+ value: (name) => safeGetProperty(object, name));
+
/// Class to simplify building the JsonML objects expected by the
/// Devtools Formatter API.
class JsonMLElement {
@@ -540,8 +546,7 @@ class LibraryModuleFormatter extends ObjectFormatter {
/// Formatter for Dart Library objects.
class LibraryFormatter extends ObjectFormatter {
- String genericName;
- String genericArguments;
+ var genericParameters = new HashMap<String, String>();
accept(object) => object is Library;
@@ -551,39 +556,49 @@ class LibraryFormatter extends ObjectFormatter {
List<NameValuePair> children(object) {
var children = new LinkedHashSet<NameValuePair>();
- var entry = object.object;
- for (var name in getOwnPropertyNames(entry)) {
- var value = safeGetProperty(entry, name);
- if (value != null) {
- var genericTypeConstructor = dart.getGenericTypeCtor(value);
- if (genericTypeConstructor != null) {
- genericName = name;
- // Using JS toString() eliminates the leading metadata that is generated
- // with the toString function provided in operations.dart.
- // Splitting by => and taking the first element gives the list of
- // arguments in the constructor.
- genericArguments =
- JS('String', '#.toString()', genericTypeConstructor)
- .split(' =>')
- .first
- .replaceAll(new RegExp(r'[(|)]'), '');
- } else if (value is Type) {
- var typeName = getTypeName(value);
- // Generic class names are generated with a $ at the end, so the
- // corresponding non-generic class can be identified by adding $.
- if ('$name\$' == genericName) {
- typeName = '$typeName<$genericArguments>';
- }
- children.add(new NameValuePair(
- name: typeName, value: new ClassMetadata(value, name: typeName)));
- } else {
- children.add(
- new NameValuePair(name: name, value: new ClassMetadata(value)));
- }
+ var nonGenericProperties = new LinkedHashMap<String, Object>();
+ var objectProperties = safeProperties(object.object);
+ objectProperties.forEach((name, value) {
+ var genericTypeConstructor = dart.getGenericTypeCtor(value);
+ if (genericTypeConstructor != null) {
+ recordGenericParameters(name, genericTypeConstructor);
+ } else {
+ nonGenericProperties[name] = value;
}
- }
+ });
+ nonGenericProperties.forEach((name, value) {
+ if (value is Type) {
+ children.add(classChild(name, value));
+ } else {
+ children.add(new NameValuePair(name: name, value: value));
+ }
+ });
return children.toList();
}
+
+ recordGenericParameters(String name, Object genericTypeConstructor) {
+ // Using JS toString() eliminates the leading metadata that is generated
+ // with the toString function provided in operations.dart.
+ // Splitting by => and taking the first element gives the list of
+ // arguments in the constructor.
+ genericParameters[name] =
+ JS('String', '#.toString()', genericTypeConstructor)
+ .split(' =>')
+ .first
+ .replaceAll(new RegExp(r'[(|)]'), '');
+ }
+
+ classChild(String name, Object child) {
+ var typeName = getTypeName(child);
+ // Generic class names are generated with a $ at the end, so the
+ // corresponding non-generic class can be identified by adding $.
+ var parameterName = '$name\$';
+ if (genericParameters.keys.contains(parameterName)) {
+ typeName = '$typeName<${genericParameters[parameterName]}>';
+ }
+ return new NameValuePair(
+ name: typeName, value: new ClassMetadata(child, name: typeName));
+ }
}
/// Formatter for Dart Function objects.
« no previous file with comments | « lib/runtime/dart_sdk.js ('k') | tool/sdk_expected_errors.txt » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698