| Index: pkg/analysis_server/lib/src/operation/operation_analysis.dart
|
| diff --git a/pkg/analysis_server/lib/src/operation/operation_analysis.dart b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
|
| index 712ffbff1156a7e9445278718fa176dca4d67c4a..973b831d2393dc55b5543a93510e63b1b2ef6181 100644
|
| --- a/pkg/analysis_server/lib/src/operation/operation_analysis.dart
|
| +++ b/pkg/analysis_server/lib/src/operation/operation_analysis.dart
|
| @@ -77,6 +77,7 @@ void scheduleIndexOperation(AnalysisServer server, String file,
|
| */
|
| void scheduleNotificationOperations(
|
| AnalysisServer server,
|
| + Source source,
|
| String file,
|
| LineInfo lineInfo,
|
| AnalysisContext context,
|
| @@ -99,12 +100,10 @@ void scheduleNotificationOperations(
|
| }
|
| if (server.hasAnalysisSubscription(
|
| protocol.AnalysisService.NAVIGATION, file)) {
|
| - Source source = resolvedDartUnit.element.source;
|
| server.scheduleOperation(new NavigationOperation(context, source));
|
| }
|
| if (server.hasAnalysisSubscription(
|
| protocol.AnalysisService.OCCURRENCES, file)) {
|
| - Source source = resolvedDartUnit.element.source;
|
| server.scheduleOperation(new OccurrencesOperation(context, source));
|
| }
|
| if (server.hasAnalysisSubscription(
|
| @@ -116,8 +115,9 @@ void scheduleNotificationOperations(
|
| if (dartUnit != null) {
|
| if (server.hasAnalysisSubscription(
|
| protocol.AnalysisService.OUTLINE, file)) {
|
| - server.scheduleOperation(
|
| - new _DartOutlineOperation(context, file, lineInfo, dartUnit));
|
| + SourceKind sourceKind = context.getKindOf(source);
|
| + server.scheduleOperation(new _DartOutlineOperation(
|
| + context, file, lineInfo, sourceKind, dartUnit));
|
| }
|
| }
|
| // errors
|
| @@ -213,12 +213,23 @@ void sendAnalysisNotificationOccurrences(
|
| }
|
|
|
| void sendAnalysisNotificationOutline(AnalysisServer server, String file,
|
| - LineInfo lineInfo, CompilationUnit dartUnit) {
|
| + LineInfo lineInfo, SourceKind sourceKind, CompilationUnit dartUnit) {
|
| _sendNotification(server, () {
|
| + // compute FileKind
|
| + protocol.FileKind fileKind = protocol.FileKind.LIBRARY;
|
| + if (sourceKind == SourceKind.LIBRARY) {
|
| + fileKind = protocol.FileKind.LIBRARY;
|
| + } else if (sourceKind == SourceKind.PART) {
|
| + fileKind = protocol.FileKind.PART;
|
| + }
|
| + // compute library name
|
| + String libraryName = _computeLibraryName(dartUnit);
|
| + // compute Outline
|
| var computer = new DartUnitOutlineComputer(file, lineInfo, dartUnit);
|
| - var outline = computer.compute();
|
| - var params = new protocol.AnalysisOutlineParams(
|
| - file, protocol.FileKind.LIBRARY, outline);
|
| + protocol.Outline outline = computer.compute();
|
| + // send notification
|
| + var params = new protocol.AnalysisOutlineParams(file, fileKind, outline,
|
| + libraryName: libraryName);
|
| server.sendNotification(params.toNotification());
|
| });
|
| }
|
| @@ -242,6 +253,20 @@ void setCacheSize(AnalysisContext context, int cacheSize) {
|
| context.analysisOptions = options;
|
| }
|
|
|
| +String _computeLibraryName(CompilationUnit unit) {
|
| + for (Directive directive in unit.directives) {
|
| + if (directive is LibraryDirective && directive.name != null) {
|
| + return directive.name.name;
|
| + }
|
| + }
|
| + for (Directive directive in unit.directives) {
|
| + if (directive is PartOfDirective && directive.libraryName != null) {
|
| + return directive.libraryName.name;
|
| + }
|
| + }
|
| + return null;
|
| +}
|
| +
|
| /**
|
| * Runs the given notification producing function [f], catching exceptions.
|
| */
|
| @@ -372,8 +397,8 @@ class PerformAnalysisOperation extends ServerOperation {
|
| // Dart
|
| CompilationUnit parsedDartUnit = notice.parsedDartUnit;
|
| CompilationUnit resolvedDartUnit = notice.resolvedDartUnit;
|
| - scheduleNotificationOperations(server, file, notice.lineInfo, context,
|
| - parsedDartUnit, resolvedDartUnit, notice.errors);
|
| + scheduleNotificationOperations(server, source, file, notice.lineInfo,
|
| + context, parsedDartUnit, resolvedDartUnit, notice.errors);
|
| // done
|
| server.fileAnalyzed(notice);
|
| }
|
| @@ -456,14 +481,15 @@ abstract class _DartNotificationOperation extends _SingleFileOperation {
|
|
|
| class _DartOutlineOperation extends _DartNotificationOperation {
|
| final LineInfo lineInfo;
|
| + final SourceKind sourceKind;
|
|
|
| - _DartOutlineOperation(
|
| - AnalysisContext context, String file, this.lineInfo, CompilationUnit unit)
|
| + _DartOutlineOperation(AnalysisContext context, String file, this.lineInfo,
|
| + this.sourceKind, CompilationUnit unit)
|
| : super(context, file, unit);
|
|
|
| @override
|
| void perform(AnalysisServer server) {
|
| - sendAnalysisNotificationOutline(server, file, lineInfo, unit);
|
| + sendAnalysisNotificationOutline(server, file, lineInfo, sourceKind, unit);
|
| }
|
| }
|
|
|
|
|