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

Side by Side Diff: lib/src/transformer/uri_resolver.dart

Issue 1788973002: Remove code that requires whole-program compile (Closed) Base URL: git@github.com:dart-lang/dev_compiler.git@master
Patch Set: merged Created 4 years, 9 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 unified diff | Download patch
« no previous file with comments | « lib/src/transformer/transformer.dart ('k') | lib/src/utils.dart » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
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
3 // BSD-style license that can be found in the LICENSE file.
4
5 library dev_compiler.src.transformer.uri_resolver;
6
7 import 'package:analyzer/src/generated/sdk.dart' show DartSdk;
8 import 'package:analyzer/src/generated/source.dart' show Source, SourceFactory;
9 import 'package:barback/barback.dart' show AssetId;
10 import 'package:code_transformers/resolver.dart'
11 show DartUriResolverProxy, DirectoryBasedDartSdkProxy;
12 import 'package:cli_util/cli_util.dart' as cli_util;
13 import 'package:path/path.dart' as path;
14
15 import 'asset_source.dart';
16
17 typedef AssetSource AssetSourceGetter(AssetId id);
18
19 /// Builds a package URI that corresponds to [id]. This is roughly the inverse
20 /// function of [resolveAssetId].
21 ///
22 /// Note that if [id] points to a file outside the package's `lib` folder, that
23 /// file must be under `web` and the returned URI will not strictly correspond
24 /// to classic package URIs (but it will be invertible by [resolveAssetId]).
25 String assetIdToUri(AssetId id) {
26 var p = id.path;
27 if (p.startsWith('lib/web/')) {
28 throw new ArgumentError('Cannot convert $id to an unambiguous package uri');
29 }
30 if (p.startsWith('lib/')) {
31 p = p.substring('lib/'.length);
32 } else if (!p.startsWith('web/')) {
33 throw new ArgumentError('Unexpected path in $id (expected {lib,web}/*');
34 }
35 // Note: if the file is under web/, then we leave it as it is: resolveAssetId
36 // does the inverse transform.
37 return 'package:${id.package}/$p';
38 }
39
40 /// Gets the [AssetId] that corresponds to [uri].
41 ///
42 /// If [fromAssetId] is not `null` and if [uri] is a relative URI, then
43 /// [fromAssetId] will be used to resolve the create a relative URI. In other
44 /// cases, this is roughly the inverse function of [assetIdToUri].
45 AssetId resolveAssetId(Uri uri, {AssetId fromAssetId}) {
46 if (uri.scheme == 'dart') return null;
47
48 if (uri.scheme == 'package') {
49 var segments = uri.pathSegments.toList();
50 var package = segments[0];
51 if (segments[1] == 'web') {
52 return new AssetId(package, path.url.joinAll(segments.skip(1)));
53 } else {
54 segments[0] = 'lib';
55 return new AssetId(package, path.url.joinAll(segments));
56 }
57 }
58
59 if (uri.scheme == null || uri.scheme == '') {
60 if (fromAssetId == null) {
61 throw new ArgumentError('No asset to resolve relative URI from.');
62 }
63 return new AssetId(fromAssetId.package,
64 path.normalize(path.join(path.dirname(fromAssetId.path), uri.path)));
65 }
66
67 throw new ArgumentError('Unexpected uri: $uri (uri.scheme = ${uri.scheme})');
68 }
69
70 class _DdcUriResolver extends DartUriResolverProxy {
71 AssetSourceGetter _getAssetSource;
72
73 _DdcUriResolver(DartSdk sdk, this._getAssetSource) : super(sdk);
74
75 @override
76 Source resolveAbsolute(Uri uri, [Uri actualUri]) {
77 return uri.scheme == 'package'
78 ? _getAssetSource(resolveAssetId(uri))
79 : super.resolveAbsolute(uri, actualUri);
80 }
81 }
82
83 String get dartSdkDirectory => cli_util.getSdkDir()?.path;
84
85 SourceFactory createSourceFactory(AssetSourceGetter getAssetSource) {
86 var sdk = new DirectoryBasedDartSdkProxy(dartSdkDirectory);
87 return new SourceFactory([new _DdcUriResolver(sdk, getAssetSource)]);
88 }
OLDNEW
« no previous file with comments | « lib/src/transformer/transformer.dart ('k') | lib/src/utils.dart » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698