blob: 6f9731530388611ef7db80da81b2b1ed3634dd22 [file] [log] [blame]
// 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.
import 'package:analyzer/error/error.dart' show AnalysisError;
import 'package:analyzer/src/generated/engine.dart'
show InternalAnalysisContext;
import 'package:analyzer/src/plugin/task.dart';
import 'package:analyzer/src/task/api/model.dart';
import 'package:analyzer/src/task/dart.dart';
import 'package:analyzer/src/task/dart_work_manager.dart';
import 'package:analyzer/src/task/options_work_manager.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<ListResultDescriptor<AnalysisError>> 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<ListResultDescriptor<AnalysisError>> 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<ListResultDescriptor<AnalysisError>> 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);
}
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 _registerWorkManagerFactoryExtensions(
RegisterExtension registerExtension) {
String taskId = WORK_MANAGER_EXTENSION_POINT_ID;
registerExtension(taskId,
(InternalAnalysisContext context) => new DartWorkManager(context));
registerExtension(taskId,
(InternalAnalysisContext context) => new OptionsWorkManager(context));
}
}
/**
* Annotation describing the relationship between a getter in [EnginePlugin]
* and the associated identifier (in '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);
}