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

Side by Side Diff: pkg/kernel/lib/repository.dart

Issue 2532053005: Store library paths relative to a given application root folder. (Closed)
Patch Set: Revert changes to testcase baseline Created 4 years 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 unified diff | Download patch
« no previous file with comments | « pkg/kernel/lib/ast.dart ('k') | pkg/kernel/test/baseline_tester.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2016, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 library kernel.repository; 4 library kernel.repository;
5 5
6 import 'dart:io';
7
8 import 'package:path/path.dart' as pathlib;
9
10 import 'ast.dart'; 6 import 'ast.dart';
11 7
12 /// Keeps track of which [Library] objects have been created for a given URI. 8 /// Keeps track of which [Library] objects have been created for a given URI.
13 /// 9 ///
14 /// To load different files into the same IR, pass in the same repository 10 /// To load different files into the same IR, pass in the same repository
15 /// object to the loaders. 11 /// object to the loaders.
16 class Repository { 12 class Repository {
17 final String workingDirectory;
18 final Map<Uri, Library> _uriToLibrary = <Uri, Library>{}; 13 final Map<Uri, Library> _uriToLibrary = <Uri, Library>{};
19 final List<Library> libraries = <Library>[]; 14 final List<Library> libraries = <Library>[];
20 15
21 Repository({String workingDirectory})
22 : this.workingDirectory = workingDirectory ?? Directory.current.path;
23
24 /// Get the [Library] object for the library addresesd by [path]; possibly
25 /// as an external library.
26 ///
27 /// The [path] may be a relative or absolute file path, or a URI string with a
28 /// `dart:`, `package:` or `file:` scheme.
29 ///
30 /// Note that this method does not check if the library can be loaded at all.
31 Library getLibrary(String path) {
32 return getLibraryReference(normalizePath(path));
33 }
34
35 String normalizeFileExtension(String path) {
36 if (path.endsWith('.dill')) {
37 return path.substring(0, path.length - '.dill'.length) + '.dart';
38 } else {
39 return path;
40 }
41 }
42
43 /// Get the canonical URI for the library addressed by the given [path].
44 ///
45 /// The [path] may be a relative or absolute file path, or a URI string with a
46 /// `dart:`, `package:` or `file:` scheme.
47 Uri normalizePath(String path) {
48 var uri = Uri.parse(path);
49 if (!uri.hasScheme) {
50 if (!pathlib.isAbsolute(path)) {
51 path = pathlib.join(workingDirectory, path);
52 }
53 uri = new Uri(scheme: 'file', path: normalizeFileExtension(path));
54 } else if (uri.scheme == 'file') {
55 var path = normalizeFileExtension(uri.path);
56 if (!uri.hasAbsolutePath) {
57 uri = uri.replace(path: pathlib.join(workingDirectory, path));
58 } else {
59 uri = uri.replace(path: path);
60 }
61 }
62 return uri;
63 }
64
65 Library getLibraryReference(Uri uri) { 16 Library getLibraryReference(Uri uri) {
66 assert(uri.hasScheme); 17 assert(uri.hasScheme);
67 assert(uri.scheme != 'file' || uri.hasAbsolutePath);
68 return _uriToLibrary.putIfAbsent(uri, () => _buildLibraryReference(uri)); 18 return _uriToLibrary.putIfAbsent(uri, () => _buildLibraryReference(uri));
69 } 19 }
70 20
71 Library _buildLibraryReference(Uri uri) { 21 Library _buildLibraryReference(Uri uri) {
22 assert(uri.hasScheme);
72 var library = new Library(uri, isExternal: true); 23 var library = new Library(uri, isExternal: true);
73 libraries.add(library); 24 libraries.add(library);
74 return library; 25 return library;
75 } 26 }
76 } 27 }
OLDNEW
« no previous file with comments | « pkg/kernel/lib/ast.dart ('k') | pkg/kernel/test/baseline_tester.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698