// 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.

/**
 * Support for client code that extends the analysis engine by adding new
 * analysis tasks.
 */
library analyzer.plugin.task;

import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/plugin/engine_plugin.dart';
import 'package:analyzer/task/model.dart';
import 'package:plugin/plugin.dart';

/**
 * The identifier of the extension point that allows plugins to register new
 * analysis error results to compute for a Dart source. The object used as an
 * extension must be a [ResultDescriptor].
 */
final String DART_ERRORS_FOR_SOURCE_EXTENSION_POINT_ID = Plugin.join(
    EnginePlugin.UNIQUE_IDENTIFIER,
    EnginePlugin.DART_ERRORS_FOR_SOURCE_EXTENSION_POINT);

/**
 * The identifier of the extension point that allows plugins to register new
 * analysis error results to compute for a Dart library specific unit. The
 * object used as an extension must be a [ResultDescriptor].
 */
final String DART_ERRORS_FOR_UNIT_EXTENSION_POINT_ID = Plugin.join(
    EnginePlugin.UNIQUE_IDENTIFIER,
    EnginePlugin.DART_ERRORS_FOR_UNIT_EXTENSION_POINT);

/**
 * The identifier of the extension point that allows plugins to register new
 * analysis error results to compute for an HTML source. The object used as an
 * extension must be a [ResultDescriptor].
 */
final String HTML_ERRORS_EXTENSION_POINT_ID = Plugin.join(
    EnginePlugin.UNIQUE_IDENTIFIER, EnginePlugin.HTML_ERRORS_EXTENSION_POINT);

/**
 * The identifier of the extension point that allows plugins to register new
 * work managers with the analysis engine. The object used as an extension must
 * be a [WorkManagerFactory].
 */
final String WORK_MANAGER_EXTENSION_POINT_ID = Plugin.join(
    EnginePlugin.UNIQUE_IDENTIFIER,
    EnginePlugin.WORK_MANAGER_FACTORY_EXTENSION_POINT);

/**
 * A function that will create a new [WorkManager] for the given [context].
 */
typedef WorkManager WorkManagerFactory(InternalAnalysisContext context);
