| OLD | NEW |
| 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.plugin.engine_plugin; | 5 library analyzer.src.plugin.engine_plugin; |
| 6 | 6 |
| 7 import 'package:analyzer/error/error.dart' show AnalysisError; |
| 7 import 'package:analyzer/plugin/task.dart'; | 8 import 'package:analyzer/plugin/task.dart'; |
| 8 import 'package:analyzer/src/generated/engine.dart' | 9 import 'package:analyzer/src/generated/engine.dart' |
| 9 show InternalAnalysisContext; | 10 show InternalAnalysisContext; |
| 10 import 'package:analyzer/src/generated/error.dart' show AnalysisError; | |
| 11 import 'package:analyzer/src/task/dart.dart'; | 11 import 'package:analyzer/src/task/dart.dart'; |
| 12 import 'package:analyzer/src/task/dart_work_manager.dart'; | 12 import 'package:analyzer/src/task/dart_work_manager.dart'; |
| 13 import 'package:analyzer/src/task/general.dart'; | 13 import 'package:analyzer/src/task/general.dart'; |
| 14 import 'package:analyzer/src/task/html.dart'; | 14 import 'package:analyzer/src/task/html.dart'; |
| 15 import 'package:analyzer/src/task/html_work_manager.dart'; | 15 import 'package:analyzer/src/task/html_work_manager.dart'; |
| 16 import 'package:analyzer/src/task/options_work_manager.dart'; |
| 17 import 'package:analyzer/src/task/yaml.dart'; |
| 16 import 'package:analyzer/task/model.dart'; | 18 import 'package:analyzer/task/model.dart'; |
| 17 import 'package:plugin/plugin.dart'; | 19 import 'package:plugin/plugin.dart'; |
| 18 | 20 |
| 19 /** | 21 /** |
| 20 * A plugin that defines the extension points and extensions that are inherently | 22 * A plugin that defines the extension points and extensions that are inherently |
| 21 * defined by the analysis engine. | 23 * defined by the analysis engine. |
| 22 */ | 24 */ |
| 23 class EnginePlugin implements Plugin { | 25 class EnginePlugin implements Plugin { |
| 24 /** | 26 /** |
| 25 * The simple identifier of the extension point that allows plugins to | 27 * The simple identifier of the extension point that allows plugins to |
| (...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 57 | 59 |
| 58 /** | 60 /** |
| 59 * The unique identifier of this plugin. | 61 * The unique identifier of this plugin. |
| 60 */ | 62 */ |
| 61 static const String UNIQUE_IDENTIFIER = 'analysis_engine.core'; | 63 static const String UNIQUE_IDENTIFIER = 'analysis_engine.core'; |
| 62 | 64 |
| 63 /** | 65 /** |
| 64 * The extension point that allows plugins to register new analysis error | 66 * The extension point that allows plugins to register new analysis error |
| 65 * results for a Dart source. | 67 * results for a Dart source. |
| 66 */ | 68 */ |
| 67 ExtensionPoint dartErrorsForSourceExtensionPoint; | 69 ExtensionPoint<ListResultDescriptor<AnalysisError>> |
| 70 dartErrorsForSourceExtensionPoint; |
| 68 | 71 |
| 69 /** | 72 /** |
| 70 * The extension point that allows plugins to register new analysis error | 73 * The extension point that allows plugins to register new analysis error |
| 71 * results for a Dart library specific unit. | 74 * results for a Dart library specific unit. |
| 72 */ | 75 */ |
| 73 ExtensionPoint dartErrorsForUnitExtensionPoint; | 76 ExtensionPoint<ListResultDescriptor<AnalysisError>> |
| 77 dartErrorsForUnitExtensionPoint; |
| 74 | 78 |
| 75 /** | 79 /** |
| 76 * The extension point that allows plugins to register new analysis error | 80 * The extension point that allows plugins to register new analysis error |
| 77 * results for an HTML source. | 81 * results for an HTML source. |
| 78 */ | 82 */ |
| 79 ExtensionPoint htmlErrorsExtensionPoint; | 83 ExtensionPoint<ListResultDescriptor<AnalysisError>> htmlErrorsExtensionPoint; |
| 80 | 84 |
| 81 /** | 85 /** |
| 82 * The extension point that allows plugins to register new analysis tasks with | 86 * The extension point that allows plugins to register new analysis tasks with |
| 83 * the analysis engine. | 87 * the analysis engine. |
| 84 */ | 88 */ |
| 85 ExtensionPoint taskExtensionPoint; | 89 ExtensionPoint<TaskDescriptor> taskExtensionPoint; |
| 86 | 90 |
| 87 /** | 91 /** |
| 88 * The extension point that allows plugins to register new work manager | 92 * The extension point that allows plugins to register new work manager |
| 89 * factories with the analysis engine. | 93 * factories with the analysis engine. |
| 90 */ | 94 */ |
| 91 ExtensionPoint workManagerFactoryExtensionPoint; | 95 ExtensionPoint<WorkManagerFactory> workManagerFactoryExtensionPoint; |
| 92 | 96 |
| 93 /** | 97 /** |
| 94 * Initialize a newly created plugin. | 98 * Initialize a newly created plugin. |
| 95 */ | 99 */ |
| 96 EnginePlugin(); | 100 EnginePlugin(); |
| 97 | 101 |
| 98 /** | 102 /** |
| 99 * Return a list containing all of the contributed analysis error result | 103 * Return a list containing all of the contributed analysis error result |
| 100 * descriptors for Dart sources. | 104 * descriptors for Dart sources. |
| 101 */ | 105 */ |
| (...skipping 26 matching lines...) Expand all Loading... |
| 128 | 132 |
| 129 /** | 133 /** |
| 130 * Return a list containing all of the work manager factories that were | 134 * Return a list containing all of the work manager factories that were |
| 131 * contributed. | 135 * contributed. |
| 132 */ | 136 */ |
| 133 List<WorkManagerFactory> get workManagerFactories => | 137 List<WorkManagerFactory> get workManagerFactories => |
| 134 workManagerFactoryExtensionPoint.extensions; | 138 workManagerFactoryExtensionPoint.extensions; |
| 135 | 139 |
| 136 @override | 140 @override |
| 137 void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { | 141 void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { |
| 138 dartErrorsForSourceExtensionPoint = registerExtensionPoint( | 142 dartErrorsForSourceExtensionPoint = |
| 139 DART_ERRORS_FOR_SOURCE_EXTENSION_POINT, | 143 new ExtensionPoint<ListResultDescriptor<AnalysisError>>( |
| 140 _validateAnalysisErrorListResultDescriptor); | 144 this, DART_ERRORS_FOR_SOURCE_EXTENSION_POINT, null); |
| 141 dartErrorsForUnitExtensionPoint = registerExtensionPoint( | 145 registerExtensionPoint(dartErrorsForSourceExtensionPoint); |
| 142 DART_ERRORS_FOR_UNIT_EXTENSION_POINT, | 146 dartErrorsForUnitExtensionPoint = |
| 143 _validateAnalysisErrorListResultDescriptor); | 147 new ExtensionPoint<ListResultDescriptor<AnalysisError>>( |
| 144 htmlErrorsExtensionPoint = registerExtensionPoint( | 148 this, DART_ERRORS_FOR_UNIT_EXTENSION_POINT, null); |
| 145 HTML_ERRORS_EXTENSION_POINT, | 149 registerExtensionPoint(dartErrorsForUnitExtensionPoint); |
| 146 _validateAnalysisErrorListResultDescriptor); | 150 htmlErrorsExtensionPoint = |
| 151 new ExtensionPoint<ListResultDescriptor<AnalysisError>>( |
| 152 this, HTML_ERRORS_EXTENSION_POINT, null); |
| 153 registerExtensionPoint(htmlErrorsExtensionPoint); |
| 147 taskExtensionPoint = | 154 taskExtensionPoint = |
| 148 registerExtensionPoint(TASK_EXTENSION_POINT, _validateTaskExtension); | 155 new ExtensionPoint<TaskDescriptor>(this, TASK_EXTENSION_POINT, null); |
| 149 workManagerFactoryExtensionPoint = registerExtensionPoint( | 156 registerExtensionPoint(taskExtensionPoint); |
| 150 WORK_MANAGER_FACTORY_EXTENSION_POINT, | 157 workManagerFactoryExtensionPoint = new ExtensionPoint<WorkManagerFactory>( |
| 151 _validateWorkManagerFactoryExtension); | 158 this, WORK_MANAGER_FACTORY_EXTENSION_POINT, null); |
| 159 registerExtensionPoint(workManagerFactoryExtensionPoint); |
| 152 } | 160 } |
| 153 | 161 |
| 154 @override | 162 @override |
| 155 void registerExtensions(RegisterExtension registerExtension) { | 163 void registerExtensions(RegisterExtension registerExtension) { |
| 156 _registerTaskExtensions(registerExtension); | 164 _registerTaskExtensions(registerExtension); |
| 157 _registerWorkManagerFactoryExtensions(registerExtension); | 165 _registerWorkManagerFactoryExtensions(registerExtension); |
| 158 _registerDartErrorsForSource(registerExtension); | 166 _registerDartErrorsForSource(registerExtension); |
| 159 _registerDartErrorsForUnit(registerExtension); | 167 _registerDartErrorsForUnit(registerExtension); |
| 160 _registerHtmlErrors(registerExtension); | 168 _registerHtmlErrors(registerExtension); |
| 161 } | 169 } |
| (...skipping 21 matching lines...) Expand all Loading... |
| 183 // | 191 // |
| 184 // Register Dart tasks. | 192 // Register Dart tasks. |
| 185 // | 193 // |
| 186 registerExtension(taskId, BuildCompilationUnitElementTask.DESCRIPTOR); | 194 registerExtension(taskId, BuildCompilationUnitElementTask.DESCRIPTOR); |
| 187 registerExtension(taskId, BuildDirectiveElementsTask.DESCRIPTOR); | 195 registerExtension(taskId, BuildDirectiveElementsTask.DESCRIPTOR); |
| 188 registerExtension(taskId, BuildEnumMemberElementsTask.DESCRIPTOR); | 196 registerExtension(taskId, BuildEnumMemberElementsTask.DESCRIPTOR); |
| 189 registerExtension(taskId, BuildExportNamespaceTask.DESCRIPTOR); | 197 registerExtension(taskId, BuildExportNamespaceTask.DESCRIPTOR); |
| 190 registerExtension(taskId, BuildLibraryElementTask.DESCRIPTOR); | 198 registerExtension(taskId, BuildLibraryElementTask.DESCRIPTOR); |
| 191 registerExtension(taskId, BuildPublicNamespaceTask.DESCRIPTOR); | 199 registerExtension(taskId, BuildPublicNamespaceTask.DESCRIPTOR); |
| 192 registerExtension(taskId, BuildSourceExportClosureTask.DESCRIPTOR); | 200 registerExtension(taskId, BuildSourceExportClosureTask.DESCRIPTOR); |
| 193 registerExtension(taskId, BuildSourceImportExportClosureTask.DESCRIPTOR); | |
| 194 registerExtension(taskId, BuildTypeProviderTask.DESCRIPTOR); | 201 registerExtension(taskId, BuildTypeProviderTask.DESCRIPTOR); |
| 195 registerExtension(taskId, ComputeConstantDependenciesTask.DESCRIPTOR); | 202 registerExtension(taskId, ComputeConstantDependenciesTask.DESCRIPTOR); |
| 196 registerExtension(taskId, ComputeConstantValueTask.DESCRIPTOR); | 203 registerExtension(taskId, ComputeConstantValueTask.DESCRIPTOR); |
| 197 registerExtension( | 204 registerExtension( |
| 198 taskId, ComputeInferableStaticVariableDependenciesTask.DESCRIPTOR); | 205 taskId, ComputeInferableStaticVariableDependenciesTask.DESCRIPTOR); |
| 199 registerExtension(taskId, ComputeLibraryCycleTask.DESCRIPTOR); | 206 registerExtension(taskId, ComputeLibraryCycleTask.DESCRIPTOR); |
| 207 registerExtension(taskId, ComputeRequiredConstantsTask.DESCRIPTOR); |
| 200 registerExtension(taskId, ContainingLibrariesTask.DESCRIPTOR); | 208 registerExtension(taskId, ContainingLibrariesTask.DESCRIPTOR); |
| 201 registerExtension(taskId, DartErrorsTask.DESCRIPTOR); | 209 registerExtension(taskId, DartErrorsTask.DESCRIPTOR); |
| 202 registerExtension(taskId, EvaluateUnitConstantsTask.DESCRIPTOR); | 210 registerExtension(taskId, EvaluateUnitConstantsTask.DESCRIPTOR); |
| 203 registerExtension(taskId, GatherUsedImportedElementsTask.DESCRIPTOR); | 211 registerExtension(taskId, GatherUsedImportedElementsTask.DESCRIPTOR); |
| 204 registerExtension(taskId, GatherUsedLocalElementsTask.DESCRIPTOR); | 212 registerExtension(taskId, GatherUsedLocalElementsTask.DESCRIPTOR); |
| 205 registerExtension(taskId, GenerateHintsTask.DESCRIPTOR); | 213 registerExtension(taskId, GenerateHintsTask.DESCRIPTOR); |
| 206 registerExtension(taskId, GenerateLintsTask.DESCRIPTOR); | 214 registerExtension(taskId, GenerateLintsTask.DESCRIPTOR); |
| 207 registerExtension(taskId, InferInstanceMembersInUnitTask.DESCRIPTOR); | 215 registerExtension(taskId, InferInstanceMembersInUnitTask.DESCRIPTOR); |
| 208 registerExtension(taskId, InferStaticVariableTypesInUnitTask.DESCRIPTOR); | 216 registerExtension(taskId, InferStaticVariableTypesInUnitTask.DESCRIPTOR); |
| 209 registerExtension(taskId, InferStaticVariableTypeTask.DESCRIPTOR); | 217 registerExtension(taskId, InferStaticVariableTypeTask.DESCRIPTOR); |
| 210 registerExtension(taskId, LibraryErrorsReadyTask.DESCRIPTOR); | 218 registerExtension(taskId, LibraryErrorsReadyTask.DESCRIPTOR); |
| 211 registerExtension(taskId, LibraryUnitErrorsTask.DESCRIPTOR); | 219 registerExtension(taskId, LibraryUnitErrorsTask.DESCRIPTOR); |
| 212 registerExtension(taskId, ParseDartTask.DESCRIPTOR); | 220 registerExtension(taskId, ParseDartTask.DESCRIPTOR); |
| 213 registerExtension(taskId, PartiallyResolveUnitReferencesTask.DESCRIPTOR); | 221 registerExtension(taskId, PartiallyResolveUnitReferencesTask.DESCRIPTOR); |
| 222 registerExtension(taskId, ReadyLibraryElement2Task.DESCRIPTOR); |
| 223 registerExtension(taskId, ReadyLibraryElement5Task.DESCRIPTOR); |
| 224 registerExtension(taskId, ReadyLibraryElement7Task.DESCRIPTOR); |
| 225 registerExtension(taskId, ReadyResolvedUnitTask.DESCRIPTOR); |
| 226 registerExtension(taskId, ResolveConstantExpressionTask.DESCRIPTOR); |
| 227 registerExtension(taskId, ResolveDirectiveElementsTask.DESCRIPTOR); |
| 228 registerExtension(taskId, ResolvedUnit7InLibraryClosureTask.DESCRIPTOR); |
| 229 registerExtension(taskId, ResolvedUnit7InLibraryTask.DESCRIPTOR); |
| 214 registerExtension(taskId, ResolveInstanceFieldsInUnitTask.DESCRIPTOR); | 230 registerExtension(taskId, ResolveInstanceFieldsInUnitTask.DESCRIPTOR); |
| 215 registerExtension(taskId, ResolveLibraryReferencesTask.DESCRIPTOR); | 231 registerExtension(taskId, ResolveLibraryReferencesTask.DESCRIPTOR); |
| 232 registerExtension(taskId, ResolveLibraryTask.DESCRIPTOR); |
| 216 registerExtension(taskId, ResolveLibraryTypeNamesTask.DESCRIPTOR); | 233 registerExtension(taskId, ResolveLibraryTypeNamesTask.DESCRIPTOR); |
| 234 registerExtension(taskId, ResolveTopLevelLibraryTypeBoundsTask.DESCRIPTOR); |
| 235 registerExtension(taskId, ResolveTopLevelUnitTypeBoundsTask.DESCRIPTOR); |
| 217 registerExtension(taskId, ResolveUnitTask.DESCRIPTOR); | 236 registerExtension(taskId, ResolveUnitTask.DESCRIPTOR); |
| 218 registerExtension(taskId, ResolveUnitTypeNamesTask.DESCRIPTOR); | 237 registerExtension(taskId, ResolveUnitTypeNamesTask.DESCRIPTOR); |
| 219 registerExtension(taskId, ResolveVariableReferencesTask.DESCRIPTOR); | 238 registerExtension(taskId, ResolveVariableReferencesTask.DESCRIPTOR); |
| 220 registerExtension(taskId, ScanDartTask.DESCRIPTOR); | 239 registerExtension(taskId, ScanDartTask.DESCRIPTOR); |
| 221 registerExtension(taskId, StrongModeVerifyUnitTask.DESCRIPTOR); | 240 registerExtension(taskId, StrongModeVerifyUnitTask.DESCRIPTOR); |
| 222 registerExtension(taskId, VerifyUnitTask.DESCRIPTOR); | 241 registerExtension(taskId, VerifyUnitTask.DESCRIPTOR); |
| 223 // | 242 // |
| 224 // Register HTML tasks. | 243 // Register HTML tasks. |
| 225 // | 244 // |
| 226 registerExtension(taskId, DartScriptsTask.DESCRIPTOR); | 245 registerExtension(taskId, DartScriptsTask.DESCRIPTOR); |
| 227 registerExtension(taskId, HtmlErrorsTask.DESCRIPTOR); | 246 registerExtension(taskId, HtmlErrorsTask.DESCRIPTOR); |
| 228 registerExtension(taskId, ParseHtmlTask.DESCRIPTOR); | 247 registerExtension(taskId, ParseHtmlTask.DESCRIPTOR); |
| 248 // |
| 249 // Register YAML tasks. |
| 250 // |
| 251 registerExtension(taskId, ParseYamlTask.DESCRIPTOR); |
| 229 } | 252 } |
| 230 | 253 |
| 231 void _registerWorkManagerFactoryExtensions( | 254 void _registerWorkManagerFactoryExtensions( |
| 232 RegisterExtension registerExtension) { | 255 RegisterExtension registerExtension) { |
| 233 String taskId = WORK_MANAGER_EXTENSION_POINT_ID; | 256 String taskId = WORK_MANAGER_EXTENSION_POINT_ID; |
| 234 registerExtension(taskId, | 257 registerExtension(taskId, |
| 235 (InternalAnalysisContext context) => new DartWorkManager(context)); | 258 (InternalAnalysisContext context) => new DartWorkManager(context)); |
| 236 registerExtension(taskId, | 259 registerExtension(taskId, |
| 237 (InternalAnalysisContext context) => new HtmlWorkManager(context)); | 260 (InternalAnalysisContext context) => new HtmlWorkManager(context)); |
| 238 } | 261 registerExtension(taskId, |
| 239 | 262 (InternalAnalysisContext context) => new OptionsWorkManager(context)); |
| 240 /** | |
| 241 * Validate the given extension by throwing an [ExtensionError] if it is not | |
| 242 * a [ListResultDescriptor] of [AnalysisError]s. | |
| 243 */ | |
| 244 void _validateAnalysisErrorListResultDescriptor(Object extension) { | |
| 245 if (extension is! ListResultDescriptor<AnalysisError>) { | |
| 246 String id = taskExtensionPoint.uniqueIdentifier; | |
| 247 throw new ExtensionError( | |
| 248 'Extensions to $id must be a ListResultDescriptor<AnalysisError>'); | |
| 249 } | |
| 250 } | |
| 251 | |
| 252 /** | |
| 253 * Validate the given extension by throwing an [ExtensionError] if it is not | |
| 254 * a [TaskDescriptor]. | |
| 255 */ | |
| 256 void _validateTaskExtension(Object extension) { | |
| 257 if (extension is! TaskDescriptor) { | |
| 258 String id = taskExtensionPoint.uniqueIdentifier; | |
| 259 throw new ExtensionError('Extensions to $id must be a TaskDescriptor'); | |
| 260 } | |
| 261 } | |
| 262 | |
| 263 /** | |
| 264 * Validate the given extension by throwing an [ExtensionError] if it is not | |
| 265 * a [WorkManagerFactory]. | |
| 266 */ | |
| 267 void _validateWorkManagerFactoryExtension(Object extension) { | |
| 268 if (extension is! WorkManagerFactory) { | |
| 269 String id = taskExtensionPoint.uniqueIdentifier; | |
| 270 throw new ExtensionError( | |
| 271 'Extensions to $id must be a WorkManagerFactory'); | |
| 272 } | |
| 273 } | 263 } |
| 274 } | 264 } |
| 275 | 265 |
| 276 /** | 266 /** |
| 277 * Annotation describing the relationship between a getter in [EnginePlugin] | 267 * Annotation describing the relationship between a getter in [EnginePlugin] |
| 278 * and the associated identifier (in '../../plugin/task.dart') which can be | 268 * and the associated identifier (in '../../plugin/task.dart') which can be |
| 279 * passed to the extension manager to populate it. | 269 * passed to the extension manager to populate it. |
| 280 * | 270 * |
| 281 * This annotation is not used at runtime; it is used to aid in static analysis | 271 * This annotation is not used at runtime; it is used to aid in static analysis |
| 282 * of the task model during development. | 272 * of the task model during development. |
| 283 */ | 273 */ |
| 284 class ExtensionPointId { | 274 class ExtensionPointId { |
| 285 final String extensionPointId; | 275 final String extensionPointId; |
| 286 | 276 |
| 287 const ExtensionPointId(this.extensionPointId); | 277 const ExtensionPointId(this.extensionPointId); |
| 288 } | 278 } |
| OLD | NEW |