blob: e9ed101115ef5be2dd7f08e6513fa923a4fe5497 [file] [log] [blame]
// Copyright (c) 2014, 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 operation;
import 'package:analysis_server/src/analysis_server.dart';
import 'package:analyzer/src/generated/source.dart';
/**
* The class [ServerOperation] defines the behavior of objects used to perform
* operations on a [AnalysisServer].
*/
abstract class ServerOperation {
/**
* Returns the priority of this operation.
*/
ServerOperationPriority get priority;
/**
* Performs the operation implemented by this operation.
*/
void perform(AnalysisServer server);
}
/**
* The enumeration [ServerOperationPriority] defines the priority levels used
* to organize [ServerOperation]s in an optimal order. A smaller ordinal value
* equates to a higher priority.
*/
class ServerOperationPriority {
static const int COUNT = 6;
static const ServerOperationPriority ANALYSIS_NOTIFICATION =
const ServerOperationPriority._(0, "ANALYSIS_NOTIFICATION");
static const ServerOperationPriority ANALYSIS_INDEX =
const ServerOperationPriority._(1, "ANALYSIS_INDEX");
static const ServerOperationPriority PRIORITY_ANALYSIS_CONTINUE =
const ServerOperationPriority._(2, "PRIORITY_ANALYSIS_CONTINUE");
static const ServerOperationPriority PRIORITY_ANALYSIS =
const ServerOperationPriority._(3, "PRIORITY_ANALYSIS");
static const ServerOperationPriority ANALYSIS_CONTINUE =
const ServerOperationPriority._(4, "ANALYSIS_CONTINUE");
static const ServerOperationPriority ANALYSIS =
const ServerOperationPriority._(5, "ANALYSIS");
final int ordinal;
final String name;
const ServerOperationPriority._(this.ordinal, this.name);
@override
String toString() => name;
}
/**
* [SourceSensitiveOperation] can decide if the operation should be discarded
* before a change is applied to a [Source].
*/
abstract class SourceSensitiveOperation extends ServerOperation {
/**
* The given [source] is about to be changed.
* Check if this [SourceSensitiveOperation] should be discarded.
*/
bool shouldBeDiscardedOnSourceChange(Source source);
}