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

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

Issue 2033433007: Fixed type error in MapEntry and added keyToStringConfig to display the toString() of a key in a Ma… (Closed) Base URL: https://github.com/dart-lang/dev_compiler.git@master
Patch Set: Created 4 years, 6 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 43d553d2e171c45c9bb0fcb2f113a4915d396d16..e7fb00aea1709f82efdad69c2485c01c65662ef4 100644
--- a/tool/input_sdk/private/debugger.dart
+++ b/tool/input_sdk/private/debugger.dart
@@ -10,12 +10,25 @@ import 'dart:core';
import 'dart:collection';
import 'dart:html' as html;
-/// Config object to pass to devtools to signal that an object should not be
-/// formatted by the Dart formatter. This is used to specify that an Object
+/// JsonMLConfig object to pass to devtools to specify how an Object should
+/// be displayed. skipDart signals that an object should not be formatted
+/// by the Dart formatter. This is used to specify that an Object
/// should just be displayed using the regular JavaScript view instead of a
/// custom Dart view. For example, this is used to display the JavaScript view
-/// of a Dart Function as a child of the regular Function object.
-const skipDartConfig = const Object();
+/// of a Dart Function as a child of the regular Function object. keyToString
+/// signals that a map key object should have its toString() displayed by
+/// the Dart formatter.
+///
+/// We'd like this to be an enum, but we can't because it's a dev_compiler bug.
+class JsonMLConfig {
+ const JsonMLConfig(this.name);
+
+ final String name;
+ static const none = const JsonMLConfig("none");
+ static const skipDart = const JsonMLConfig("skipDart");
+ static const keyToString = const JsonMLConfig("keyToString");
+}
+
final int maxIterableChildrenToDisplay = 50;
var _devtoolsFormatter = new JsonMLFormatter(new DartFormatter());
@@ -85,8 +98,7 @@ bool hasMethod(object, String name) {
/// [JsonMLFormatter] consumes [NameValuePair] objects and
class NameValuePair {
- NameValuePair({this.name, this.value, bool skipDart})
- : skipDart = skipDart == true;
+ NameValuePair({this.name, this.value, this.config: JsonMLConfig.none});
// Define equality and hashCode so that NameValuePair can be used
// in a Set to dedupe entries with duplicate names.
@@ -95,13 +107,13 @@ class NameValuePair {
final String name;
final Object value;
- final bool skipDart;
+ final JsonMLConfig config;
}
class MapEntry {
MapEntry({this.key, this.value});
- final String key;
+ final Object key;
final Object value;
}
@@ -193,13 +205,17 @@ class JsonMLFormatter {
JsonMLFormatter(this._simpleFormatter);
header(object, config) {
- if (identical(config, skipDartConfig) || isNativeJavaScriptObject(object)) {
+ if (config == JsonMLConfig.skipDart || isNativeJavaScriptObject(object)) {
return null;
}
var c = _simpleFormatter.preview(object);
if (c == null) return null;
+ if (config == JsonMLConfig.keyToString) {
+ c = object.toString();
+ }
+
// Indicate this is a Dart Object by using a Dart background color.
// This is stylistically a bit ugly but it eases distinguishing Dart and
// JS objects.
@@ -230,9 +246,7 @@ class JsonMLFormatter {
li.appendChild(nameSpan);
var objectTag = li.createObjectTag(child.value);
- if (child.skipDart) {
- objectTag.addAttribute('config', skipDartConfig);
- }
+ objectTag.addAttribute('config', child.config);
if (!_simpleFormatter.hasChildren(child.value)) {
li.setStyle("padding-left: 13px;");
}
@@ -426,7 +440,9 @@ class FunctionFormatter extends Formatter {
List<NameValuePair> children(object) => <NameValuePair>[
new NameValuePair(name: 'signature', value: preview(object)),
new NameValuePair(
- name: 'JavaScript Function', value: object, skipDart: true)
+ name: 'JavaScript Function',
+ value: object,
+ config: JsonMLConfig.skipDart)
];
}
@@ -532,7 +548,9 @@ class ClassMetadataFormatter implements Formatter {
name: '[[Mixins]]', value: new HeritageClause('mixins', mixins)));
}
ret.add(new NameValuePair(
- name: '[[JavaScript View]]', value: entry.object, skipDart: true));
+ name: '[[JavaScript View]]',
+ value: entry.object,
+ config: JsonMLConfig.skipDart));
// TODO(jacobr): provide a link to the base class or perhaps the entire
// base class hierarchy as a flat list.
@@ -541,7 +559,7 @@ class ClassMetadataFormatter implements Formatter {
ret.add(new NameValuePair(
name: '[[JavaScript Constructor]]',
value: JSNative.getProperty(entry.object, 'constructor'),
- skipDart: true));
+ config: JsonMLConfig.skipDart));
// TODO(jacobr): add constructors, methods, extended class, and static
}
return ret;
@@ -561,7 +579,8 @@ class MapEntryFormatter implements Formatter {
bool hasChildren(object) => true;
List<NameValuePair> children(object) => <NameValuePair>[
- new NameValuePair(name: 'key', value: object.key),
+ new NameValuePair(
+ name: 'key', value: object.key, config: JsonMLConfig.keyToString),
new NameValuePair(name: 'value', value: object.value)
];
}
« 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