187 lines
6.7 KiB
Dart
187 lines
6.7 KiB
Dart
// 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);
|
|
}
|