| 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 domain.execution; | 5 library domain.execution; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 | 9 |
| 10 import 'package:analysis_server/src/analysis_server.dart'; | 10 import 'package:analysis_server/src/analysis_server.dart'; |
| (...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 86 | 86 |
| 87 /** | 87 /** |
| 88 * Implement the 'execution.mapUri' request. | 88 * Implement the 'execution.mapUri' request. |
| 89 */ | 89 */ |
| 90 Response mapUri(Request request) { | 90 Response mapUri(Request request) { |
| 91 ExecutionMapUriParams params = | 91 ExecutionMapUriParams params = |
| 92 new ExecutionMapUriParams.fromRequest(request); | 92 new ExecutionMapUriParams.fromRequest(request); |
| 93 String contextId = params.id; | 93 String contextId = params.id; |
| 94 String path = contextMap[contextId]; | 94 String path = contextMap[contextId]; |
| 95 if (path == null) { | 95 if (path == null) { |
| 96 return new Response.invalidParameter( | 96 return new Response.invalidParameter(request, 'id', |
| 97 request, | |
| 98 'id', | |
| 99 'There is no execution context with an id of $contextId'); | 97 'There is no execution context with an id of $contextId'); |
| 100 } | 98 } |
| 101 AnalysisContext context = server.getAnalysisContext(path); | 99 AnalysisContext context = server.getAnalysisContext(path); |
| 102 if (context == null) { | 100 if (context == null) { |
| 103 return new Response.invalidExecutionContext(request, contextId); | 101 return new Response.invalidExecutionContext(request, contextId); |
| 104 } | 102 } |
| 105 String file = params.file; | 103 String file = params.file; |
| 106 String uri = params.uri; | 104 String uri = params.uri; |
| 107 if (file != null) { | 105 if (file != null) { |
| 108 if (uri != null) { | 106 if (uri != null) { |
| 109 return new Response.invalidParameter( | 107 return new Response.invalidParameter(request, 'file', |
| 110 request, | |
| 111 'file', | |
| 112 'Either file or uri must be provided, but not both'); | 108 'Either file or uri must be provided, but not both'); |
| 113 } | 109 } |
| 114 Resource resource = server.resourceProvider.getResource(file); | 110 Resource resource = server.resourceProvider.getResource(file); |
| 115 if (!resource.exists) { | 111 if (!resource.exists) { |
| 116 return new Response.invalidParameter(request, 'file', 'Must exist'); | 112 return new Response.invalidParameter(request, 'file', 'Must exist'); |
| 117 } else if (resource is! File) { | 113 } else if (resource is! File) { |
| 118 return new Response.invalidParameter( | 114 return new Response.invalidParameter( |
| 119 request, | 115 request, 'file', 'Must not refer to a directory'); |
| 120 'file', | |
| 121 'Must not refer to a directory'); | |
| 122 } | 116 } |
| 123 Source source = server.getSource(file); | 117 Source source = server.getSource(file); |
| 124 uri = context.sourceFactory.restoreUri(source).toString(); | 118 uri = context.sourceFactory.restoreUri(source).toString(); |
| 125 return new ExecutionMapUriResult(uri: uri).toResponse(request.id); | 119 return new ExecutionMapUriResult(uri: uri).toResponse(request.id); |
| 126 } else if (uri != null) { | 120 } else if (uri != null) { |
| 127 Source source = context.sourceFactory.forUri(uri); | 121 Source source = context.sourceFactory.forUri(uri); |
| 128 if (source == null) { | 122 if (source == null) { |
| 129 return new Response.invalidParameter(request, 'uri', 'Invalid URI'); | 123 return new Response.invalidParameter(request, 'uri', 'Invalid URI'); |
| 130 } | 124 } |
| 131 file = source.fullName; | 125 file = source.fullName; |
| 132 return new ExecutionMapUriResult(file: file).toResponse(request.id); | 126 return new ExecutionMapUriResult(file: file).toResponse(request.id); |
| 133 } | 127 } |
| 134 return new Response.invalidParameter( | 128 return new Response.invalidParameter( |
| 135 request, | 129 request, 'file', 'Either file or uri must be provided'); |
| 136 'file', | |
| 137 'Either file or uri must be provided'); | |
| 138 } | 130 } |
| 139 | 131 |
| 140 /** | 132 /** |
| 141 * Implement the 'execution.setSubscriptions' request. | 133 * Implement the 'execution.setSubscriptions' request. |
| 142 */ | 134 */ |
| 143 Response setSubscriptions(Request request) { | 135 Response setSubscriptions(Request request) { |
| 144 List<ExecutionService> subscriptions = | 136 List<ExecutionService> subscriptions = |
| 145 new ExecutionSetSubscriptionsParams.fromRequest(request).subscriptions; | 137 new ExecutionSetSubscriptionsParams.fromRequest(request).subscriptions; |
| 146 if (subscriptions.contains(ExecutionService.LAUNCH_DATA)) { | 138 if (subscriptions.contains(ExecutionService.LAUNCH_DATA)) { |
| 147 if (onFileAnalyzed == null) { | 139 if (onFileAnalyzed == null) { |
| (...skipping 21 matching lines...) Expand all Loading... |
| 169 ExecutableKind kind = ExecutableKind.NOT_EXECUTABLE; | 161 ExecutableKind kind = ExecutableKind.NOT_EXECUTABLE; |
| 170 if (context.isClientLibrary(source)) { | 162 if (context.isClientLibrary(source)) { |
| 171 kind = ExecutableKind.CLIENT; | 163 kind = ExecutableKind.CLIENT; |
| 172 if (context.isServerLibrary(source)) { | 164 if (context.isServerLibrary(source)) { |
| 173 kind = ExecutableKind.EITHER; | 165 kind = ExecutableKind.EITHER; |
| 174 } | 166 } |
| 175 } else if (context.isServerLibrary(source)) { | 167 } else if (context.isServerLibrary(source)) { |
| 176 kind = ExecutableKind.SERVER; | 168 kind = ExecutableKind.SERVER; |
| 177 } | 169 } |
| 178 server.sendNotification( | 170 server.sendNotification( |
| 179 new ExecutionLaunchDataParams(filePath, kind: kind).toNotification()
); | 171 new ExecutionLaunchDataParams(filePath, kind: kind) |
| 172 .toNotification()); |
| 180 } else if (AnalysisEngine.isHtmlFileName(filePath)) { | 173 } else if (AnalysisEngine.isHtmlFileName(filePath)) { |
| 181 List<Source> libraries = context.getLibrariesReferencedFromHtml(source); | 174 List<Source> libraries = context.getLibrariesReferencedFromHtml(source); |
| 182 server.sendNotification( | 175 server.sendNotification(new ExecutionLaunchDataParams(filePath, |
| 183 new ExecutionLaunchDataParams( | 176 referencedFiles: _getFullNames(libraries)).toNotification()); |
| 184 filePath, | |
| 185 referencedFiles: _getFullNames(libraries)).toNotification()); | |
| 186 } | 177 } |
| 187 }); | 178 }); |
| 188 } | 179 } |
| 189 | 180 |
| 190 /** | 181 /** |
| 191 * Return `true` if the given [filePath] represents a file that is in an | 182 * Return `true` if the given [filePath] represents a file that is in an |
| 192 * analysis root. | 183 * analysis root. |
| 193 */ | 184 */ |
| 194 bool _isInAnalysisRoot(String filePath) => | 185 bool _isInAnalysisRoot(String filePath) => |
| 195 server.contextDirectoryManager.isInAnalysisRoot(filePath); | 186 server.contextDirectoryManager.isInAnalysisRoot(filePath); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 212 librarySources.remove(source); | 203 librarySources.remove(source); |
| 213 } | 204 } |
| 214 for (Source source in librarySources) { | 205 for (Source source in librarySources) { |
| 215 _sendKindNotification(source.fullName, ExecutableKind.NOT_EXECUTABLE); | 206 _sendKindNotification(source.fullName, ExecutableKind.NOT_EXECUTABLE); |
| 216 } | 207 } |
| 217 for (Source source in context.htmlSources) { | 208 for (Source source in context.htmlSources) { |
| 218 String filePath = source.fullName; | 209 String filePath = source.fullName; |
| 219 if (_isInAnalysisRoot(filePath)) { | 210 if (_isInAnalysisRoot(filePath)) { |
| 220 List<Source> libraries = | 211 List<Source> libraries = |
| 221 context.getLibrariesReferencedFromHtml(source); | 212 context.getLibrariesReferencedFromHtml(source); |
| 222 server.sendNotification( | 213 server.sendNotification(new ExecutionLaunchDataParams(filePath, |
| 223 new ExecutionLaunchDataParams( | 214 referencedFiles: _getFullNames(libraries)).toNotification()); |
| 224 filePath, | |
| 225 referencedFiles: _getFullNames(libraries)).toNotification()); | |
| 226 } | 215 } |
| 227 } | 216 } |
| 228 } | 217 } |
| 229 } | 218 } |
| 230 | 219 |
| 231 /** | 220 /** |
| 232 * Send a notification indicating the [kind] of the file with the given | 221 * Send a notification indicating the [kind] of the file with the given |
| 233 * [filePath], but only if the file is in an analysis root. | 222 * [filePath], but only if the file is in an analysis root. |
| 234 */ | 223 */ |
| 235 void _sendKindNotification(String filePath, ExecutableKind kind) { | 224 void _sendKindNotification(String filePath, ExecutableKind kind) { |
| 236 if (_isInAnalysisRoot(filePath)) { | 225 if (_isInAnalysisRoot(filePath)) { |
| 237 server.sendNotification( | 226 server.sendNotification( |
| 238 new ExecutionLaunchDataParams(filePath, kind: kind).toNotification()); | 227 new ExecutionLaunchDataParams(filePath, kind: kind).toNotification()); |
| 239 } | 228 } |
| 240 } | 229 } |
| 241 | 230 |
| 242 static List<String> _getFullNames(List<Source> sources) { | 231 static List<String> _getFullNames(List<Source> sources) { |
| 243 return sources.map((Source source) => source.fullName).toList(); | 232 return sources.map((Source source) => source.fullName).toList(); |
| 244 } | 233 } |
| 245 } | 234 } |
| OLD | NEW |