blob: d858b1a091206627246b9be0394378f40fafbc41 [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.
library analyzer.src.plugin.engine_plugin;
import 'package:analyzer/plugin/plugin.dart';
import 'package:analyzer/plugin/task.dart';
import 'package:analyzer/src/task/dart.dart';
import 'package:analyzer/src/task/general.dart';
import 'package:analyzer/task/model.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 tasks with the analysis engine.
*/
static const String TASK_EXTENSION_POINT = 'task';
/**
* The unique identifier of this plugin.
*/
static const String UNIQUE_IDENTIFIER = 'analysis_engine.core';
/**
* The extension point that allows plugins to register new analysis tasks with
* the analysis engine.
*/
ExtensionPoint taskExtensionPoint;
/**
* Initialize a newly created plugin.
*/
EnginePlugin();
/**
* Return a list containing all of the task descriptors that were contributed.
*/
List<TaskDescriptor> taskDescriptors() {
return taskExtensionPoint.extensions;
}
@override
String get uniqueIdentifier => UNIQUE_IDENTIFIER;
@override
void registerExtensionPoints(RegisterExtensionPoint registerExtensionPoint) {
taskExtensionPoint =
registerExtensionPoint(TASK_EXTENSION_POINT, _validateTaskExtension);
}
@override
void registerExtensions(RegisterExtension registerExtension) {
String taskId = TASK_EXTENSION_POINT_ID;
//
// Register general tasks.
//
registerExtension(taskId, GetContentTask.DESCRIPTOR);
//
// Register Dart tasks.
//
registerExtension(taskId, BuildCompilationUnitElementTask.DESCRIPTOR);
registerExtension(taskId, BuildDirectiveElementsTask.DESCRIPTOR);
registerExtension(taskId, BuildEnumMemberElementsTask.DESCRIPTOR);
registerExtension(taskId, BuildExportNamespaceTask.DESCRIPTOR);
registerExtension(taskId, BuildExportSourceClosureTask.DESCRIPTOR);
registerExtension(taskId, BuildFunctionTypeAliasesTask.DESCRIPTOR);
registerExtension(taskId, BuildLibraryElementTask.DESCRIPTOR);
registerExtension(taskId, BuildPublicNamespaceTask.DESCRIPTOR);
registerExtension(taskId, BuildTypeProviderTask.DESCRIPTOR);
registerExtension(taskId, ParseDartTask.DESCRIPTOR);
registerExtension(taskId, ResolveLibraryTypeNamesTask.DESCRIPTOR);
registerExtension(taskId, ResolveUnitTypeNamesTask.DESCRIPTOR);
registerExtension(taskId, ScanDartTask.DESCRIPTOR);
//
// Register HTML tasks.
//
}
/**
* Validate the given extension by throwing an [ExtensionError] if it is not a
* valid domain.
*/
void _validateTaskExtension(Object extension) {
if (extension is! TaskDescriptor) {
String id = taskExtensionPoint.uniqueIdentifier;
throw new ExtensionError('Extensions to $id must be a TaskDescriptor');
}
}
}