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

Side by Side Diff: runtime/observatory/lib/src/elements/script_inset.dart

Issue 1289913002: Make declaration annotations direct links; update annotations after the library's declarations are … (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 4 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 unified diff | Download patch
OLDNEW
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 'observatory_element.dart'; 9 import 'observatory_element.dart';
10 import 'service_ref.dart'; 10 import 'service_ref.dart';
(...skipping 25 matching lines...) Expand all
36 if (infoBox == null) buildInfoBox(); // Created lazily on the first click. 36 if (infoBox == null) buildInfoBox(); // Created lazily on the first click.
37 infoBox.style.display = show ? 'block' : 'none'; 37 infoBox.style.display = show ? 'block' : 'none';
38 content.style.backgroundColor = show ? 'white' : originalBackground; 38 content.style.backgroundColor = show ? 'white' : originalBackground;
39 }); 39 });
40 40
41 // Causes infoBox to be positioned relative to the bottom-left of content. 41 // Causes infoBox to be positioned relative to the bottom-left of content.
42 content.style.display = 'inline-block'; 42 content.style.display = 'inline-block';
43 content.style.cursor = 'pointer'; 43 content.style.cursor = 'pointer';
44 } 44 }
45 45
46
47 void addLink(Element content, String target) {
48 // Ick, destructive but still compatible with also adding an info box.
49 var a = new AnchorElement(href: target);
50 a.text = content.text;
51 content.text = '';
52 content.append(a);
53 }
54
55
46 abstract class Annotation implements Comparable<Annotation> { 56 abstract class Annotation implements Comparable<Annotation> {
47 int line; 57 int line;
48 int columnStart; 58 int columnStart;
49 int columnStop; 59 int columnStop;
50 60
51 void applyStyleTo(element); 61 void applyStyleTo(element);
52 62
53 int compareTo(Annotation other) { 63 int compareTo(Annotation other) {
54 if (line == other.line) { 64 if (line == other.line) {
55 return columnStart.compareTo(other.columnStart); 65 return columnStart.compareTo(other.columnStart);
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
94 if (element == null) { 104 if (element == null) {
95 return; // TODO(rmacnak): Handling overlapping annotations. 105 return; // TODO(rmacnak): Handling overlapping annotations.
96 } 106 }
97 element.classes.add("currentCol"); 107 element.classes.add("currentCol");
98 element.title = "Current execution"; 108 element.title = "Current execution";
99 } 109 }
100 } 110 }
101 111
102 class LibraryAnnotation extends Annotation { 112 class LibraryAnnotation extends Annotation {
103 Library target; 113 Library target;
104 LibraryAnnotation(this.target); 114 String url;
115 LibraryAnnotation(this.target, this.url);
105 116
106 void applyStyleTo(element) { 117 void applyStyleTo(element) {
107 if (element == null) { 118 if (element == null) {
108 return; // TODO(rmacnak): Handling overlapping annotations. 119 return; // TODO(rmacnak): Handling overlapping annotations.
109 } 120 }
110 element.style.fontWeight = "bold";
111 element.title = "library ${target.uri}"; 121 element.title = "library ${target.uri}";
112 122 addLink(element, url);
113 addInfoBox(element, () {
114 var details = table();
115 var r = row();
116 r.append(cell("Library"));
117 r.append(cell(serviceRef(target)));
118 details.append(r);
119
120 return details;
121 });
122 } 123 }
123 } 124 }
124 125
125 class PartAnnotation extends Annotation { 126 class PartAnnotation extends Annotation {
126 Script part; 127 Script part;
127 PartAnnotation(this.part); 128 String url;
129 PartAnnotation(this.part, this.url);
128 130
129 void applyStyleTo(element) { 131 void applyStyleTo(element) {
130 if (element == null) { 132 if (element == null) {
131 return; // TODO(rmacnak): Handling overlapping annotations. 133 return; // TODO(rmacnak): Handling overlapping annotations.
132 } 134 }
133 element.style.fontWeight = "bold";
134 element.title = "script ${part.uri}"; 135 element.title = "script ${part.uri}";
135 136 addLink(element, url);
136 addInfoBox(element, () {
137 var details = table();
138 var r = row();
139 r.append(cell("Script"));
140 r.append(cell(serviceRef(part)));
141 details.append(r);
142
143 return details;
144 });
145 } 137 }
146 } 138 }
147 139
148 class LocalVariableAnnotation extends Annotation { 140 class LocalVariableAnnotation extends Annotation {
149 final value; 141 final value;
150 142
151 LocalVariableAnnotation(LocalVarLocation location, this.value) { 143 LocalVariableAnnotation(LocalVarLocation location, this.value) {
152 line = location.line; 144 line = location.line;
153 columnStart = location.column; 145 columnStart = location.column;
154 columnStop = location.endColumn; 146 columnStop = location.endColumn;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
200 r.append(cell(serviceRef(entry.target))); 192 r.append(cell(serviceRef(entry.target)));
201 details.append(r); 193 details.append(r);
202 } 194 }
203 } 195 }
204 return details; 196 return details;
205 }); 197 });
206 } 198 }
207 } 199 }
208 200
209 abstract class DeclarationAnnotation extends Annotation { 201 abstract class DeclarationAnnotation extends Annotation {
210 DeclarationAnnotation(decl) { 202 String url;
203 DeclarationAnnotation(decl, this.url) {
211 assert(decl.loaded); 204 assert(decl.loaded);
212 SourceLocation location = decl.location; 205 SourceLocation location = decl.location;
213 if (location == null) { 206 if (location == null) {
214 line = 0; 207 line = 0;
215 columnStart = 0; 208 columnStart = 0;
216 columnStop = 0; 209 columnStop = 0;
217 return; 210 return;
218 } 211 }
219 212
220 Script script = location.script; 213 Script script = location.script;
(...skipping 16 matching lines...) Expand all
237 columnStart = betterStart; 230 columnStart = betterStart;
238 } 231 }
239 columnStop = columnStart + decl.name.length; 232 columnStop = columnStart + decl.name.length;
240 } 233 }
241 } 234 }
242 } 235 }
243 236
244 class ClassDeclarationAnnotation extends DeclarationAnnotation { 237 class ClassDeclarationAnnotation extends DeclarationAnnotation {
245 Class klass; 238 Class klass;
246 239
247 ClassDeclarationAnnotation(Class cls) : klass = cls, super(cls); 240 ClassDeclarationAnnotation(Class cls, String url)
241 : klass = cls,
242 super(cls, url);
248 243
249 void applyStyleTo(element) { 244 void applyStyleTo(element) {
250 if (element == null) { 245 if (element == null) {
251 return; // TODO(rmacnak): Handling overlapping annotations. 246 return; // TODO(rmacnak): Handling overlapping annotations.
252 } 247 }
253 element.style.fontWeight = "bold";
254 element.title = "class ${klass.name}"; 248 element.title = "class ${klass.name}";
255 249 addLink(element, url);
256 addInfoBox(element, () {
257 var details = table();
258 var r = row();
259 r.append(cell("Class"));
260 r.append(cell(serviceRef(klass)));
261 details.append(r);
262
263 return details;
264 });
265 } 250 }
266 } 251 }
267 252
268 class FieldDeclarationAnnotation extends DeclarationAnnotation { 253 class FieldDeclarationAnnotation extends DeclarationAnnotation {
269 Field field; 254 Field field;
270 255
271 FieldDeclarationAnnotation(Field fld) : field = fld, super(fld); 256 FieldDeclarationAnnotation(Field fld, String url)
257 : field = fld,
258 super(fld, url);
272 259
273 void applyStyleTo(element) { 260 void applyStyleTo(element) {
274 if (element == null) { 261 if (element == null) {
275 return; // TODO(rmacnak): Handling overlapping annotations. 262 return; // TODO(rmacnak): Handling overlapping annotations.
276 } 263 }
277 element.style.fontWeight = "bold"; 264 var tooltip = "field ${field.name}";
278 element.title = "field ${field.name}"; 265 element.title = tooltip;
279 266 addLink(element, url);
280 addInfoBox(element, () {
281 var details = table();
282 var r = row();
283 r.append(cell("Field"));
284 r.append(cell(serviceRef(field)));
285 details.append(r);
286
287 if (field.isStatic) {
288 if (field.loaded) {
289 r = row();
290 r.append(cell("Value"));
291 r.append(cell(serviceRef(field.staticValue)));
292 details.append(r);
293 }
294 } else {
295 r = row();
296 r.append(cell("Nullable"));
297 r.append(cell(field.guardNullable ? "null observed"
298 : "null not observed"));
299 details.append(r);
300
301 r = row();
302 r.append(cell("Types"));
303 if (field.guardClass == "dynamic") {
304 r.append(cell("various"));
305 } else if (field.guardClass == "unknown") {
306 r.append(cell("none"));
307 } else {
308 r.append(cell(serviceRef(field.guardClass)));
309 }
310 details.append(r);
311 }
312
313 return details;
314 });
315 } 267 }
316 } 268 }
317 269
318 class FunctionDeclarationAnnotation extends DeclarationAnnotation { 270 class FunctionDeclarationAnnotation extends DeclarationAnnotation {
319 ServiceFunction function; 271 ServiceFunction function;
320 272
321 FunctionDeclarationAnnotation(ServiceFunction func) 273 FunctionDeclarationAnnotation(ServiceFunction func, String url)
322 : function = func, super(func); 274 : function = func,
275 super(func, url);
323 276
324 void applyStyleTo(element) { 277 void applyStyleTo(element) {
325 if (element == null) { 278 if (element == null) {
326 return; // TODO(rmacnak): Handling overlapping annotations. 279 return; // TODO(rmacnak): Handling overlapping annotations.
327 } 280 }
328 element.style.fontWeight = "bold"; 281 var tooltip = "method ${function.name}";
329 element.title = "method ${function.name}"; 282 if (function.isOptimizable == false) {
283 tooltip += "\nUnoptimizable!";
284 }
285 if (function.isInlinable == false) {
286 tooltip += "\nNot inlinable!";
287 }
288 if (function.deoptimizations > 0) {
289 tooltip += "\nDeoptimized ${function.deoptimizations} times!";
290 }
291 element.title = tooltip;
330 292
331 if (function.isOptimizable == false || 293 if (function.isOptimizable == false ||
332 function.isInlinable == false || 294 function.isInlinable == false ||
333 function.deoptimizations >0) { 295 function.deoptimizations >0) {
334 element.style.backgroundColor = "red"; 296 element.style.backgroundColor = "red";
335 } 297 }
336 298
337 addInfoBox(element, () { 299 addLink(element, url);
338 var details = table();
339 var r = row();
340 r.append(cell("Function"));
341 r.append(cell(serviceRef(function)));
342 details.append(r);
343
344 r = row();
345 r.append(cell("Usage Count"));
346 r.append(cell("${function.usageCounter}"));
347 details.append(r);
348
349 if (function.isOptimizable == false) {
350 details.append(row(cell("Unoptimizable!")));
351 }
352 if (function.isInlinable == false) {
353 details.append(row(cell("Not inlinable!")));
354 }
355 if (function.deoptimizations > 0) {
356 details.append(row("Deoptimized ${function.deoptimizations} times!"));
357 }
358 return details;
359 });
360 } 300 }
361 } 301 }
362 302
363 /// Box with script source code in it. 303 /// Box with script source code in it.
364 @CustomTag('script-inset') 304 @CustomTag('script-inset')
365 class ScriptInsetElement extends ObservatoryElement { 305 class ScriptInsetElement extends ObservatoryElement {
366 @published Script script; 306 @published Script script;
367 @published int startPos; 307 @published int startPos;
368 @published int endPos; 308 @published int endPos;
369 309
370 /// Set the height to make the script inset scroll. Otherwise it 310 /// Set the height to make the script inset scroll. Otherwise it
371 /// will show from startPos to endPos. 311 /// will show from startPos to endPos.
372 @published String height = null; 312 @published String height = null;
373 313
374 @published int currentPos; 314 @published int currentPos;
375 @published bool inDebuggerContext = false; 315 @published bool inDebuggerContext = false;
376 @published ObservableList variables; 316 @published ObservableList variables;
377 317
378 int _currentLine; 318 int _currentLine;
379 int _currentCol; 319 int _currentCol;
380 int _startLine; 320 int _startLine;
381 int _endLine; 321 int _endLine;
382 322
383 var annotations = []; 323 var annotations = [];
384 var annotationsCursor; 324 var annotationsCursor;
385 325
386 StreamSubscription scriptChangeSubscription; 326 StreamSubscription scriptChangeSubscription;
387 327
328 bool hasLoadedLibraryDeclarations = false;
329
388 String makeLineId(int line) { 330 String makeLineId(int line) {
389 return 'line-$line'; 331 return 'line-$line';
390 } 332 }
391 333
392 void _scrollToCurrentPos() { 334 void _scrollToCurrentPos() {
393 var line = querySelector('#${makeLineId(_currentLine)}'); 335 var line = querySelector('#${makeLineId(_currentLine)}');
394 if (line != null) { 336 if (line != null) {
395 line.scrollIntoView(); 337 line.scrollIntoView();
396 } 338 }
397 } 339 }
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after
495 437
496 _endLine = (endPos != null 438 _endLine = (endPos != null
497 ? script.tokenToLine(endPos) 439 ? script.tokenToLine(endPos)
498 : script.lines.length + script.lineOffset); 440 : script.lines.length + script.lineOffset);
499 441
500 annotations.clear(); 442 annotations.clear();
501 443
502 addCurrentExecutionAnnotation(); 444 addCurrentExecutionAnnotation();
503 445
504 if (!inDebuggerContext && script.library != null) { 446 if (!inDebuggerContext && script.library != null) {
505 loadDeclarationsOfLibrary(script.library); 447 if (hasLoadedLibraryDeclarations) {
506 addLibraryAnnotations(); 448 addLibraryAnnotations();
507 addDependencyAnnotations(); 449 addDependencyAnnotations();
508 addPartAnnotations(); 450 addPartAnnotations();
509 addClassAnnotations(); 451 addClassAnnotations();
510 addFieldAnnotations(); 452 addFieldAnnotations();
511 addFunctionAnnotations(); 453 addFunctionAnnotations();
512 addCallSiteAnnotations(); 454 addCallSiteAnnotations();
455 } else {
456 loadDeclarationsOfLibrary(script.library).then((_) {
457 hasLoadedLibraryDeclarations = true;
458 update();
459 });
460 }
513 } 461 }
514 462
515 addLocalVariableAnnotations(); 463 addLocalVariableAnnotations();
516 464
517 annotations.sort(); 465 annotations.sort();
518 } 466 }
519 467
520 void addCurrentExecutionAnnotation() { 468 void addCurrentExecutionAnnotation() {
521 if (_currentLine != null) { 469 if (_currentLine != null) {
522 var a = new CurrentExecutionAnnotation(); 470 var a = new CurrentExecutionAnnotation();
523 a.line = _currentLine; 471 a.line = _currentLine;
524 a.columnStart = _currentCol; 472 a.columnStart = _currentCol;
525 a.columnStop = _currentCol + 1; 473 a.columnStop = _currentCol + 1;
526 annotations.add(a); 474 annotations.add(a);
527 } 475 }
528 } 476 }
529 477
530 void loadDeclarationsOfLibrary(Library lib) { 478 Future loadDeclarationsOfLibrary(Library lib) {
531 lib.load().then((lib) { 479 return lib.load().then((lib) {
480 var loads = [];
532 for (var func in lib.functions) { 481 for (var func in lib.functions) {
533 func.load(); 482 loads.add(func.load());
534 } 483 }
535 for (var field in lib.variables) { 484 for (var field in lib.variables) {
536 field.load(); 485 loads.add(field.load());
537 } 486 }
538 for (var cls in lib.classes) { 487 for (var cls in lib.classes) {
539 cls.load().then((cls) { 488 loads.add(loadDeclarationsOfClass(cls));
540 for (var func in cls.functions) {
541 func.load();
542 }
543 for (var field in cls.fields) {
544 field.load();
545 }
546 });
547 } 489 }
490 return Future.wait(loads);
548 }); 491 });
549 } 492 }
550 493
494 Future loadDeclarationsOfClass(Class cls) {
495 return cls.load().then((cls) {
496 var loads = [];
497 for (var func in cls.functions) {
498 loads.add(func.load());
499 }
500 for (var field in cls.fields) {
501 loads.add(field.load());
502 }
503 return Future.wait(loads);
504 });
505 }
506
507 String inspectLink(ServiceObject ref) {
508 return gotoLink('/inspect', ref);
509 }
510
551 void addLibraryAnnotations() { 511 void addLibraryAnnotations() {
552 for (ScriptLine line in script.lines) { 512 for (ScriptLine line in script.lines) {
553 // TODO(rmacnak): Use a real scanner. 513 // TODO(rmacnak): Use a real scanner.
554 var pattern = new RegExp("library ${script.library.name}"); 514 var pattern = new RegExp("library ${script.library.name}");
555 var match = pattern.firstMatch(line.text); 515 var match = pattern.firstMatch(line.text);
556 if (match != null) { 516 if (match != null) {
557 var anno = new LibraryAnnotation(script.library); 517 var anno = new LibraryAnnotation(script.library,
518 inspectLink(script.library));
558 anno.line = line.line; 519 anno.line = line.line;
559 anno.columnStart = match.start + 8; 520 anno.columnStart = match.start + 8;
560 anno.columnStop = match.end; 521 anno.columnStop = match.end;
561 annotations.add(anno); 522 annotations.add(anno);
562 } 523 }
563 // TODO(rmacnak): Use a real scanner. 524 // TODO(rmacnak): Use a real scanner.
564 pattern = new RegExp("part of ${script.library.name}"); 525 pattern = new RegExp("part of ${script.library.name}");
565 match = pattern.firstMatch(line.text); 526 match = pattern.firstMatch(line.text);
566 if (match != null) { 527 if (match != null) {
567 var anno = new LibraryAnnotation(script.library); 528 var anno = new LibraryAnnotation(script.library,
529 inspectLink(script.library));
568 anno.line = line.line; 530 anno.line = line.line;
569 anno.columnStart = match.start + 8; 531 anno.columnStart = match.start + 8;
570 anno.columnStop = match.end; 532 anno.columnStop = match.end;
571 annotations.add(anno); 533 annotations.add(anno);
572 } 534 }
573 } 535 }
574 } 536 }
575 537
576 Library resolveDependency(String relativeUri) { 538 Library resolveDependency(String relativeUri) {
577 var targetUri = Uri.parse(script.library.uri).resolve(relativeUri); 539 var targetUri = Uri.parse(script.library.uri).resolve(relativeUri);
(...skipping 13 matching lines...) Expand all
591 new RegExp('import "(.*)"'), 553 new RegExp('import "(.*)"'),
592 new RegExp("export '(.*)'"), 554 new RegExp("export '(.*)'"),
593 new RegExp('export "(.*)"'), 555 new RegExp('export "(.*)"'),
594 ]; 556 ];
595 for (ScriptLine line in script.lines) { 557 for (ScriptLine line in script.lines) {
596 for (var pattern in patterns) { 558 for (var pattern in patterns) {
597 var match = pattern.firstMatch(line.text); 559 var match = pattern.firstMatch(line.text);
598 if (match != null) { 560 if (match != null) {
599 Library target = resolveDependency(match[1]); 561 Library target = resolveDependency(match[1]);
600 if (target != null) { 562 if (target != null) {
601 var anno = new LibraryAnnotation(target); 563 var anno = new LibraryAnnotation(target, inspectLink(target));
602 anno.line = line.line; 564 anno.line = line.line;
603 anno.columnStart = match.start + 8; 565 anno.columnStart = match.start + 8;
604 anno.columnStop = match.end - 1; 566 anno.columnStop = match.end - 1;
605 annotations.add(anno); 567 annotations.add(anno);
606 } 568 }
607 } 569 }
608 } 570 }
609 } 571 }
610 } 572 }
611 573
(...skipping 18 matching lines...) Expand all
630 var patterns = [ 592 var patterns = [
631 new RegExp("part '(.*)'"), 593 new RegExp("part '(.*)'"),
632 new RegExp('part "(.*)"'), 594 new RegExp('part "(.*)"'),
633 ]; 595 ];
634 for (ScriptLine line in script.lines) { 596 for (ScriptLine line in script.lines) {
635 for (var pattern in patterns) { 597 for (var pattern in patterns) {
636 var match = pattern.firstMatch(line.text); 598 var match = pattern.firstMatch(line.text);
637 if (match != null) { 599 if (match != null) {
638 Script part = resolvePart(match[1]); 600 Script part = resolvePart(match[1]);
639 if (part != null) { 601 if (part != null) {
640 var anno = new PartAnnotation(part); 602 var anno = new PartAnnotation(part, inspectLink(part));
641 anno.line = line.line; 603 anno.line = line.line;
642 anno.columnStart = match.start + 6; 604 anno.columnStart = match.start + 6;
643 anno.columnStop = match.end - 1; 605 anno.columnStop = match.end - 1;
644 annotations.add(anno); 606 annotations.add(anno);
645 } 607 }
646 } 608 }
647 } 609 }
648 } 610 }
649 } 611 }
650 612
651 void addClassAnnotations() { 613 void addClassAnnotations() {
652 for (var cls in script.library.classes) { 614 for (var cls in script.library.classes) {
653 if ((cls.location != null) && (cls.location.script == script)) { 615 if ((cls.location != null) && (cls.location.script == script)) {
654 annotations.add(new ClassDeclarationAnnotation(cls)); 616 var a = new ClassDeclarationAnnotation(cls, inspectLink(cls));
617 annotations.add(a);
655 } 618 }
656 } 619 }
657 } 620 }
658 621
659 void addFieldAnnotations() { 622 void addFieldAnnotations() {
660 for (var field in script.library.variables) { 623 for (var field in script.library.variables) {
661 if ((field.location != null) && (field.location.script == script)) { 624 if ((field.location != null) && (field.location.script == script)) {
662 annotations.add(new FieldDeclarationAnnotation(field)); 625 var a = new FieldDeclarationAnnotation(field, inspectLink(field));
626 annotations.add(a);
663 } 627 }
664 } 628 }
665 for (var cls in script.library.classes) { 629 for (var cls in script.library.classes) {
666 for (var field in cls.fields) { 630 for (var field in cls.fields) {
667 if ((field.location != null) && (field.location.script == script)) { 631 if ((field.location != null) && (field.location.script == script)) {
668 annotations.add(new FieldDeclarationAnnotation(field)); 632 var a = new FieldDeclarationAnnotation(field, inspectLink(field));
633 annotations.add(a);
669 } 634 }
670 } 635 }
671 } 636 }
672 } 637 }
673 638
674 void addFunctionAnnotations() { 639 void addFunctionAnnotations() {
675 for (var func in script.library.functions) { 640 for (var func in script.library.functions) {
676 if ((func.location != null) && 641 if ((func.location != null) &&
677 (func.location.script == script) && 642 (func.location.script == script) &&
678 (func.kind != FunctionKind.kImplicitGetterFunction) && 643 (func.kind != FunctionKind.kImplicitGetterFunction) &&
679 (func.kind != FunctionKind.kImplicitSetterFunction)) { 644 (func.kind != FunctionKind.kImplicitSetterFunction)) {
680 // We annotate a field declaration with the field instead of the 645 // We annotate a field declaration with the field instead of the
681 // implicit getter or setter. 646 // implicit getter or setter.
682 annotations.add(new FunctionDeclarationAnnotation(func)); 647 var a = new FunctionDeclarationAnnotation(func, inspectLink(func));
648 annotations.add(a);
683 } 649 }
684 } 650 }
685 for (var cls in script.library.classes) { 651 for (var cls in script.library.classes) {
686 for (var func in cls.functions) { 652 for (var func in cls.functions) {
687 if ((func.location != null) && 653 if ((func.location != null) &&
688 (func.location.script == script) && 654 (func.location.script == script) &&
689 (func.kind != FunctionKind.kImplicitGetterFunction) && 655 (func.kind != FunctionKind.kImplicitGetterFunction) &&
690 (func.kind != FunctionKind.kImplicitSetterFunction)) { 656 (func.kind != FunctionKind.kImplicitSetterFunction)) {
691 // We annotate a field declaration with the field instead of the 657 // We annotate a field declaration with the field instead of the
692 // implicit getter or setter. 658 // implicit getter or setter.
693 annotations.add(new FunctionDeclarationAnnotation(func)); 659 var a = new FunctionDeclarationAnnotation(func, inspectLink(func));
660 annotations.add(a);
694 } 661 }
695 } 662 }
696 } 663 }
697 } 664 }
698 665
699 void addCallSiteAnnotations() { 666 void addCallSiteAnnotations() {
700 for (var callSite in script.callSites) { 667 for (var callSite in script.callSites) {
701 annotations.add(new CallSiteAnnotation(callSite)); 668 annotations.add(new CallSiteAnnotation(callSite));
702 } 669 }
703 } 670 }
(...skipping 223 matching lines...) Expand 10 before | Expand all | Expand 10 after
927 class SourceInsetElement extends PolymerElement { 894 class SourceInsetElement extends PolymerElement {
928 SourceInsetElement.created() : super.created(); 895 SourceInsetElement.created() : super.created();
929 896
930 @published SourceLocation location; 897 @published SourceLocation location;
931 @published String height = null; 898 @published String height = null;
932 @published int currentPos; 899 @published int currentPos;
933 @published bool inDebuggerContext = false; 900 @published bool inDebuggerContext = false;
934 @published ObservableList variables; 901 @published ObservableList variables;
935 } 902 }
936 903
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698