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

Unified Diff: pkg/analyzer_cli/lib/src/build_mode.dart

Issue 2257023002: Replace uses of FileBasedSource in cli (Closed) Base URL: https://github.com/dart-lang/sdk.git@master
Patch Set: Created 4 years, 4 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 | « pkg/analyzer/lib/src/generated/source_io.dart ('k') | pkg/analyzer_cli/lib/src/driver.dart » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: pkg/analyzer_cli/lib/src/build_mode.dart
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
index b69669db2f17e405125c73366cf69cc8d4f83462..025e620a77d6e443aa623f8b70d8a8349dc5db8d 100644
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ b/pkg/analyzer_cli/lib/src/build_mode.dart
@@ -13,10 +13,10 @@ import 'package:analyzer/file_system/file_system.dart';
import 'package:analyzer/src/dart/sdk/sdk.dart';
import 'package:analyzer/src/generated/engine.dart';
import 'package:analyzer/src/generated/error.dart';
-import 'package:analyzer/src/generated/java_io.dart';
import 'package:analyzer/src/generated/sdk.dart';
import 'package:analyzer/src/generated/source.dart';
import 'package:analyzer/src/generated/source_io.dart';
+import 'package:analyzer/src/source/source_resource.dart';
import 'package:analyzer/src/summary/format.dart';
import 'package:analyzer/src/summary/idl.dart';
import 'package:analyzer/src/summary/link.dart';
@@ -131,7 +131,7 @@ class BuildMode {
SummaryDataStore summaryDataStore;
InternalAnalysisContext context;
- Map<Uri, JavaFile> uriToFileMap;
+ Map<Uri, File> uriToFileMap;
final List<Source> explicitSources = <Source>[];
PackageBundleAssembler assembler;
@@ -167,13 +167,13 @@ class BuildMode {
// Add sources.
ChangeSet changeSet = new ChangeSet();
for (Uri uri in uriToFileMap.keys) {
- JavaFile file = uriToFileMap[uri];
- if (!file.exists()) {
- errorSink.writeln('File not found: ${file.getPath()}');
+ File file = uriToFileMap[uri];
+ if (!file.exists) {
+ errorSink.writeln('File not found: ${file.path}');
io.exitCode = ErrorSeverity.ERROR.ordinal;
return ErrorSeverity.ERROR;
}
- Source source = new FileBasedSource(file, uri);
+ Source source = new FileSource(file, uri);
explicitSources.add(source);
changeSet.addedSource(source);
}
@@ -291,7 +291,7 @@ class BuildMode {
context = AnalysisEngine.instance.createAnalysisContext();
context.sourceFactory = new SourceFactory(<UriResolver>[
new DartUriResolver(sdk),
- new InSummaryPackageUriResolver(summaryDataStore),
+ new InSummaryUriResolver(resourceProvider, summaryDataStore),
new ExplicitSourceResolver(uriToFileMap)
]);
@@ -312,6 +312,28 @@ class BuildMode {
}
/**
+ * Convert [sourceEntities] (a list of file specifications of the form
+ * "$uri|$path") to a map from URI to path. If an error occurs, report the
+ * error and return null.
+ */
+ Map<Uri, File> _createUriToFileMap(List<String> sourceEntities) {
+ Map<Uri, File> uriToFileMap = <Uri, File>{};
+ for (String sourceFile in sourceEntities) {
+ int pipeIndex = sourceFile.indexOf('|');
+ if (pipeIndex == -1) {
+ // TODO(paulberry): add the ability to guess the URI from the path.
+ errorSink.writeln(
+ 'Illegal input file (must be "\$uri|\$path"): $sourceFile');
+ return null;
+ }
+ Uri uri = Uri.parse(sourceFile.substring(0, pipeIndex));
+ String path = sourceFile.substring(pipeIndex + 1);
+ uriToFileMap[uri] = resourceProvider.getFile(path);
+ }
+ return uriToFileMap;
+ }
+
+ /**
* Print errors for all explicit sources. If [outputPath] is supplied, output
* is sent to a new file at that path.
*/
@@ -377,26 +399,48 @@ class BuildMode {
link(sourceUris, _getDependency, _getUnit, options.strongMode);
linkResult.forEach(assembler.addLinkedLibrary);
}
+}
+
+/**
+ * Instances of the class [ExplicitSourceResolver] map URIs to files on disk
+ * using a fixed mapping provided at construction time.
+ */
+class ExplicitSourceResolver extends UriResolver {
+ final Map<Uri, File> uriToFileMap;
+ final Map<String, Uri> pathToUriMap;
/**
- * Convert [sourceEntities] (a list of file specifications of the form
- * "$uri|$path") to a map from URI to path. If an error occurs, report the
- * error and return null.
+ * Construct an [ExplicitSourceResolver] based on the given [uriToFileMap].
*/
- static Map<Uri, JavaFile> _createUriToFileMap(List<String> sourceEntities) {
- Map<Uri, JavaFile> uriToFileMap = <Uri, JavaFile>{};
- for (String sourceFile in sourceEntities) {
- int pipeIndex = sourceFile.indexOf('|');
- if (pipeIndex == -1) {
- // TODO(paulberry): add the ability to guess the URI from the path.
- errorSink.writeln(
- 'Illegal input file (must be "\$uri|\$path"): $sourceFile');
- return null;
- }
- Uri uri = Uri.parse(sourceFile.substring(0, pipeIndex));
- String path = sourceFile.substring(pipeIndex + 1);
- uriToFileMap[uri] = new JavaFile(path);
+ ExplicitSourceResolver(Map<Uri, File> uriToFileMap)
+ : uriToFileMap = uriToFileMap,
+ pathToUriMap = _computePathToUriMap(uriToFileMap);
+
+ @override
+ Source resolveAbsolute(Uri uri, [Uri actualUri]) {
+ File file = uriToFileMap[uri];
+ actualUri ??= uri;
+ if (file == null) {
+ return new NonExistingSource(
+ uri.toString(), actualUri, UriKind.fromScheme(actualUri.scheme));
+ } else {
+ return new FileSource(file, actualUri);
}
- return uriToFileMap;
+ }
+
+ @override
+ Uri restoreAbsolute(Source source) {
+ return pathToUriMap[source.fullName];
+ }
+
+ /**
+ * Build the inverse mapping of [uriToSourceMap].
+ */
+ static Map<String, Uri> _computePathToUriMap(Map<Uri, File> uriToSourceMap) {
+ Map<String, Uri> pathToUriMap = <String, Uri>{};
+ uriToSourceMap.forEach((Uri uri, File file) {
+ pathToUriMap[file.path] = uri;
+ });
+ return pathToUriMap;
}
}
« no previous file with comments | « pkg/analyzer/lib/src/generated/source_io.dart ('k') | pkg/analyzer_cli/lib/src/driver.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698