| // Copyright (c) 2015, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| library analyzer.src.plugin.engine_plugin; |
| |
| import 'package:analyzer/error/error.dart' show AnalysisError; |
| import 'package:analyzer/plugin/task.dart'; |
| import 'package:analyzer/src/generated/engine.dart' |
| show InternalAnalysisContext; |
| import 'package:analyzer/src/task/dart.dart'; |
| import 'package:analyzer/src/task/dart_work_manager.dart'; |
| import 'package:analyzer/src/task/html.dart'; |
| import 'package:analyzer/src/task/html_work_manager.dart'; |
| import 'package:analyzer/src/task/options_work_manager.dart'; |
| import 'package:analyzer/task/model.dart'; |
| import 'package:plugin/plugin.dart'; |
| |
| /** |
| * A plugin that defines the extension points and extensions that are inherently |
| * defined by the analysis engine. |
| */ |
| class EnginePlugin implements Plugin { |
| /** |
| * The simple identifier of the extension point that allows plugins to |
| * register new analysis error results to compute for a Dart source. |
| */ |
| static const String DART_ERRORS_FOR_SOURCE_EXTENSION_POINT = |
| 'dartErrorsForSource'; |
| |
| /** |
| * The simple identifier of the extension point that allows plugins to |
| * register new analysis error results to compute for a Dart library |
| * specific unit. |
| */ |
| static const String DART_ERRORS_FOR_UNIT_EXTENSION_POINT = |
| 'dartErrorsForUnit'; |
| |
| /** |
| * The simple identifier of the extension point that allows plugins to |
| * register new analysis error results to compute for an HTML source. |
| */ |
| static const String HTML_ERRORS_EXTENSION_POINT = 'htmlErrors'; |
| |
| /** |
| * The simple identifier of the extension point that allows plugins to |
| * register new work manager factories with the analysis engine. |
| */ |
| static const String WORK_MANAGER_FACTORY_EXTENSION_POINT = |
| 'workManagerFactory'; |
| |
| /** |
| * The unique identifier of this plugin. |
| */ |
| static const String UNIQUE_IDENTIFIER = 'analysis_engine.core'; |
| |
| /** |
| * The extension point that allows plugins to register new analysis error |
| * results for a Dart source. |
| */ |
| ExtensionPoint<ListResultDescriptor<AnalysisError>> |
| dartErrorsForSourceExtensionPoint; |
| |
| /** |
| * The extension point that allows plugins to register new analysis error |
| * results for a Dart library specific unit. |
| */ |
| ExtensionPoint<ListResultDescriptor<AnalysisError>> |
| dartErrorsForUnitExtensionPoint; |
| |
| /** |
| * The extension point that allows plugins to register new analysis error |
| * results for an HTML source. |
| */ |
| ExtensionPoint<ListResultDescriptor<AnalysisError>> htmlErrorsExtensionPoint; |
| |
| /** |
| * The extension point that allows plugins to register new work manager |
| * factories with the analysis engine. |
| */ |
| ExtensionPoint<WorkManagerFactory> workManagerFactoryExtensionPoint; |
| |
| /** |
| * Initialize a newly created plugin. |
| */ |
| EnginePlugin(); |
| |
| /** |
| * Return a list containing all of the contributed analysis error result |
| * descriptors for Dart sources. |
| */ |
| @ExtensionPointId('DART_ERRORS_FOR_SOURCE_EXTENSION_POINT_ID') |
| List<ResultDescriptor> get dartErrorsForSource => |
| dartErrorsForSourceExtensionPoint.extensions; |
| |
| /** |
| * Return a list containing all of the contributed analysis error result |
| * descriptors for Dart library specific units. |
| */ |
| @ExtensionPointId('DART_ERRORS_FOR_UNIT_EXTENSION_POINT_ID') |
| List<ResultDescriptor> get dartErrorsForUnit => |
| dartErrorsForUnitExtensionPoint.extensions; |
| |
| /** |
| * Return a list containing all of the contributed analysis error result |
| * descriptors for HTML sources. |
| */ |
| @ExtensionPointId('HTML_ERRORS_EXTENSION_POINT_ID') |
| List<ResultDescriptor> get htmlErrors => htmlErrorsExtensionPoint.extensions; |
| |
| @override |
| String get uniqueIdentifier => UNIQUE_IDENTIFIER; |
| |
| /** |
| * Return a list containing all of the work manager factories that were |
| * contributed. |
| */ |
| List<WorkManagerFactory> get workManagerFactories => |
| workManagerFactoryExtensionPoint.extensions; |
| |
| @override |
| void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) { |
| dartErrorsForSourceExtensionPoint = |
| new ExtensionPoint<ListResultDescriptor<AnalysisError>>( |
| this, DART_ERRORS_FOR_SOURCE_EXTENSION_POINT, null); |
| registerExtensionPoint(dartErrorsForSourceExtensionPoint); |
| dartErrorsForUnitExtensionPoint = |
| new ExtensionPoint<ListResultDescriptor<AnalysisError>>( |
| this, DART_ERRORS_FOR_UNIT_EXTENSION_POINT, null); |
| registerExtensionPoint(dartErrorsForUnitExtensionPoint); |
| htmlErrorsExtensionPoint = |
| new ExtensionPoint<ListResultDescriptor<AnalysisError>>( |
| this, HTML_ERRORS_EXTENSION_POINT, null); |
| registerExtensionPoint(htmlErrorsExtensionPoint); |
| workManagerFactoryExtensionPoint = new ExtensionPoint<WorkManagerFactory>( |
| this, WORK_MANAGER_FACTORY_EXTENSION_POINT, null); |
| registerExtensionPoint(workManagerFactoryExtensionPoint); |
| } |
| |
| @override |
| void registerExtensions(RegisterExtension registerExtension) { |
| _registerWorkManagerFactoryExtensions(registerExtension); |
| _registerDartErrorsForSource(registerExtension); |
| _registerDartErrorsForUnit(registerExtension); |
| _registerHtmlErrors(registerExtension); |
| } |
| |
| void _registerDartErrorsForSource(RegisterExtension registerExtension) { |
| registerExtension(DART_ERRORS_FOR_SOURCE_EXTENSION_POINT_ID, PARSE_ERRORS); |
| registerExtension(DART_ERRORS_FOR_SOURCE_EXTENSION_POINT_ID, SCAN_ERRORS); |
| } |
| |
| void _registerDartErrorsForUnit(RegisterExtension registerExtension) { |
| registerExtension( |
| DART_ERRORS_FOR_UNIT_EXTENSION_POINT_ID, LIBRARY_UNIT_ERRORS); |
| } |
| |
| void _registerHtmlErrors(RegisterExtension registerExtension) { |
| registerExtension(HTML_ERRORS_EXTENSION_POINT_ID, HTML_DOCUMENT_ERRORS); |
| } |
| |
| void _registerWorkManagerFactoryExtensions( |
| RegisterExtension registerExtension) { |
| String taskId = WORK_MANAGER_EXTENSION_POINT_ID; |
| registerExtension(taskId, |
| (InternalAnalysisContext context) => new DartWorkManager(context)); |
| registerExtension(taskId, |
| (InternalAnalysisContext context) => new HtmlWorkManager(context)); |
| registerExtension(taskId, |
| (InternalAnalysisContext context) => new OptionsWorkManager(context)); |
| } |
| } |
| |
| /** |
| * Annotation describing the relationship between a getter in [EnginePlugin] |
| * and the associated identifier (in '../../plugin/task.dart') which can be |
| * passed to the extension manager to populate it. |
| * |
| * This annotation is not used at runtime; it is used to aid in static analysis |
| * of the task model during development. |
| */ |
| class ExtensionPointId { |
| final String extensionPointId; |
| |
| const ExtensionPointId(this.extensionPointId); |
| } |