Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(880)

Unified Diff: packages/analyzer/lib/src/source/source_resource.dart

Issue 2990843002: Removed fixed dependencies (Closed)
Patch Set: Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « packages/analyzer/lib/src/services/lint.dart ('k') | packages/analyzer/lib/src/string_source.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: packages/analyzer/lib/src/source/source_resource.dart
diff --git a/packages/analyzer/lib/src/source/source_resource.dart b/packages/analyzer/lib/src/source/source_resource.dart
new file mode 100644
index 0000000000000000000000000000000000000000..63b906cb3c884cbfc89ea4bf170fce82acc9cb49
--- /dev/null
+++ b/packages/analyzer/lib/src/source/source_resource.dart
@@ -0,0 +1,144 @@
+// Copyright (c) 2016, 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.source.source_resource;
+
+import 'dart:collection';
+
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/generated/source.dart';
+
+/**
+ * A function that can translate the contents of files on disk as they are read.
+ * This is now obsolete, but supported the ability of server to deal with
+ * clients that convert all text to an internal format.
+ */
+typedef String FileReadMode(String s);
+
+/**
+ * A source that represents a file.
+ */
+class FileSource extends Source {
+ /**
+ * A function that changes the way that files are read off of disk.
+ */
+ static FileReadMode fileReadMode = (String s) => s;
+
+ /**
+ * Map from encoded URI/filepath pair to a unique integer identifier. This
+ * identifier is used for equality tests and hash codes.
+ *
+ * The URI and filepath are joined into a pair by separating them with an '@'
+ * character.
+ */
+ static final Map<String, int> _idTable = new HashMap<String, int>();
+
+ /**
+ * The URI from which this source was originally derived.
+ */
+ @override
+ final Uri uri;
+
+ /**
+ * The unique ID associated with this source.
+ */
+ final int id;
+
+ /**
+ * The file represented by this source.
+ */
+ final File file;
+
+ /**
+ * The cached absolute path of this source.
+ */
+ String _absolutePath;
+
+ /**
+ * The cached encoding for this source.
+ */
+ String _encoding;
+
+ /**
+ * Initialize a newly created source object to represent the given [file]. If
+ * a [uri] is given, then it will be used as the URI from which the source was
+ * derived, otherwise a `file:` URI will be created based on the [file].
+ */
+ FileSource(File file, [Uri uri])
+ : this.uri = uri ?? file.toUri(),
+ this.file = file,
+ id = _idTable.putIfAbsent(
+ '${uri ?? file.toUri()}@${file.path}', () => _idTable.length);
+
+ @override
+ TimestampedData<String> get contents {
+ return PerformanceStatistics.io.makeCurrentWhile(() {
+ return contentsFromFile;
+ });
+ }
+
+ /**
+ * Get and return the contents and timestamp of the underlying file.
+ *
+ * Clients should consider using the method [AnalysisContext.getContents]
+ * because contexts can have local overrides of the content of a source that
+ * the source is not aware of.
+ *
+ * Throws an exception if the contents of this source could not be accessed.
+ * See [contents].
+ */
+ TimestampedData<String> get contentsFromFile {
+ return new TimestampedData<String>(
+ modificationStamp, fileReadMode(file.readAsStringSync()));
+ }
+
+ @override
+ String get encoding => _encoding ??= uri.toString();
+
+ @override
+ String get fullName => _absolutePath ??= file.path;
+
+ @override
+ int get hashCode => uri.hashCode;
+
+ @override
+ bool get isInSystemLibrary => uri.scheme == DartUriResolver.DART_SCHEME;
+
+ @override
+ int get modificationStamp {
+ try {
+ return file.modificationStamp;
+ } on FileSystemException {
+ return -1;
+ }
+ }
+
+ @override
+ String get shortName => file.shortName;
+
+ @override
+ UriKind get uriKind => UriKind.fromScheme(uri.scheme);
+
+ @override
+ bool operator ==(Object object) {
+ if (object is FileSource) {
+ return id == object.id;
+ } else if (object is Source) {
+ return uri == object.uri;
+ }
+ return false;
+ }
+
+ @override
+ bool exists() => file.exists;
+
+ @override
+ String toString() {
+ if (file == null) {
+ return "<unknown source>";
+ }
+ return file.path;
+ }
+}
« no previous file with comments | « packages/analyzer/lib/src/services/lint.dart ('k') | packages/analyzer/lib/src/string_source.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698