| OLD | NEW |
| 1 // Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2014, 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 operation.analysis; | 5 library operation.analysis; |
| 6 | 6 |
| 7 import 'package:analysis_server/src/analysis_server.dart'; | 7 import 'package:analysis_server/src/analysis_server.dart'; |
| 8 import 'package:analysis_server/src/computer/computer_highlights.dart'; | 8 import 'package:analysis_server/src/computer/computer_highlights.dart'; |
| 9 import 'package:analysis_server/src/computer/computer_navigation.dart'; | 9 import 'package:analysis_server/src/computer/computer_navigation.dart'; |
| 10 import 'package:analysis_server/src/computer/computer_occurrences.dart'; | 10 import 'package:analysis_server/src/computer/computer_occurrences.dart'; |
| 11 import 'package:analysis_server/src/computer/computer_outline.dart'; | 11 import 'package:analysis_server/src/computer/computer_outline.dart'; |
| 12 import 'package:analysis_server/src/computer/computer_overrides.dart'; | 12 import 'package:analysis_server/src/computer/computer_overrides.dart'; |
| 13 import 'package:analysis_server/src/constants.dart'; | 13 import 'package:analysis_server/src/constants.dart'; |
| 14 import 'package:analysis_server/src/operation/operation.dart'; | 14 import 'package:analysis_server/src/operation/operation.dart'; |
| 15 import 'package:analysis_server/src/protocol.dart'; | 15 import 'package:analysis_server/src/protocol.dart'; |
| 16 import 'package:analysis_services/constants.dart'; | 16 import 'package:analysis_services/constants.dart'; |
| 17 import 'package:analysis_services/index/index.dart'; | 17 import 'package:analysis_services/index/index.dart'; |
| 18 import 'package:analyzer/src/generated/ast.dart'; | 18 import 'package:analyzer/src/generated/ast.dart'; |
| 19 import 'package:analyzer/src/generated/engine.dart'; | 19 import 'package:analyzer/src/generated/engine.dart'; |
| 20 import 'package:analyzer/src/generated/error.dart'; | 20 import 'package:analyzer/src/generated/error.dart'; |
| 21 import 'package:analyzer/src/generated/html.dart'; | 21 import 'package:analyzer/src/generated/html.dart'; |
| 22 import 'package:analyzer/src/generated/source.dart'; | 22 import 'package:analyzer/src/generated/source.dart'; |
| 23 | 23 import 'package:analysis_server/src/computer/error.dart' as server_prefix; |
| 24 | |
| 25 Map<String, Object> errorToJson(LineInfo lineInfo, AnalysisError analysisError) | |
| 26 { | |
| 27 ErrorCode errorCode = analysisError.errorCode; | |
| 28 // prepare location | |
| 29 int offset = analysisError.offset; | |
| 30 Map<String, Object> location = { | |
| 31 FILE: analysisError.source.fullName, | |
| 32 OFFSET: offset, | |
| 33 LENGTH: analysisError.length | |
| 34 }; | |
| 35 if (lineInfo != null) { | |
| 36 LineInfo_Location lineLocation = lineInfo.getLocation(offset); | |
| 37 if (lineLocation != null) { | |
| 38 location[START_LINE] = lineLocation.lineNumber; | |
| 39 location[START_COLUMN] = lineLocation.columnNumber; | |
| 40 } | |
| 41 } | |
| 42 // fill JSON | |
| 43 Map<String, Object> result = { | |
| 44 // TODO(scheglov) add Enum.fullName ? | |
| 45 SEVERITY: errorCode.errorSeverity.name, | |
| 46 TYPE: errorCode.type.name, | |
| 47 LOCATION: location, | |
| 48 MESSAGE: analysisError.message | |
| 49 }; | |
| 50 if (analysisError.correction != null) { | |
| 51 result[CORRECTION] = analysisError.correction; | |
| 52 } | |
| 53 return result; | |
| 54 } | |
| 55 | 24 |
| 56 | 25 |
| 57 void sendAnalysisNotificationErrors(AnalysisServer server, String file, | 26 void sendAnalysisNotificationErrors(AnalysisServer server, String file, |
| 58 LineInfo lineInfo, List<AnalysisError> errors) { | 27 LineInfo lineInfo, List<AnalysisError> errors) { |
| 59 Notification notification = new Notification(ANALYSIS_ERRORS); | 28 Notification notification = new Notification(ANALYSIS_ERRORS); |
| 60 notification.setParameter(FILE, file); | 29 notification.setParameter(FILE, file); |
| 61 notification.setParameter(ERRORS, errors.map((error) { | 30 notification.setParameter( |
| 62 return errorToJson(lineInfo, error); | 31 ERRORS, |
| 63 }).toList()); | 32 server_prefix.engineErrorsToJson(lineInfo, errors)); |
| 64 server.sendNotification(notification); | 33 server.sendNotification(notification); |
| 65 } | 34 } |
| 66 | 35 |
| 67 | 36 |
| 68 void sendAnalysisNotificationHighlights(AnalysisServer server, String file, | 37 void sendAnalysisNotificationHighlights(AnalysisServer server, String file, |
| 69 CompilationUnit dartUnit) { | 38 CompilationUnit dartUnit) { |
| 70 Notification notification = new Notification(ANALYSIS_HIGHLIGHTS); | 39 Notification notification = new Notification(ANALYSIS_HIGHLIGHTS); |
| 71 notification.setParameter(FILE, file); | 40 notification.setParameter(FILE, file); |
| 72 notification.setParameter(REGIONS, new DartUnitHighlightsComputer( | 41 notification.setParameter( |
| 73 dartUnit).compute()); | 42 REGIONS, |
| 43 new DartUnitHighlightsComputer(dartUnit).compute()); |
| 74 server.sendNotification(notification); | 44 server.sendNotification(notification); |
| 75 } | 45 } |
| 76 | 46 |
| 77 | 47 |
| 78 void sendAnalysisNotificationNavigation(AnalysisServer server, String file, | 48 void sendAnalysisNotificationNavigation(AnalysisServer server, String file, |
| 79 CompilationUnit dartUnit) { | 49 CompilationUnit dartUnit) { |
| 80 Notification notification = new Notification(ANALYSIS_NAVIGATION); | 50 Notification notification = new Notification(ANALYSIS_NAVIGATION); |
| 81 notification.setParameter(FILE, file); | 51 notification.setParameter(FILE, file); |
| 82 notification.setParameter(REGIONS, new DartUnitNavigationComputer( | 52 notification.setParameter( |
| 83 dartUnit).compute()); | 53 REGIONS, |
| 54 new DartUnitNavigationComputer(dartUnit).compute()); |
| 84 server.sendNotification(notification); | 55 server.sendNotification(notification); |
| 85 } | 56 } |
| 86 | 57 |
| 87 | 58 |
| 88 void sendAnalysisNotificationOccurrences(AnalysisServer server, String file, | 59 void sendAnalysisNotificationOccurrences(AnalysisServer server, String file, |
| 89 CompilationUnit dartUnit) { | 60 CompilationUnit dartUnit) { |
| 90 Notification notification = new Notification(ANALYSIS_OCCURRENCES); | 61 Notification notification = new Notification(ANALYSIS_OCCURRENCES); |
| 91 notification.setParameter(FILE, file); | 62 notification.setParameter(FILE, file); |
| 92 notification.setParameter(OCCURRENCES, new DartUnitOccurrencesComputer( | 63 notification.setParameter( |
| 93 dartUnit).compute()); | 64 OCCURRENCES, |
| 65 new DartUnitOccurrencesComputer(dartUnit).compute()); |
| 94 server.sendNotification(notification); | 66 server.sendNotification(notification); |
| 95 } | 67 } |
| 96 | 68 |
| 97 | 69 |
| 98 void sendAnalysisNotificationOutline(AnalysisServer server, | 70 void sendAnalysisNotificationOutline(AnalysisServer server, |
| 99 AnalysisContext context, Source source, CompilationUnit dartUnit) { | 71 AnalysisContext context, Source source, CompilationUnit dartUnit) { |
| 100 Notification notification = new Notification(ANALYSIS_OUTLINE); | 72 Notification notification = new Notification(ANALYSIS_OUTLINE); |
| 101 notification.setParameter(FILE, source.fullName); | 73 notification.setParameter(FILE, source.fullName); |
| 102 notification.setParameter(OUTLINE, new DartUnitOutlineComputer(context, | 74 notification.setParameter( |
| 103 source, dartUnit).compute()); | 75 OUTLINE, |
| 76 new DartUnitOutlineComputer(context, source, dartUnit).compute()); |
| 104 server.sendNotification(notification); | 77 server.sendNotification(notification); |
| 105 } | 78 } |
| 106 | 79 |
| 107 | 80 |
| 108 void sendAnalysisNotificationOverrides(AnalysisServer server, | 81 void sendAnalysisNotificationOverrides(AnalysisServer server, String file, |
| 109 String file, CompilationUnit dartUnit) { | 82 CompilationUnit dartUnit) { |
| 110 Notification notification = new Notification(ANALYSIS_OVERRIDES); | 83 Notification notification = new Notification(ANALYSIS_OVERRIDES); |
| 111 notification.setParameter(FILE, file); | 84 notification.setParameter(FILE, file); |
| 112 notification.setParameter(OVERRIDES, new DartUnitOverridesComputer( | 85 notification.setParameter( |
| 113 dartUnit).compute()); | 86 OVERRIDES, |
| 87 new DartUnitOverridesComputer(dartUnit).compute()); |
| 114 server.sendNotification(notification); | 88 server.sendNotification(notification); |
| 115 } | 89 } |
| 116 | 90 |
| 117 | 91 |
| 118 /** | 92 /** |
| 119 * Instances of [PerformAnalysisOperation] perform a single analysis task. | 93 * Instances of [PerformAnalysisOperation] perform a single analysis task. |
| 120 */ | 94 */ |
| 121 class PerformAnalysisOperation extends ServerOperation { | 95 class PerformAnalysisOperation extends ServerOperation { |
| 122 final AnalysisContext context; | 96 final AnalysisContext context; |
| 123 final bool isContinue; | 97 final bool isContinue; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 } | 153 } |
| 180 if (server.hasAnalysisSubscription(AnalysisService.OUTLINE, file)) { | 154 if (server.hasAnalysisSubscription(AnalysisService.OUTLINE, file)) { |
| 181 sendAnalysisNotificationOutline(server, context, source, dartUnit); | 155 sendAnalysisNotificationOutline(server, context, source, dartUnit); |
| 182 } | 156 } |
| 183 if (server.hasAnalysisSubscription(AnalysisService.OVERRIDES, file)) { | 157 if (server.hasAnalysisSubscription(AnalysisService.OVERRIDES, file)) { |
| 184 sendAnalysisNotificationOverrides(server, file, dartUnit); | 158 sendAnalysisNotificationOverrides(server, file, dartUnit); |
| 185 } | 159 } |
| 186 } | 160 } |
| 187 // TODO(scheglov) use default subscriptions | 161 // TODO(scheglov) use default subscriptions |
| 188 if (!source.isInSystemLibrary) { | 162 if (!source.isInSystemLibrary) { |
| 189 sendAnalysisNotificationErrors(server, file, notice.lineInfo, | 163 sendAnalysisNotificationErrors( |
| 164 server, |
| 165 file, |
| 166 notice.lineInfo, |
| 190 notice.errors); | 167 notice.errors); |
| 191 } | 168 } |
| 192 } | 169 } |
| 193 } | 170 } |
| 194 | 171 |
| 195 void updateIndex(Index index, List<ChangeNotice> notices) { | 172 void updateIndex(Index index, List<ChangeNotice> notices) { |
| 196 if (index == null) { | 173 if (index == null) { |
| 197 return; | 174 return; |
| 198 } | 175 } |
| 199 for (ChangeNotice notice in notices) { | 176 for (ChangeNotice notice in notices) { |
| 200 // Dart | 177 // Dart |
| 201 { | 178 { |
| 202 CompilationUnit dartUnit = notice.compilationUnit; | 179 CompilationUnit dartUnit = notice.compilationUnit; |
| 203 if (dartUnit != null) { | 180 if (dartUnit != null) { |
| 204 index.indexUnit(context, dartUnit); | 181 index.indexUnit(context, dartUnit); |
| 205 } | 182 } |
| 206 } | 183 } |
| 207 // HTML | 184 // HTML |
| 208 { | 185 { |
| 209 HtmlUnit htmlUnit = notice.htmlUnit; | 186 HtmlUnit htmlUnit = notice.htmlUnit; |
| 210 if (htmlUnit != null) { | 187 if (htmlUnit != null) { |
| 211 index.indexHtmlUnit(context, htmlUnit); | 188 index.indexHtmlUnit(context, htmlUnit); |
| 212 } | 189 } |
| 213 } | 190 } |
| 214 } | 191 } |
| 215 } | 192 } |
| 216 } | 193 } |
| OLD | NEW |