| OLD | NEW |
| 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 library script_inset_element; | 5 library script_inset_element; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:html'; | 8 import 'dart:html'; |
| 9 import 'dart:svg'; | 9 import 'dart:svg'; |
| 10 import 'package:observatory/app.dart'; | 10 import 'package:observatory/app.dart'; |
| 11 import 'package:observatory/models.dart' as M; | 11 import 'package:observatory/models.dart' as M; |
| 12 import 'package:observatory/service.dart' as S; | 12 import 'package:observatory/service.dart' as S; |
| 13 import 'package:observatory/src/elements/helpers/any_ref.dart'; | 13 import 'package:observatory/src/elements/helpers/any_ref.dart'; |
| 14 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; | 14 import 'package:observatory/src/elements/helpers/rendering_scheduler.dart'; |
| 15 import 'package:observatory/src/elements/helpers/tag.dart'; | 15 import 'package:observatory/src/elements/helpers/tag.dart'; |
| 16 import 'package:observatory/src/elements/helpers/uris.dart'; | 16 import 'package:observatory/src/elements/helpers/uris.dart'; |
| 17 import 'package:observatory/utils.dart'; | 17 import 'package:observatory/utils.dart'; |
| 18 | 18 |
| 19 class ScriptInsetElement extends HtmlElement implements Renderable { | 19 class ScriptInsetElement extends HtmlElement implements Renderable { |
| 20 static const tag = const Tag<ScriptInsetElement>('script-inset'); | 20 static const tag = const Tag<ScriptInsetElement>('script-inset'); |
| 21 | 21 |
| 22 RenderingScheduler _r; | 22 RenderingScheduler _r; |
| 23 | 23 |
| 24 Stream<RenderedEvent<ScriptInsetElement>> get onRendered => _r.onRendered; | 24 Stream<RenderedEvent<ScriptInsetElement>> get onRendered => _r.onRendered; |
| 25 | 25 |
| 26 M.IsolateRef _isolate; | 26 M.IsolateRef _isolate; |
| 27 M.ScriptRef _script; | 27 M.ScriptRef _script; |
| 28 M.Script _loadedScript; | 28 M.Script _loadedScript; |
| 29 M.ScriptRepository _scripts; | 29 M.ScriptRepository _scripts; |
| 30 M.InstanceRepository _instances; | 30 M.ObjectRepository _objects; |
| 31 M.EventRepository _events; | 31 M.EventRepository _events; |
| 32 StreamSubscription _subscription; | 32 StreamSubscription _subscription; |
| 33 int _startPos; | 33 int _startPos; |
| 34 int _endPos; | 34 int _endPos; |
| 35 int _currentPos; | 35 int _currentPos; |
| 36 bool _inDebuggerContext; | 36 bool _inDebuggerContext; |
| 37 Iterable _variables; | 37 Iterable _variables; |
| 38 | 38 |
| 39 M.IsolateRef get isolate => _isolate; | 39 M.IsolateRef get isolate => _isolate; |
| 40 M.ScriptRef get script => _script; | 40 M.ScriptRef get script => _script; |
| 41 | 41 |
| 42 factory ScriptInsetElement( | 42 factory ScriptInsetElement( |
| 43 M.IsolateRef isolate, | 43 M.IsolateRef isolate, |
| 44 M.ScriptRef script, | 44 M.ScriptRef script, |
| 45 M.ScriptRepository scripts, | 45 M.ScriptRepository scripts, |
| 46 M.InstanceRepository instances, | 46 M.ObjectRepository objects, |
| 47 M.EventRepository events, | 47 M.EventRepository events, |
| 48 {int startPos, | 48 {int startPos, |
| 49 int endPos, | 49 int endPos, |
| 50 int currentPos, | 50 int currentPos, |
| 51 bool inDebuggerContext: false, | 51 bool inDebuggerContext: false, |
| 52 Iterable variables: const [], | 52 Iterable variables: const [], |
| 53 RenderingQueue queue}) { | 53 RenderingQueue queue}) { |
| 54 assert(isolate != null); | 54 assert(isolate != null); |
| 55 assert(script != null); | 55 assert(script != null); |
| 56 assert(scripts != null); | 56 assert(scripts != null); |
| 57 assert(instances != null); | 57 assert(objects != null); |
| 58 assert(events != null); | 58 assert(events != null); |
| 59 assert(inDebuggerContext != null); | 59 assert(inDebuggerContext != null); |
| 60 assert(variables != null); | 60 assert(variables != null); |
| 61 ScriptInsetElement e = document.createElement(tag.name); | 61 ScriptInsetElement e = document.createElement(tag.name); |
| 62 e._r = new RenderingScheduler(e, queue: queue); | 62 e._r = new RenderingScheduler(e, queue: queue); |
| 63 e._isolate = isolate; | 63 e._isolate = isolate; |
| 64 e._script = script; | 64 e._script = script; |
| 65 e._scripts = scripts; | 65 e._scripts = scripts; |
| 66 e._instances = instances; | 66 e._objects = objects; |
| 67 e._events = events; | 67 e._events = events; |
| 68 e._startPos = startPos; | 68 e._startPos = startPos; |
| 69 e._endPos = endPos; | 69 e._endPos = endPos; |
| 70 e._currentPos = currentPos; | 70 e._currentPos = currentPos; |
| 71 e._inDebuggerContext = inDebuggerContext; | 71 e._inDebuggerContext = inDebuggerContext; |
| 72 e._variables = new List.unmodifiable(variables); | 72 e._variables = new List.unmodifiable(variables); |
| 73 return e; | 73 return e; |
| 74 } | 74 } |
| 75 | 75 |
| 76 ScriptInsetElement.created() : super.created(); | 76 ScriptInsetElement.created() : super.created(); |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 319 addCallSiteAnnotations(); | 319 addCallSiteAnnotations(); |
| 320 } | 320 } |
| 321 | 321 |
| 322 addLocalVariableAnnotations(); | 322 addLocalVariableAnnotations(); |
| 323 | 323 |
| 324 _annotations.sort(); | 324 _annotations.sort(); |
| 325 } | 325 } |
| 326 | 326 |
| 327 void addCurrentExecutionAnnotation() { | 327 void addCurrentExecutionAnnotation() { |
| 328 if (_currentLine != null) { | 328 if (_currentLine != null) { |
| 329 var a = new CurrentExecutionAnnotation(_isolate, _instances, _r.queue); | 329 var a = new CurrentExecutionAnnotation(_isolate, _objects, _r.queue); |
| 330 a.line = _currentLine; | 330 a.line = _currentLine; |
| 331 a.columnStart = _currentCol; | 331 a.columnStart = _currentCol; |
| 332 S.Script script = _loadedScript as S.Script; | 332 S.Script script = _loadedScript as S.Script; |
| 333 var length = script.guessTokenLength(_currentLine, _currentCol); | 333 var length = script.guessTokenLength(_currentLine, _currentCol); |
| 334 if (length == null) { | 334 if (length == null) { |
| 335 length = 1; | 335 length = 1; |
| 336 } | 336 } |
| 337 a.columnStop = _currentCol + length; | 337 a.columnStop = _currentCol + length; |
| 338 _annotations.add(a); | 338 _annotations.add(a); |
| 339 } | 339 } |
| 340 } | 340 } |
| 341 | 341 |
| 342 void addBreakpointAnnotations() { | 342 void addBreakpointAnnotations() { |
| 343 S.Script script = _loadedScript as S.Script; | 343 S.Script script = _loadedScript as S.Script; |
| 344 for (var line = _startLine; line <= _endLine; line++) { | 344 for (var line = _startLine; line <= _endLine; line++) { |
| 345 var bpts = script.getLine(line).breakpoints; | 345 var bpts = script.getLine(line).breakpoints; |
| 346 if (bpts != null) { | 346 if (bpts != null) { |
| 347 for (var bpt in bpts) { | 347 for (var bpt in bpts) { |
| 348 if (bpt.location != null) { | 348 if (bpt.location != null) { |
| 349 _annotations.add( | 349 _annotations.add( |
| 350 new BreakpointAnnotation(_isolate, _instances, _r.queue, bpt)); | 350 new BreakpointAnnotation(_isolate, _objects, _r.queue, bpt)); |
| 351 } | 351 } |
| 352 } | 352 } |
| 353 } | 353 } |
| 354 } | 354 } |
| 355 } | 355 } |
| 356 | 356 |
| 357 Future loadDeclarationsOfLibrary(S.Library lib) { | 357 Future loadDeclarationsOfLibrary(S.Library lib) { |
| 358 return lib.load().then((lib) { | 358 return lib.load().then((lib) { |
| 359 var loads = []; | 359 var loads = []; |
| 360 for (var func in lib.functions) { | 360 for (var func in lib.functions) { |
| (...skipping 24 matching lines...) Expand all Loading... |
| 385 | 385 |
| 386 void addLibraryAnnotations() { | 386 void addLibraryAnnotations() { |
| 387 S.Script script = _loadedScript as S.Script; | 387 S.Script script = _loadedScript as S.Script; |
| 388 for (S.ScriptLine line in script.lines) { | 388 for (S.ScriptLine line in script.lines) { |
| 389 // TODO(rmacnak): Use a real scanner. | 389 // TODO(rmacnak): Use a real scanner. |
| 390 var pattern = new RegExp("library ${script.library.name}"); | 390 var pattern = new RegExp("library ${script.library.name}"); |
| 391 var match = pattern.firstMatch(line.text); | 391 var match = pattern.firstMatch(line.text); |
| 392 if (match != null) { | 392 if (match != null) { |
| 393 var anno = new LibraryAnnotation( | 393 var anno = new LibraryAnnotation( |
| 394 _isolate, | 394 _isolate, |
| 395 _instances, | 395 _objects, |
| 396 _r.queue, | 396 _r.queue, |
| 397 _loadedScript.library, | 397 _loadedScript.library, |
| 398 Uris.inspect(isolate, object: _loadedScript.library)); | 398 Uris.inspect(isolate, object: _loadedScript.library)); |
| 399 anno.line = line.line; | 399 anno.line = line.line; |
| 400 anno.columnStart = match.start + 8; | 400 anno.columnStart = match.start + 8; |
| 401 anno.columnStop = match.end; | 401 anno.columnStop = match.end; |
| 402 _annotations.add(anno); | 402 _annotations.add(anno); |
| 403 } | 403 } |
| 404 // TODO(rmacnak): Use a real scanner. | 404 // TODO(rmacnak): Use a real scanner. |
| 405 pattern = new RegExp("part of ${script.library.name}"); | 405 pattern = new RegExp("part of ${script.library.name}"); |
| 406 match = pattern.firstMatch(line.text); | 406 match = pattern.firstMatch(line.text); |
| 407 if (match != null) { | 407 if (match != null) { |
| 408 var anno = new LibraryAnnotation( | 408 var anno = new LibraryAnnotation( |
| 409 _isolate, | 409 _isolate, |
| 410 _instances, | 410 _objects, |
| 411 _r.queue, | 411 _r.queue, |
| 412 _loadedScript.library, | 412 _loadedScript.library, |
| 413 Uris.inspect(isolate, object: _loadedScript.library)); | 413 Uris.inspect(isolate, object: _loadedScript.library)); |
| 414 anno.line = line.line; | 414 anno.line = line.line; |
| 415 anno.columnStart = match.start + 8; | 415 anno.columnStart = match.start + 8; |
| 416 anno.columnStop = match.end; | 416 anno.columnStop = match.end; |
| 417 _annotations.add(anno); | 417 _annotations.add(anno); |
| 418 } | 418 } |
| 419 } | 419 } |
| 420 } | 420 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 451 new RegExp('import "(.*)"'), | 451 new RegExp('import "(.*)"'), |
| 452 new RegExp("export '(.*)'"), | 452 new RegExp("export '(.*)'"), |
| 453 new RegExp('export "(.*)"'), | 453 new RegExp('export "(.*)"'), |
| 454 ]; | 454 ]; |
| 455 for (S.ScriptLine line in script.lines) { | 455 for (S.ScriptLine line in script.lines) { |
| 456 for (var pattern in patterns) { | 456 for (var pattern in patterns) { |
| 457 var match = pattern.firstMatch(line.text); | 457 var match = pattern.firstMatch(line.text); |
| 458 if (match != null) { | 458 if (match != null) { |
| 459 M.Library target = resolveDependency(match[1]); | 459 M.Library target = resolveDependency(match[1]); |
| 460 if (target != null) { | 460 if (target != null) { |
| 461 var anno = new LibraryAnnotation(_isolate, _instances, _r.queue, | 461 var anno = new LibraryAnnotation(_isolate, _objects, _r.queue, |
| 462 target, Uris.inspect(isolate, object: target)); | 462 target, Uris.inspect(isolate, object: target)); |
| 463 anno.line = line.line; | 463 anno.line = line.line; |
| 464 anno.columnStart = match.start + 8; | 464 anno.columnStart = match.start + 8; |
| 465 anno.columnStop = match.end - 1; | 465 anno.columnStop = match.end - 1; |
| 466 _annotations.add(anno); | 466 _annotations.add(anno); |
| 467 } | 467 } |
| 468 } | 468 } |
| 469 } | 469 } |
| 470 } | 470 } |
| 471 } | 471 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 493 var patterns = [ | 493 var patterns = [ |
| 494 new RegExp("part '(.*)'"), | 494 new RegExp("part '(.*)'"), |
| 495 new RegExp('part "(.*)"'), | 495 new RegExp('part "(.*)"'), |
| 496 ]; | 496 ]; |
| 497 for (S.ScriptLine line in script.lines) { | 497 for (S.ScriptLine line in script.lines) { |
| 498 for (var pattern in patterns) { | 498 for (var pattern in patterns) { |
| 499 var match = pattern.firstMatch(line.text); | 499 var match = pattern.firstMatch(line.text); |
| 500 if (match != null) { | 500 if (match != null) { |
| 501 S.Script part = resolvePart(match[1]); | 501 S.Script part = resolvePart(match[1]); |
| 502 if (part != null) { | 502 if (part != null) { |
| 503 var anno = new PartAnnotation(_isolate, _instances, _r.queue, part, | 503 var anno = new PartAnnotation(_isolate, _objects, _r.queue, part, |
| 504 Uris.inspect(isolate, object: part)); | 504 Uris.inspect(isolate, object: part)); |
| 505 anno.line = line.line; | 505 anno.line = line.line; |
| 506 anno.columnStart = match.start + 6; | 506 anno.columnStart = match.start + 6; |
| 507 anno.columnStop = match.end - 1; | 507 anno.columnStop = match.end - 1; |
| 508 _annotations.add(anno); | 508 _annotations.add(anno); |
| 509 } | 509 } |
| 510 } | 510 } |
| 511 } | 511 } |
| 512 } | 512 } |
| 513 } | 513 } |
| 514 | 514 |
| 515 void addClassAnnotations() { | 515 void addClassAnnotations() { |
| 516 S.Script script = _loadedScript as S.Script; | 516 S.Script script = _loadedScript as S.Script; |
| 517 for (var cls in script.library.classes) { | 517 for (var cls in script.library.classes) { |
| 518 if ((cls.location != null) && (cls.location.script == script)) { | 518 if ((cls.location != null) && (cls.location.script == script)) { |
| 519 var a = new ClassDeclarationAnnotation(_isolate, _instances, _r.queue, | 519 var a = new ClassDeclarationAnnotation(_isolate, _objects, _r.queue, |
| 520 cls, Uris.inspect(isolate, object: cls)); | 520 cls, Uris.inspect(isolate, object: cls)); |
| 521 _annotations.add(a); | 521 _annotations.add(a); |
| 522 } | 522 } |
| 523 } | 523 } |
| 524 } | 524 } |
| 525 | 525 |
| 526 void addFieldAnnotations() { | 526 void addFieldAnnotations() { |
| 527 S.Script script = _loadedScript as S.Script; | 527 S.Script script = _loadedScript as S.Script; |
| 528 for (var field in script.library.variables) { | 528 for (var field in script.library.variables) { |
| 529 if ((field.location != null) && (field.location.script == script)) { | 529 if ((field.location != null) && (field.location.script == script)) { |
| 530 var a = new FieldDeclarationAnnotation(_isolate, _instances, _r.queue, | 530 var a = new FieldDeclarationAnnotation(_isolate, _objects, _r.queue, |
| 531 field, Uris.inspect(isolate, object: field)); | 531 field, Uris.inspect(isolate, object: field)); |
| 532 _annotations.add(a); | 532 _annotations.add(a); |
| 533 } | 533 } |
| 534 } | 534 } |
| 535 for (var cls in script.library.classes) { | 535 for (var cls in script.library.classes) { |
| 536 for (var field in cls.fields) { | 536 for (var field in cls.fields) { |
| 537 if ((field.location != null) && (field.location.script == script)) { | 537 if ((field.location != null) && (field.location.script == script)) { |
| 538 var a = new FieldDeclarationAnnotation(_isolate, _instances, _r.queue, | 538 var a = new FieldDeclarationAnnotation(_isolate, _objects, _r.queue, |
| 539 field, Uris.inspect(isolate, object: field)); | 539 field, Uris.inspect(isolate, object: field)); |
| 540 _annotations.add(a); | 540 _annotations.add(a); |
| 541 } | 541 } |
| 542 } | 542 } |
| 543 } | 543 } |
| 544 } | 544 } |
| 545 | 545 |
| 546 void addFunctionAnnotations() { | 546 void addFunctionAnnotations() { |
| 547 S.Script script = _loadedScript as S.Script; | 547 S.Script script = _loadedScript as S.Script; |
| 548 for (var func in script.library.functions) { | 548 for (var func in script.library.functions) { |
| 549 if ((func.location != null) && | 549 if ((func.location != null) && |
| 550 (func.location.script == script) && | 550 (func.location.script == script) && |
| 551 (func.kind != M.FunctionKind.implicitGetter) && | 551 (func.kind != M.FunctionKind.implicitGetter) && |
| 552 (func.kind != M.FunctionKind.implicitSetter)) { | 552 (func.kind != M.FunctionKind.implicitSetter)) { |
| 553 // We annotate a field declaration with the field instead of the | 553 // We annotate a field declaration with the field instead of the |
| 554 // implicit getter or setter. | 554 // implicit getter or setter. |
| 555 var a = new FunctionDeclarationAnnotation(_isolate, _instances, | 555 var a = new FunctionDeclarationAnnotation(_isolate, _objects, _r.queue, |
| 556 _r.queue, func, Uris.inspect(isolate, object: func)); | 556 func, Uris.inspect(isolate, object: func)); |
| 557 _annotations.add(a); | 557 _annotations.add(a); |
| 558 } | 558 } |
| 559 } | 559 } |
| 560 for (var cls in script.library.classes) { | 560 for (var cls in script.library.classes) { |
| 561 S.Script script = _loadedScript as S.Script; | 561 S.Script script = _loadedScript as S.Script; |
| 562 for (var func in cls.functions) { | 562 for (var func in cls.functions) { |
| 563 if ((func.location != null) && | 563 if ((func.location != null) && |
| 564 (func.location.script == script) && | 564 (func.location.script == script) && |
| 565 (func.kind != M.FunctionKind.implicitGetter) && | 565 (func.kind != M.FunctionKind.implicitGetter) && |
| 566 (func.kind != M.FunctionKind.implicitSetter)) { | 566 (func.kind != M.FunctionKind.implicitSetter)) { |
| 567 // We annotate a field declaration with the field instead of the | 567 // We annotate a field declaration with the field instead of the |
| 568 // implicit getter or setter. | 568 // implicit getter or setter. |
| 569 var a = new FunctionDeclarationAnnotation(_isolate, _instances, | 569 var a = new FunctionDeclarationAnnotation(_isolate, _objects, |
| 570 _r.queue, func, Uris.inspect(isolate, object: func)); | 570 _r.queue, func, Uris.inspect(isolate, object: func)); |
| 571 _annotations.add(a); | 571 _annotations.add(a); |
| 572 } | 572 } |
| 573 } | 573 } |
| 574 } | 574 } |
| 575 } | 575 } |
| 576 | 576 |
| 577 void addCallSiteAnnotations() { | 577 void addCallSiteAnnotations() { |
| 578 for (var callSite in _callSites) { | 578 for (var callSite in _callSites) { |
| 579 _annotations.add( | 579 _annotations |
| 580 new CallSiteAnnotation(_isolate, _instances, _r.queue, callSite)); | 580 .add(new CallSiteAnnotation(_isolate, _objects, _r.queue, callSite)); |
| 581 } | 581 } |
| 582 } | 582 } |
| 583 | 583 |
| 584 void addLocalVariableAnnotations() { | 584 void addLocalVariableAnnotations() { |
| 585 S.Script script = _loadedScript as S.Script; | 585 S.Script script = _loadedScript as S.Script; |
| 586 // We have local variable information. | 586 // We have local variable information. |
| 587 if (_variables != null) { | 587 if (_variables != null) { |
| 588 // For each variable. | 588 // For each variable. |
| 589 for (var variable in _variables) { | 589 for (var variable in _variables) { |
| 590 // Find variable usage locations. | 590 // Find variable usage locations. |
| 591 var locations = script.scanForLocalVariableLocations( | 591 var locations = script.scanForLocalVariableLocations( |
| 592 variable['name'], variable['_tokenPos'], variable['_endTokenPos']); | 592 variable['name'], variable['_tokenPos'], variable['_endTokenPos']); |
| 593 | 593 |
| 594 // Annotate locations. | 594 // Annotate locations. |
| 595 for (var location in locations) { | 595 for (var location in locations) { |
| 596 _annotations.add(new LocalVariableAnnotation( | 596 _annotations.add(new LocalVariableAnnotation( |
| 597 _isolate, _instances, _r.queue, location, variable['value'])); | 597 _isolate, _objects, _r.queue, location, variable['value'])); |
| 598 } | 598 } |
| 599 } | 599 } |
| 600 } | 600 } |
| 601 } | 601 } |
| 602 | 602 |
| 603 ButtonElement _newRefreshButton() { | 603 ButtonElement _newRefreshButton() { |
| 604 var button = new ButtonElement(); | 604 var button = new ButtonElement(); |
| 605 button.classes = ['refresh']; | 605 button.classes = ['refresh']; |
| 606 button.onClick.listen((_) async { | 606 button.onClick.listen((_) async { |
| 607 button.disabled = true; | 607 button.disabled = true; |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 984 void addLink(Element content, String target) { | 984 void addLink(Element content, String target) { |
| 985 // Ick, destructive but still compatible with also adding an info box. | 985 // Ick, destructive but still compatible with also adding an info box. |
| 986 var a = new AnchorElement(href: target); | 986 var a = new AnchorElement(href: target); |
| 987 a.text = content.text; | 987 a.text = content.text; |
| 988 content.text = ''; | 988 content.text = ''; |
| 989 content.append(a); | 989 content.append(a); |
| 990 } | 990 } |
| 991 | 991 |
| 992 abstract class Annotation implements Comparable<Annotation> { | 992 abstract class Annotation implements Comparable<Annotation> { |
| 993 M.IsolateRef _isolate; | 993 M.IsolateRef _isolate; |
| 994 M.InstanceRepository _instances; | 994 M.ObjectRepository _objects; |
| 995 RenderingQueue queue; | 995 RenderingQueue queue; |
| 996 int line; | 996 int line; |
| 997 int columnStart; | 997 int columnStart; |
| 998 int columnStop; | 998 int columnStop; |
| 999 int get priority; | 999 int get priority; |
| 1000 | 1000 |
| 1001 Annotation(this._isolate, this._instances, this.queue); | 1001 Annotation(this._isolate, this._objects, this.queue); |
| 1002 | 1002 |
| 1003 void applyStyleTo(element); | 1003 void applyStyleTo(element); |
| 1004 | 1004 |
| 1005 int compareTo(Annotation other) { | 1005 int compareTo(Annotation other) { |
| 1006 if (line == other.line) { | 1006 if (line == other.line) { |
| 1007 if (columnStart == other.columnStart) { | 1007 if (columnStart == other.columnStart) { |
| 1008 return priority.compareTo(other.priority); | 1008 return priority.compareTo(other.priority); |
| 1009 } | 1009 } |
| 1010 return columnStart.compareTo(other.columnStart); | 1010 return columnStart.compareTo(other.columnStart); |
| 1011 } | 1011 } |
| (...skipping 19 matching lines...) Expand all Loading... |
| 1031 Element cell(content) { | 1031 Element cell(content) { |
| 1032 var e = new DivElement(); | 1032 var e = new DivElement(); |
| 1033 e.style.display = "table-cell"; | 1033 e.style.display = "table-cell"; |
| 1034 e.style.padding = "3px"; | 1034 e.style.padding = "3px"; |
| 1035 if (content is String) e.text = content; | 1035 if (content is String) e.text = content; |
| 1036 if (content is Element) e.children.add(content); | 1036 if (content is Element) e.children.add(content); |
| 1037 return e; | 1037 return e; |
| 1038 } | 1038 } |
| 1039 | 1039 |
| 1040 Element serviceRef(object) { | 1040 Element serviceRef(object) { |
| 1041 return anyRef(_isolate, object, _instances, queue: queue); | 1041 return anyRef(_isolate, object, _objects, queue: queue); |
| 1042 } | 1042 } |
| 1043 } | 1043 } |
| 1044 | 1044 |
| 1045 class CurrentExecutionAnnotation extends Annotation { | 1045 class CurrentExecutionAnnotation extends Annotation { |
| 1046 int priority = 0; // highest priority. | 1046 int priority = 0; // highest priority. |
| 1047 | 1047 |
| 1048 CurrentExecutionAnnotation(M.IsolateRef isolate, | 1048 CurrentExecutionAnnotation( |
| 1049 M.InstanceRepository instances, RenderingQueue queue) | 1049 M.IsolateRef isolate, M.ObjectRepository objects, RenderingQueue queue) |
| 1050 : super(isolate, instances, queue); | 1050 : super(isolate, objects, queue); |
| 1051 | 1051 |
| 1052 void applyStyleTo(element) { | 1052 void applyStyleTo(element) { |
| 1053 if (element == null) { | 1053 if (element == null) { |
| 1054 return; // TODO(rmacnak): Handling overlapping annotations. | 1054 return; // TODO(rmacnak): Handling overlapping annotations. |
| 1055 } | 1055 } |
| 1056 element.classes.add("currentCol"); | 1056 element.classes.add("currentCol"); |
| 1057 element.title = "Current execution"; | 1057 element.title = "Current execution"; |
| 1058 } | 1058 } |
| 1059 } | 1059 } |
| 1060 | 1060 |
| 1061 class BreakpointAnnotation extends Annotation { | 1061 class BreakpointAnnotation extends Annotation { |
| 1062 M.Breakpoint bpt; | 1062 M.Breakpoint bpt; |
| 1063 int priority = 1; | 1063 int priority = 1; |
| 1064 | 1064 |
| 1065 BreakpointAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, | 1065 BreakpointAnnotation(M.IsolateRef isolate, M.ObjectRepository objects, |
| 1066 RenderingQueue queue, this.bpt) | 1066 RenderingQueue queue, this.bpt) |
| 1067 : super(isolate, instances, queue) { | 1067 : super(isolate, objects, queue) { |
| 1068 var script = bpt.location.script; | 1068 var script = bpt.location.script; |
| 1069 var location = bpt.location; | 1069 var location = bpt.location; |
| 1070 if (location.tokenPos != null) { | 1070 if (location.tokenPos != null) { |
| 1071 var pos = location.tokenPos; | 1071 var pos = location.tokenPos; |
| 1072 line = script.tokenToLine(pos); | 1072 line = script.tokenToLine(pos); |
| 1073 columnStart = script.tokenToCol(pos) - 1; // tokenToCol is 1-origin. | 1073 columnStart = script.tokenToCol(pos) - 1; // tokenToCol is 1-origin. |
| 1074 } else if (location is M.UnresolvedSourceLocation) { | 1074 } else if (location is M.UnresolvedSourceLocation) { |
| 1075 line = location.line; | 1075 line = location.line; |
| 1076 columnStart = location.column; | 1076 columnStart = location.column; |
| 1077 if (columnStart == null) { | 1077 if (columnStart == null) { |
| (...skipping 22 matching lines...) Expand all Loading... |
| 1100 } | 1100 } |
| 1101 element.title = "Breakpoint ${bpt.number} at ${line}:${column}"; | 1101 element.title = "Breakpoint ${bpt.number} at ${line}:${column}"; |
| 1102 } | 1102 } |
| 1103 } | 1103 } |
| 1104 | 1104 |
| 1105 class LibraryAnnotation extends Annotation { | 1105 class LibraryAnnotation extends Annotation { |
| 1106 S.Library target; | 1106 S.Library target; |
| 1107 String url; | 1107 String url; |
| 1108 int priority = 2; | 1108 int priority = 2; |
| 1109 | 1109 |
| 1110 LibraryAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, | 1110 LibraryAnnotation(M.IsolateRef isolate, M.ObjectRepository objects, |
| 1111 RenderingQueue queue, this.target, this.url) | 1111 RenderingQueue queue, this.target, this.url) |
| 1112 : super(isolate, instances, queue); | 1112 : super(isolate, objects, queue); |
| 1113 | 1113 |
| 1114 void applyStyleTo(element) { | 1114 void applyStyleTo(element) { |
| 1115 if (element == null) { | 1115 if (element == null) { |
| 1116 return; // TODO(rmacnak): Handling overlapping annotations. | 1116 return; // TODO(rmacnak): Handling overlapping annotations. |
| 1117 } | 1117 } |
| 1118 element.title = "library ${target.uri}"; | 1118 element.title = "library ${target.uri}"; |
| 1119 addLink(element, url); | 1119 addLink(element, url); |
| 1120 } | 1120 } |
| 1121 } | 1121 } |
| 1122 | 1122 |
| 1123 class PartAnnotation extends Annotation { | 1123 class PartAnnotation extends Annotation { |
| 1124 S.Script part; | 1124 S.Script part; |
| 1125 String url; | 1125 String url; |
| 1126 int priority = 2; | 1126 int priority = 2; |
| 1127 | 1127 |
| 1128 PartAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, | 1128 PartAnnotation(M.IsolateRef isolate, M.ObjectRepository objects, |
| 1129 RenderingQueue queue, this.part, this.url) | 1129 RenderingQueue queue, this.part, this.url) |
| 1130 : super(isolate, instances, queue); | 1130 : super(isolate, objects, queue); |
| 1131 | 1131 |
| 1132 void applyStyleTo(element) { | 1132 void applyStyleTo(element) { |
| 1133 if (element == null) { | 1133 if (element == null) { |
| 1134 return; // TODO(rmacnak): Handling overlapping annotations. | 1134 return; // TODO(rmacnak): Handling overlapping annotations. |
| 1135 } | 1135 } |
| 1136 element.title = "script ${part.uri}"; | 1136 element.title = "script ${part.uri}"; |
| 1137 addLink(element, url); | 1137 addLink(element, url); |
| 1138 } | 1138 } |
| 1139 } | 1139 } |
| 1140 | 1140 |
| 1141 class LocalVariableAnnotation extends Annotation { | 1141 class LocalVariableAnnotation extends Annotation { |
| 1142 final value; | 1142 final value; |
| 1143 int priority = 2; | 1143 int priority = 2; |
| 1144 | 1144 |
| 1145 LocalVariableAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, | 1145 LocalVariableAnnotation(M.IsolateRef isolate, M.ObjectRepository objects, |
| 1146 RenderingQueue queue, S.LocalVarLocation location, this.value) | 1146 RenderingQueue queue, S.LocalVarLocation location, this.value) |
| 1147 : super(isolate, instances, queue) { | 1147 : super(isolate, objects, queue) { |
| 1148 line = location.line; | 1148 line = location.line; |
| 1149 columnStart = location.column; | 1149 columnStart = location.column; |
| 1150 columnStop = location.endColumn; | 1150 columnStop = location.endColumn; |
| 1151 } | 1151 } |
| 1152 | 1152 |
| 1153 void applyStyleTo(element) { | 1153 void applyStyleTo(element) { |
| 1154 if (element == null) { | 1154 if (element == null) { |
| 1155 return; // TODO(rmacnak): Handling overlapping annotations. | 1155 return; // TODO(rmacnak): Handling overlapping annotations. |
| 1156 } | 1156 } |
| 1157 element.style.fontWeight = "bold"; | 1157 element.style.fontWeight = "bold"; |
| 1158 element.title = "${value.shortName}"; | 1158 element.title = "${value.shortName}"; |
| 1159 } | 1159 } |
| 1160 } | 1160 } |
| 1161 | 1161 |
| 1162 class CallSiteAnnotation extends Annotation { | 1162 class CallSiteAnnotation extends Annotation { |
| 1163 S.CallSite callSite; | 1163 S.CallSite callSite; |
| 1164 int priority = 2; | 1164 int priority = 2; |
| 1165 | 1165 |
| 1166 CallSiteAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, | 1166 CallSiteAnnotation(M.IsolateRef isolate, M.ObjectRepository objects, |
| 1167 RenderingQueue queue, this.callSite) | 1167 RenderingQueue queue, this.callSite) |
| 1168 : super(isolate, instances, queue) { | 1168 : super(isolate, objects, queue) { |
| 1169 line = callSite.line; | 1169 line = callSite.line; |
| 1170 columnStart = callSite.column - 1; // Call site is 1-origin. | 1170 columnStart = callSite.column - 1; // Call site is 1-origin. |
| 1171 var tokenLength = callSite.script.guessTokenLength(line, columnStart); | 1171 var tokenLength = callSite.script.guessTokenLength(line, columnStart); |
| 1172 if (tokenLength == null) { | 1172 if (tokenLength == null) { |
| 1173 tokenLength = callSite.name.length; // Approximate. | 1173 tokenLength = callSite.name.length; // Approximate. |
| 1174 if (callSite.name.startsWith("get:") || callSite.name.startsWith("set:")) | 1174 if (callSite.name.startsWith("get:") || callSite.name.startsWith("set:")) |
| 1175 tokenLength -= 4; | 1175 tokenLength -= 4; |
| 1176 } | 1176 } |
| 1177 columnStop = columnStart + tokenLength; | 1177 columnStop = columnStart + tokenLength; |
| 1178 } | 1178 } |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1209 } | 1209 } |
| 1210 return details; | 1210 return details; |
| 1211 }); | 1211 }); |
| 1212 } | 1212 } |
| 1213 } | 1213 } |
| 1214 | 1214 |
| 1215 abstract class DeclarationAnnotation extends Annotation { | 1215 abstract class DeclarationAnnotation extends Annotation { |
| 1216 String url; | 1216 String url; |
| 1217 int priority = 2; | 1217 int priority = 2; |
| 1218 | 1218 |
| 1219 DeclarationAnnotation(M.IsolateRef isolate, M.InstanceRepository instances, | 1219 DeclarationAnnotation(M.IsolateRef isolate, M.ObjectRepository objects, |
| 1220 RenderingQueue queue, decl, this.url) | 1220 RenderingQueue queue, decl, this.url) |
| 1221 : super(isolate, instances, queue) { | 1221 : super(isolate, objects, queue) { |
| 1222 assert(decl.loaded); | 1222 assert(decl.loaded); |
| 1223 S.SourceLocation location = decl.location; | 1223 S.SourceLocation location = decl.location; |
| 1224 if (location == null) { | 1224 if (location == null) { |
| 1225 line = 0; | 1225 line = 0; |
| 1226 columnStart = 0; | 1226 columnStart = 0; |
| 1227 columnStop = 0; | 1227 columnStop = 0; |
| 1228 return; | 1228 return; |
| 1229 } | 1229 } |
| 1230 | 1230 |
| 1231 S.Script script = location.script; | 1231 S.Script script = location.script; |
| (...skipping 16 matching lines...) Expand all Loading... |
| 1248 columnStart = betterStart; | 1248 columnStart = betterStart; |
| 1249 } | 1249 } |
| 1250 columnStop = columnStart + decl.name.length; | 1250 columnStop = columnStart + decl.name.length; |
| 1251 } | 1251 } |
| 1252 } | 1252 } |
| 1253 } | 1253 } |
| 1254 | 1254 |
| 1255 class ClassDeclarationAnnotation extends DeclarationAnnotation { | 1255 class ClassDeclarationAnnotation extends DeclarationAnnotation { |
| 1256 S.Class klass; | 1256 S.Class klass; |
| 1257 | 1257 |
| 1258 ClassDeclarationAnnotation( | 1258 ClassDeclarationAnnotation(M.IsolateRef isolate, M.ObjectRepository objects, |
| 1259 M.IsolateRef isolate, | 1259 RenderingQueue queue, S.Class cls, String url) |
| 1260 M.InstanceRepository instances, | |
| 1261 RenderingQueue queue, | |
| 1262 S.Class cls, | |
| 1263 String url) | |
| 1264 : klass = cls, | 1260 : klass = cls, |
| 1265 super(isolate, instances, queue, cls, url); | 1261 super(isolate, objects, queue, cls, url); |
| 1266 | 1262 |
| 1267 void applyStyleTo(element) { | 1263 void applyStyleTo(element) { |
| 1268 if (element == null) { | 1264 if (element == null) { |
| 1269 return; // TODO(rmacnak): Handling overlapping annotations. | 1265 return; // TODO(rmacnak): Handling overlapping annotations. |
| 1270 } | 1266 } |
| 1271 element.title = "class ${klass.name}"; | 1267 element.title = "class ${klass.name}"; |
| 1272 addLink(element, url); | 1268 addLink(element, url); |
| 1273 } | 1269 } |
| 1274 } | 1270 } |
| 1275 | 1271 |
| 1276 class FieldDeclarationAnnotation extends DeclarationAnnotation { | 1272 class FieldDeclarationAnnotation extends DeclarationAnnotation { |
| 1277 S.Field field; | 1273 S.Field field; |
| 1278 | 1274 |
| 1279 FieldDeclarationAnnotation( | 1275 FieldDeclarationAnnotation(M.IsolateRef isolate, M.ObjectRepository objects, |
| 1280 M.IsolateRef isolate, | 1276 RenderingQueue queue, S.Field fld, String url) |
| 1281 M.InstanceRepository instances, | |
| 1282 RenderingQueue queue, | |
| 1283 S.Field fld, | |
| 1284 String url) | |
| 1285 : field = fld, | 1277 : field = fld, |
| 1286 super(isolate, instances, queue, fld, url); | 1278 super(isolate, objects, queue, fld, url); |
| 1287 | 1279 |
| 1288 void applyStyleTo(element) { | 1280 void applyStyleTo(element) { |
| 1289 if (element == null) { | 1281 if (element == null) { |
| 1290 return; // TODO(rmacnak): Handling overlapping annotations. | 1282 return; // TODO(rmacnak): Handling overlapping annotations. |
| 1291 } | 1283 } |
| 1292 var tooltip = "field ${field.name}"; | 1284 var tooltip = "field ${field.name}"; |
| 1293 element.title = tooltip; | 1285 element.title = tooltip; |
| 1294 addLink(element, url); | 1286 addLink(element, url); |
| 1295 } | 1287 } |
| 1296 } | 1288 } |
| 1297 | 1289 |
| 1298 class FunctionDeclarationAnnotation extends DeclarationAnnotation { | 1290 class FunctionDeclarationAnnotation extends DeclarationAnnotation { |
| 1299 S.ServiceFunction function; | 1291 S.ServiceFunction function; |
| 1300 | 1292 |
| 1301 FunctionDeclarationAnnotation( | 1293 FunctionDeclarationAnnotation( |
| 1302 M.IsolateRef isolate, | 1294 M.IsolateRef isolate, |
| 1303 M.InstanceRepository instances, | 1295 M.ObjectRepository objects, |
| 1304 RenderingQueue queue, | 1296 RenderingQueue queue, |
| 1305 S.ServiceFunction func, | 1297 S.ServiceFunction func, |
| 1306 String url) | 1298 String url) |
| 1307 : function = func, | 1299 : function = func, |
| 1308 super(isolate, instances, queue, func, url); | 1300 super(isolate, objects, queue, func, url); |
| 1309 | 1301 |
| 1310 void applyStyleTo(element) { | 1302 void applyStyleTo(element) { |
| 1311 if (element == null) { | 1303 if (element == null) { |
| 1312 return; // TODO(rmacnak): Handling overlapping annotations. | 1304 return; // TODO(rmacnak): Handling overlapping annotations. |
| 1313 } | 1305 } |
| 1314 var tooltip = "method ${function.name}"; | 1306 var tooltip = "method ${function.name}"; |
| 1315 if (function.isOptimizable == false) { | 1307 if (function.isOptimizable == false) { |
| 1316 tooltip += "\nUnoptimizable!"; | 1308 tooltip += "\nUnoptimizable!"; |
| 1317 } | 1309 } |
| 1318 if (function.isInlinable == false) { | 1310 if (function.isInlinable == false) { |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1395 ..setAttribute( | 1387 ..setAttribute( |
| 1396 'd', | 1388 'd', |
| 1397 'M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 ' | 1389 'M13.5.67s.74 2.65.74 4.8c0 2.06-1.35 3.73-3.41 ' |
| 1398 '3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 ' | 1390 '3.73-2.07 0-3.63-1.67-3.63-3.73l.03-.36C5.21 7.51 ' |
| 1399 '4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 ' | 1391 '4 10.62 4 14c0 4.42 3.58 8 8 8s8-3.58 8-8C20 8.61 ' |
| 1400 '17.41 3.8 13.5.67zM11.71 19c-1.78 ' | 1392 '17.41 3.8 13.5.67zM11.71 19c-1.78 ' |
| 1401 '0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 ' | 1393 '0-3.22-1.4-3.22-3.14 0-1.62 1.05-2.76 2.81-3.12 ' |
| 1402 '1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 ' | 1394 '1.77-.36 3.6-1.21 4.62-2.58.39 1.29.59 2.65.59 ' |
| 1403 '4.04 0 2.65-2.15 4.8-4.8 4.8z') | 1395 '4.04 0 2.65-2.15 4.8-4.8 4.8z') |
| 1404 ]; | 1396 ]; |
| OLD | NEW |