Skip to content
This repository was archived by the owner on Feb 22, 2018. It is now read-only.

Commit 976c024

Browse files
author
Brenna Milligan
committed
Custom formatter popup booleans
BUG= [email protected] Review URL: https://codereview.chromium.org/2137063003 .
1 parent 68486cc commit 976c024

File tree

3 files changed

+88
-76
lines changed

3 files changed

+88
-76
lines changed

lib/runtime/dart_sdk.js

Lines changed: 43 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -36,10 +36,11 @@ dart_library.library('dart_sdk', null, /* Imports */[
3636
let MapOfSymbol$dynamic = () => (MapOfSymbol$dynamic = dart.constFn(core.Map$(core.Symbol, dart.dynamic)))();
3737
let MapOfString$int = () => (MapOfString$int = dart.constFn(core.Map$(core.String, core.int)))();
3838
let ListOfString = () => (ListOfString = dart.constFn(core.List$(core.String)))();
39-
let JSArrayOfFormatter = () => (JSArrayOfFormatter = dart.constFn(_interceptors.JSArray$(_debugger.Formatter)))();
4039
let JSArrayOfNameValuePair = () => (JSArrayOfNameValuePair = dart.constFn(_interceptors.JSArray$(_debugger.NameValuePair)))();
40+
let JSArrayOfFormatter = () => (JSArrayOfFormatter = dart.constFn(_interceptors.JSArray$(_debugger.Formatter)))();
4141
let LinkedHashSetOfNameValuePair = () => (LinkedHashSetOfNameValuePair = dart.constFn(collection.LinkedHashSet$(_debugger.NameValuePair)))();
4242
let SetOfString = () => (SetOfString = dart.constFn(core.Set$(core.String)))();
43+
let IterableOfNameValuePair = () => (IterableOfNameValuePair = dart.constFn(core.Iterable$(_debugger.NameValuePair)))();
4344
let ListOfNameValuePair = () => (ListOfNameValuePair = dart.constFn(core.List$(_debugger.NameValuePair)))();
4445
let JSArrayOfJsonMLFormatter = () => (JSArrayOfJsonMLFormatter = dart.constFn(_interceptors.JSArray$(_debugger.JsonMLFormatter)))();
4546
let JSArray = () => (JSArray = dart.constFn(_interceptors.JSArray$()))();
@@ -481,9 +482,9 @@ dart_library.library('dart_sdk', null, /* Imports */[
481482
let dynamicToList = () => (dynamicToList = dart.constFn(dart.definiteFunctionType(core.List, [dart.dynamic])))();
482483
let TypeToString = () => (TypeToString = dart.constFn(dart.definiteFunctionType(core.String, [core.Type])))();
483484
let dynamicAndStringTobool = () => (dynamicAndStringTobool = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic, core.String])))();
485+
let dynamicAnddynamicTodynamic$ = () => (dynamicAnddynamicTodynamic$ = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, dart.dynamic])))();
484486
let dynamicTobool$ = () => (dynamicTobool$ = dart.constFn(dart.definiteFunctionType(core.bool, [dart.dynamic])))();
485487
let dynamicAnddynamicTovoid = () => (dynamicAnddynamicTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [dart.dynamic, dart.dynamic])))();
486-
let IterableSpanToListOfNameValuePair = () => (IterableSpanToListOfNameValuePair = dart.constFn(dart.definiteFunctionType(ListOfNameValuePair(), [_debugger.IterableSpan])))();
487488
let VoidTodynamic$ = () => (VoidTodynamic$ = dart.constFn(dart.definiteFunctionType(dart.dynamic, [])))();
488489
let StringAndString__Todynamic = () => (StringAndString__Todynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.String, core.String], [dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic, dart.dynamic])))();
489490
let VoidToIsolateContext = () => (VoidToIsolateContext = dart.constFn(dart.definiteFunctionType(_foreign_helper.IsolateContext, [])))();
@@ -497,7 +498,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
497498
let FunctionTovoid = () => (FunctionTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.Function])))();
498499
let StringAndStringToString = () => (StringAndStringToString = dart.constFn(dart.definiteFunctionType(core.String, [core.String, core.String])))();
499500
let TypeAndStringTodynamic = () => (TypeAndStringTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [core.Type, core.String])))();
500-
let dynamicAnddynamicTodynamic$ = () => (dynamicAnddynamicTodynamic$ = dart.constFn(dart.definiteFunctionType(dart.dynamic, [dart.dynamic, dart.dynamic])))();
501501
let ListOfEToListOfE = () => (ListOfEToListOfE = dart.constFn(dart.definiteFunctionType(E => [core.List$(E), [core.List$(E)]])))();
502502
let StringTovoid = () => (StringTovoid = dart.constFn(dart.definiteFunctionType(dart.void, [core.String])))();
503503
let _IsolateContextAndFunctionTodynamic = () => (_IsolateContextAndFunctionTodynamic = dart.constFn(dart.definiteFunctionType(dart.dynamic, [_isolate_helper._IsolateContext, core.Function])))();
@@ -2441,17 +2441,48 @@ dart_library.library('dart_sdk', null, /* Imports */[
24412441
constructors: () => ({new: dart.definiteFunctionType(_debugger.MapEntry, [], {key: core.Object, value: core.Object})})
24422442
});
24432443
_debugger.IterableSpan = class IterableSpan extends core.Object {
2444-
new(opts) {
2445-
let start = opts && 'start' in opts ? opts.start : null;
2446-
let end = opts && 'end' in opts ? opts.end : null;
2447-
let iterable = opts && 'iterable' in opts ? opts.iterable : null;
2444+
new(start, end, iterable) {
24482445
this.start = start;
24492446
this.end = end;
24502447
this.iterable = iterable;
24512448
}
2449+
get length() {
2450+
return dart.notNull(this.end) - dart.notNull(this.start);
2451+
}
2452+
get maxPowerOfSubsetSize() {
2453+
return (dart.notNull(math.log(core.num._check(dart.dsend(this.length, '-', 0.5)))) / dart.notNull(math.log(_debugger._maxSpanLength)))[dartx.truncate]();
2454+
}
2455+
get subsetSize() {
2456+
return math.pow(_debugger._maxSpanLength, core.num._check(this.maxPowerOfSubsetSize));
2457+
}
2458+
asMap() {
2459+
return this.iterable[dartx.skip](this.start)[dartx.take](core.int._check(this.length))[dartx.toList]()[dartx.asMap]();
2460+
}
2461+
children() {
2462+
let ret = JSArrayOfNameValuePair().of([]);
2463+
if (dart.test(dart.dsend(this.length, '<=', _debugger._maxSpanLength))) {
2464+
dart.dsend(this.asMap(), 'forEach', dart.fn((i, element) => {
2465+
ret[dartx.add](new _debugger.NameValuePair({name: dart.toString(dart.dsend(i, '+', this.start)), value: element}));
2466+
}, dynamicAnddynamicTodynamic$()));
2467+
} else {
2468+
for (let i = this.start; dart.notNull(i) < dart.notNull(this.end); i = dart.notNull(i) + dart.notNull(core.int._check(this.subsetSize))) {
2469+
let subSpan = new _debugger.IterableSpan(i, dart.asInt(math.min(core.num)(this.end, core.num._check(dart.dsend(this.subsetSize, '+', i)))), this.iterable);
2470+
if (dart.equals(subSpan.length, 1)) {
2471+
ret[dartx.add](new _debugger.NameValuePair({name: dart.toString(i), value: this.iterable[dartx.elementAt](i)}));
2472+
} else {
2473+
ret[dartx.add](new _debugger.NameValuePair({name: dart.str`[${i}...${dart.notNull(subSpan.end) - 1}]`, value: subSpan, hideName: true}));
2474+
}
2475+
}
2476+
}
2477+
return ret;
2478+
}
24522479
};
24532480
dart.setSignature(_debugger.IterableSpan, {
2454-
constructors: () => ({new: dart.definiteFunctionType(_debugger.IterableSpan, [], {start: core.int, end: core.int, iterable: core.Iterable})})
2481+
constructors: () => ({new: dart.definiteFunctionType(_debugger.IterableSpan, [core.int, core.int, core.Iterable])}),
2482+
methods: () => ({
2483+
asMap: dart.definiteFunctionType(dart.dynamic, []),
2484+
children: dart.definiteFunctionType(dart.dynamic, [])
2485+
})
24552486
});
24562487
_debugger.ClassMetadata = class ClassMetadata extends core.Object {
24572488
new(object) {
@@ -2536,11 +2567,13 @@ dart_library.library('dart_sdk', null, /* Imports */[
25362567
_debugger.JsonMLFormatter = class JsonMLFormatter extends core.Object {
25372568
new(simpleFormatter) {
25382569
this[_simpleFormatter] = simpleFormatter;
2570+
this.customFormattersOn = false;
25392571
}
25402572
setMaxSpanLengthForTestingOnly(spanLength) {
25412573
_debugger._maxSpanLength = spanLength;
25422574
}
25432575
header(object, config) {
2576+
this.customFormattersOn = true;
25442577
if (dart.equals(config, _debugger.JsonMLConfig.skipDart) || dart.test(_debugger.isNativeJavaScriptObject(object))) {
25452578
return null;
25462579
}
@@ -2800,7 +2833,7 @@ dart_library.library('dart_sdk', null, /* Imports */[
28002833
}
28012834
children(object) {
28022835
let ret = LinkedHashSetOfNameValuePair().new();
2803-
ret.addAll(_debugger.childrenHelper(new _debugger.IterableSpan({start: 0, end: core.int._check(dart.dload(object, 'length')), iterable: core.Iterable._check(object)})));
2836+
ret.addAll(IterableOfNameValuePair()._check(new _debugger.IterableSpan(0, core.int._check(dart.dload(object, 'length')), core.Iterable._check(object)).children()));
28042837
this.addMetadataChildren(object, ret);
28052838
return ret.toList();
28062839
}
@@ -2909,14 +2942,13 @@ dart_library.library('dart_sdk', null, /* Imports */[
29092942
return _debugger.IterableSpan.is(object);
29102943
}
29112944
preview(object) {
2912-
let entry = _debugger.IterableSpan._check(object);
29132945
return dart.str`[${dart.dload(object, 'start')}...${dart.dsend(dart.dload(object, 'end'), '-', 1)}]`;
29142946
}
29152947
hasChildren(object) {
29162948
return true;
29172949
}
29182950
children(object) {
2919-
return _debugger.childrenHelper(_debugger.IterableSpan._check(object));
2951+
return ListOfNameValuePair()._check(dart.dsend(object, 'children'));
29202952
}
29212953
};
29222954
_debugger.IterableSpanFormatter[dart.implements] = () => [_debugger.Formatter];
@@ -2928,29 +2960,6 @@ dart_library.library('dart_sdk', null, /* Imports */[
29282960
children: dart.definiteFunctionType(core.List$(_debugger.NameValuePair), [dart.dynamic])
29292961
})
29302962
});
2931-
_debugger.childrenHelper = function(span) {
2932-
let length = dart.notNull(span.end) - dart.notNull(span.start);
2933-
let ret = ListOfNameValuePair().new();
2934-
if (length <= dart.notNull(_debugger._maxSpanLength)) {
2935-
for (let i = span.start; dart.notNull(i) < dart.notNull(span.end); i = dart.notNull(i) + 1) {
2936-
ret[dartx.add](new _debugger.NameValuePair({name: dart.toString(i), value: span.iterable[dartx.elementAt](i)}));
2937-
}
2938-
} else {
2939-
let maxPowerOfSubsetSize = (dart.notNull(math.log(length - 0.5)) / dart.notNull(math.log(_debugger._maxSpanLength)))[dartx.truncate]();
2940-
let subsetSize = math.pow(_debugger._maxSpanLength, maxPowerOfSubsetSize);
2941-
for (let i = span.start; dart.notNull(i) < dart.notNull(span.end); i = dart.notNull(i) + dart.notNull(dart.asInt(subsetSize))) {
2942-
let endIndex = math.min(core.num)(span.end, dart.notNull(subsetSize) + dart.notNull(i));
2943-
if (dart.notNull(endIndex) - dart.notNull(i) == 1)
2944-
ret[dartx.add](new _debugger.NameValuePair({name: dart.toString(i), value: span.iterable[dartx.elementAt](i)}));
2945-
else {
2946-
let entryWrapper = new _debugger.IterableSpan({start: i, end: dart.asInt(endIndex), iterable: span.iterable});
2947-
ret[dartx.add](new _debugger.NameValuePair({name: dart.str`[${i}...${dart.notNull(endIndex) - 1}]`, value: entryWrapper, hideName: true}));
2948-
}
2949-
}
2950-
}
2951-
return ret;
2952-
};
2953-
dart.lazyFn(_debugger.childrenHelper, () => IterableSpanToListOfNameValuePair());
29542963
_debugger.registerDevtoolsFormatter = function() {
29552964
let formatters = JSArrayOfJsonMLFormatter().of([_debugger._devtoolsFormatter]);
29562965
dart.global.devtoolsFormatters = formatters;

tool/input_sdk/private/debugger.dart

Lines changed: 43 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -126,11 +126,48 @@ class MapEntry {
126126
}
127127

128128
class IterableSpan {
129-
IterableSpan({this.start, this.end, this.iterable});
129+
IterableSpan(this.start, this.end, this.iterable);
130130

131131
final int start;
132132
final int end;
133133
final Iterable iterable;
134+
int get length => end - start;
135+
136+
/// Using length - .5, a list of length 10000 results in a
137+
/// maxPowerOfSubsetSize of 1, so the list will be broken up into 100,
138+
/// 100-length subsets. A list of length 10001 results in a
139+
/// maxPowerOfSubsetSize of 2, so the list will be broken up into 1
140+
/// 10000-length subset and 1 1-length subset.
141+
int get maxPowerOfSubsetSize =>
142+
(log(length - .5) / log(_maxSpanLength)).truncate();
143+
int get subsetSize => pow(_maxSpanLength, maxPowerOfSubsetSize);
144+
145+
Map<int, dynamic> asMap() =>
146+
iterable.skip(start).take(length).toList().asMap();
147+
148+
List<NameValuePair> children() {
149+
var ret = <NameValuePair>[];
150+
if (length <= _maxSpanLength) {
151+
asMap().forEach((i, element) {
152+
ret.add(
153+
new NameValuePair(name: (i + start).toString(), value: element));
154+
});
155+
} else {
156+
for (var i = start; i < end; i += subsetSize) {
157+
var subSpan = new IterableSpan(i, min(end, subsetSize + i), iterable);
158+
if (subSpan.length == 1) {
159+
ret.add(new NameValuePair(
160+
name: i.toString(), value: iterable.elementAt(i)));
161+
} else {
162+
ret.add(new NameValuePair(
163+
name: '[${i}...${subSpan.end - 1}]',
164+
value: subSpan,
165+
hideName: true));
166+
}
167+
}
168+
}
169+
return ret;
170+
}
134171
}
135172

136173
class ClassMetadata {
@@ -218,13 +255,16 @@ class JsonMLFormatter {
218255
// DartFormatter.
219256
DartFormatter _simpleFormatter;
220257

258+
bool customFormattersOn = false;
259+
221260
JsonMLFormatter(this._simpleFormatter);
222261

223262
void setMaxSpanLengthForTestingOnly(int spanLength) {
224263
_maxSpanLength = spanLength;
225264
}
226265

227266
header(object, config) {
267+
customFormattersOn = true;
228268
if (config == JsonMLConfig.skipDart || isNativeJavaScriptObject(object)) {
229269
return null;
230270
}
@@ -517,8 +557,7 @@ class IterableFormatter extends ObjectFormatter {
517557
// TODO(jacobr): handle large Iterables better.
518558
// TODO(jacobr): consider only using numeric indices
519559
var ret = new LinkedHashSet<NameValuePair>();
520-
ret.addAll(childrenHelper(
521-
new IterableSpan(start: 0, end: object.length, iterable: object)));
560+
ret.addAll((new IterableSpan(0, object.length, object)).children());
522561
// TODO(jacobr): provide a link to show regular class properties here.
523562
// required for subclasses of iterable, etc.
524563
addMetadataChildren(object, ret);
@@ -625,50 +664,12 @@ class IterableSpanFormatter implements Formatter {
625664
accept(object) => object is IterableSpan;
626665

627666
String preview(object) {
628-
IterableSpan entry = object;
629667
return '[${object.start}...${object.end-1}]';
630668
}
631669

632670
bool hasChildren(object) => true;
633671

634-
List<NameValuePair> children(object) => childrenHelper(object);
635-
}
636-
637-
List<NameValuePair> childrenHelper(IterableSpan span) {
638-
var length = span.end - span.start;
639-
var ret = new List<NameValuePair>();
640-
if (length <= _maxSpanLength) {
641-
for (var i = span.start; i < span.end; i++) {
642-
/// TODO(bmilligan): Stop using elementAt if it becomes a performance
643-
/// bottleneck in the future.
644-
ret.add(new NameValuePair(
645-
name: i.toString(), value: span.iterable.elementAt(i)));
646-
}
647-
} else {
648-
/// Using length - .5, a list of length 10000 results in a
649-
/// maxPowerOfSubsetSize of 1, so the list will be broken up into 100,
650-
/// 100-length subsets. A list of length 10001 results in a
651-
/// maxPowerOfSubsetSize of 2, so the list will be broken up into 1
652-
/// 10000-length subset and 1 1-length subset.
653-
var maxPowerOfSubsetSize =
654-
(log(length - .5) / log(_maxSpanLength)).truncate();
655-
var subsetSize = pow(_maxSpanLength, maxPowerOfSubsetSize);
656-
for (var i = span.start; i < span.end; i += subsetSize) {
657-
var endIndex = min(span.end, subsetSize + i);
658-
if (endIndex - i == 1)
659-
ret.add(new NameValuePair(
660-
name: i.toString(), value: span.iterable.elementAt(i)));
661-
else {
662-
var entryWrapper =
663-
new IterableSpan(start: i, end: endIndex, iterable: span.iterable);
664-
ret.add(new NameValuePair(
665-
name: '[${i}...${endIndex - 1}]',
666-
value: entryWrapper,
667-
hideName: true));
668-
}
669-
}
670-
}
671-
return ret;
672+
List<NameValuePair> children(object) => object.children();
672673
}
673674

674675
/// This entry point is automatically invoked by the code generated by

tool/sdk_expected_errors.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,8 @@
3232
[error] The part was not supplied as an input to the compiler. (dart:html_common/lists.dart, line 1, col 1)
3333
[error] Invalid override. The type of JsArray.[]= ((Object, E) → void) is not a subtype of JsObject.[]= ((Object, dynamic) → dynamic). (dart:js, line 363, col 3)
3434
[warning] Unsound implicit cast from dynamic to List<String> (dart:_debugger, line 39, col 45)
35+
[warning] Unsound implicit cast from dynamic to Iterable<NameValuePair> (dart:_debugger, line 559, col 16)
36+
[warning] Unsound implicit cast from dynamic to List<NameValuePair> (dart:_debugger, line 671, col 43)
3537
[warning] Unsound implicit cast from dynamic to List<String> (dart:_isolate_helper, line 839, col 37)
3638
[warning] Unsound implicit cast from dynamic to List<String> (dart:_isolate_helper, line 886, col 11)
3739
[warning] Unsound implicit cast from dynamic to E (dart:_interceptors/js_array.dart, line 117, col 12)

0 commit comments

Comments
 (0)