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

Side by Side Diff: pkg/analyzer/lib/src/context/context.dart

Issue 1376473007: Add the 'docRange' property and use it to compute documentation comment. (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 5 years, 2 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
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/element.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2015, 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 analyzer.src.context.context; 5 library analyzer.src.context.context;
6 6
7 import 'dart:async'; 7 import 'dart:async';
8 import 'dart:collection'; 8 import 'dart:collection';
9 9
10 import 'package:analyzer/instrumentation/instrumentation.dart'; 10 import 'package:analyzer/instrumentation/instrumentation.dart';
11 import 'package:analyzer/plugin/task.dart'; 11 import 'package:analyzer/plugin/task.dart';
12 import 'package:analyzer/src/cancelable_future.dart'; 12 import 'package:analyzer/src/cancelable_future.dart';
13 import 'package:analyzer/src/context/cache.dart'; 13 import 'package:analyzer/src/context/cache.dart';
14 import 'package:analyzer/src/generated/ast.dart'; 14 import 'package:analyzer/src/generated/ast.dart';
15 import 'package:analyzer/src/generated/constant.dart'; 15 import 'package:analyzer/src/generated/constant.dart';
16 import 'package:analyzer/src/generated/element.dart'; 16 import 'package:analyzer/src/generated/element.dart';
17 import 'package:analyzer/src/generated/engine.dart' 17 import 'package:analyzer/src/generated/engine.dart'
18 hide 18 hide
19 AnalysisCache, 19 AnalysisCache,
20 CachePartition, 20 CachePartition,
21 SdkCachePartition, 21 SdkCachePartition,
22 UniversalCachePartition, 22 UniversalCachePartition,
23 WorkManager; 23 WorkManager;
24 import 'package:analyzer/src/generated/error.dart'; 24 import 'package:analyzer/src/generated/error.dart';
25 import 'package:analyzer/src/generated/html.dart' as ht show HtmlUnit; 25 import 'package:analyzer/src/generated/html.dart' as ht show HtmlUnit;
26 import 'package:analyzer/src/generated/incremental_resolver.dart'; 26 import 'package:analyzer/src/generated/incremental_resolver.dart';
27 import 'package:analyzer/src/generated/java_core.dart'; 27 import 'package:analyzer/src/generated/java_core.dart';
28 import 'package:analyzer/src/generated/java_engine.dart'; 28 import 'package:analyzer/src/generated/java_engine.dart';
29 import 'package:analyzer/src/generated/resolver.dart'; 29 import 'package:analyzer/src/generated/resolver.dart';
30 import 'package:analyzer/src/generated/scanner.dart';
31 import 'package:analyzer/src/generated/sdk.dart' show DartSdk; 30 import 'package:analyzer/src/generated/sdk.dart' show DartSdk;
32 import 'package:analyzer/src/generated/source.dart'; 31 import 'package:analyzer/src/generated/source.dart';
33 import 'package:analyzer/src/generated/utilities_collection.dart'; 32 import 'package:analyzer/src/generated/utilities_collection.dart';
34 import 'package:analyzer/src/task/dart.dart'; 33 import 'package:analyzer/src/task/dart.dart';
35 import 'package:analyzer/src/task/dart_work_manager.dart'; 34 import 'package:analyzer/src/task/dart_work_manager.dart';
36 import 'package:analyzer/src/task/driver.dart'; 35 import 'package:analyzer/src/task/driver.dart';
37 import 'package:analyzer/src/task/incremental_element_builder.dart'; 36 import 'package:analyzer/src/task/incremental_element_builder.dart';
38 import 'package:analyzer/src/task/manager.dart'; 37 import 'package:analyzer/src/task/manager.dart';
39 import 'package:analyzer/task/dart.dart'; 38 import 'package:analyzer/task/dart.dart';
40 import 'package:analyzer/task/general.dart'; 39 import 'package:analyzer/task/general.dart';
(...skipping 524 matching lines...) Expand 10 before | Expand all | Expand 10 after
565 564
566 @override 565 @override
567 String computeDocumentationComment(Element element) { 566 String computeDocumentationComment(Element element) {
568 if (element == null) { 567 if (element == null) {
569 return null; 568 return null;
570 } 569 }
571 Source source = element.source; 570 Source source = element.source;
572 if (source == null) { 571 if (source == null) {
573 return null; 572 return null;
574 } 573 }
575 CompilationUnit unit = parseCompilationUnit(source); 574 SourceRange docRange = element.docRange;
576 if (unit == null) { 575 if (docRange == null) {
577 return null; 576 return null;
578 } 577 }
579 NodeLocator locator = new NodeLocator(element.nameOffset); 578 String code = getContents(source).data;
580 AstNode nameNode = locator.searchWithin(unit); 579 String comment = code.substring(docRange.offset, docRange.end);
581 while (nameNode != null) { 580 return comment.replaceAll('\r\n', '\n');
582 if (nameNode is AnnotatedNode) {
583 Comment comment = nameNode.documentationComment;
584 if (comment == null) {
585 return null;
586 }
587 StringBuffer buffer = new StringBuffer();
588 List<Token> tokens = comment.tokens;
589 for (int i = 0; i < tokens.length; i++) {
590 if (i > 0) {
591 buffer.write("\n");
592 }
593 buffer.write(tokens[i].lexeme);
594 }
595 return buffer.toString();
596 }
597 nameNode = nameNode.parent;
598 }
599 return null;
600 } 581 }
601 582
602 @override 583 @override
603 List<AnalysisError> computeErrors(Source source) { 584 List<AnalysisError> computeErrors(Source source) {
604 String name = source.shortName; 585 String name = source.shortName;
605 if (AnalysisEngine.isDartFileName(name)) { 586 if (AnalysisEngine.isDartFileName(name)) {
606 return computeResult(source, DART_ERRORS); 587 return computeResult(source, DART_ERRORS);
607 } else if (AnalysisEngine.isHtmlFileName(name)) { 588 } else if (AnalysisEngine.isHtmlFileName(name)) {
608 return computeResult(source, HTML_ERRORS); 589 return computeResult(source, HTML_ERRORS);
609 } 590 }
(...skipping 1498 matching lines...) Expand 10 before | Expand all | Expand 10 after
2108 new PendingFuture<T>(_context, target, computeValue); 2089 new PendingFuture<T>(_context, target, computeValue);
2109 if (!pendingFuture.evaluate(entry)) { 2090 if (!pendingFuture.evaluate(entry)) {
2110 _context._pendingFutureTargets 2091 _context._pendingFutureTargets
2111 .putIfAbsent(target, () => <PendingFuture>[]) 2092 .putIfAbsent(target, () => <PendingFuture>[])
2112 .add(pendingFuture); 2093 .add(pendingFuture);
2113 scheduleComputation(); 2094 scheduleComputation();
2114 } 2095 }
2115 return pendingFuture.future; 2096 return pendingFuture.future;
2116 } 2097 }
2117 } 2098 }
OLDNEW
« no previous file with comments | « no previous file | pkg/analyzer/lib/src/generated/element.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698