73ab31b98a
Deprecate accessing LineInfo, Source, or SourceRange via the old library (pkg/analyzer/lib/src/generated/source.dart). Migrate all SDK code to the new library. Fixes https://github.com/dart-lang/sdk/issues/46420 Change-Id: Ic7c98a5820415c92a457f9fa2756351b05520cd1 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/335382 Reviewed-by: Brian Wilkerson <brianwilkerson@google.com> Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Samuel Rawlins <srawlins@google.com> Reviewed-by: Johnni Winther <johnniwinther@google.com>
82 lines
3.4 KiB
Dart
82 lines
3.4 KiB
Dart
// Copyright (c) 2023, 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/src/generated/timestamped_data.dart';
|
|
|
|
/// The interface `Source` defines the behavior of objects representing source
|
|
/// code that can be analyzed by the analysis engine.
|
|
///
|
|
/// Implementations of this interface need to be aware of some assumptions made
|
|
/// by the analysis engine concerning sources:
|
|
///
|
|
/// * Sources are not required to be unique. That is, there can be multiple
|
|
/// instances representing the same source.
|
|
/// * Sources are long lived. That is, the engine is allowed to hold on to a
|
|
/// source for an extended period of time and that source must continue to
|
|
/// report accurate and up-to-date information.
|
|
///
|
|
/// Because of these assumptions, most implementations will not maintain any
|
|
/// state but will delegate to an authoritative system of record in order to
|
|
/// implement this API. For example, a source that represents files on disk
|
|
/// would typically query the file system to determine the state of the file.
|
|
///
|
|
/// If the instances that implement this API are the system of record, then they
|
|
/// will typically be unique. In that case, sources that are created that
|
|
/// represent nonexistent files must also be retained so that if those files
|
|
/// are created at a later date the long-lived sources representing those files
|
|
/// will know that they now exist.
|
|
abstract class Source {
|
|
/// Get the contents and timestamp of this source.
|
|
///
|
|
/// @return the contents and timestamp of the source
|
|
/// @throws Exception if the contents of this source could not be accessed
|
|
TimestampedData<String> get contents;
|
|
|
|
/// Return the full (long) version of the name that can be displayed to the
|
|
/// user to denote this source. For example, for a source representing a file
|
|
/// this would typically be the absolute path of the file.
|
|
///
|
|
/// @return a name that can be displayed to the user to denote this source
|
|
String get fullName;
|
|
|
|
/// Return a hash code for this source.
|
|
///
|
|
/// @return a hash code for this source
|
|
/// See [Object.hashCode].
|
|
@override
|
|
int get hashCode;
|
|
|
|
/// Return a short version of the name that can be displayed to the user to
|
|
/// denote this source. For example, for a source representing a file this
|
|
/// would typically be the name of the file.
|
|
///
|
|
/// @return a name that can be displayed to the user to denote this source
|
|
String get shortName;
|
|
|
|
/// Return the URI from which this source was originally derived.
|
|
///
|
|
/// @return the URI from which this source was originally derived
|
|
Uri get uri;
|
|
|
|
/// Return `true` if the given object is a source that represents the same
|
|
/// source code as this source.
|
|
///
|
|
/// @param object the object to be compared with this object
|
|
/// @return `true` if the given object is a source that represents the same
|
|
/// source code as this source
|
|
/// See [Object.==].
|
|
@override
|
|
bool operator ==(Object other);
|
|
|
|
/// Return `true` if this source exists.
|
|
///
|
|
/// Clients should consider using the method [AnalysisContext.exists] because
|
|
/// contexts can have local overrides of the content of a source that the
|
|
/// source is not aware of and a source with local content is considered to
|
|
/// exist even if there is no file on disk.
|
|
///
|
|
/// @return `true` if this source exists
|
|
bool exists();
|
|
}
|