Skip to content

Commit 05003ab

Browse files
alexmarkovcommit-bot@chromium.org
authored andcommitted
[vm/gen_kernel] Support package_config.json when converting main script URI to package URI
Fixes #42614 Change-Id: I6253412677b6954be36f519a193bed34004a1ff3 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/153541 Reviewed-by: Jonah Williams <[email protected]> Reviewed-by: Alexander Aprelev <[email protected]> Commit-Queue: Alexander Markov <[email protected]>
1 parent 464641f commit 05003ab

File tree

2 files changed

+37
-34
lines changed

2 files changed

+37
-34
lines changed

pkg/vm/lib/kernel_front_end.dart

Lines changed: 8 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
library vm.kernel_front_end;
77

88
import 'dart:async';
9-
import 'dart:io' show File, IOSink, IOException;
9+
import 'dart:io' show File, IOSink;
1010

1111
import 'package:args/args.dart' show ArgParser, ArgResults;
1212

@@ -28,7 +28,6 @@ import 'package:front_end/src/api_unstable/vm.dart'
2828
ExperimentalFlag,
2929
FileSystem,
3030
FileSystemEntity,
31-
FileSystemException,
3231
NnbdMode,
3332
ProcessedOptions,
3433
Severity,
@@ -46,6 +45,7 @@ import 'package:kernel/binary/ast_to_binary.dart' show BinaryPrinter;
4645
import 'package:kernel/core_types.dart' show CoreTypes;
4746
import 'package:kernel/kernel.dart' show loadComponentFromBinary;
4847
import 'package:kernel/target/targets.dart' show Target, TargetFlags, getTarget;
48+
import 'package:package_config/package_config.dart' show loadPackageConfigUri;
4949

5050
import 'bytecode/bytecode_serialization.dart' show BytecodeSizeStatistics;
5151
import 'bytecode/gen_bytecode.dart'
@@ -664,48 +664,22 @@ Future<Uri> asFileUri(FileSystem fileSystem, Uri uri) async {
664664
}
665665

666666
/// Convert URI to a package URI if it is inside one of the packages.
667+
/// TODO(alexmarkov) Remove this conversion after Fuchsia build rules are fixed.
667668
Future<Uri> convertToPackageUri(
668669
FileSystem fileSystem, Uri uri, Uri packagesUri) async {
669670
if (uri.scheme == 'package') {
670671
return uri;
671672
}
672673
// Convert virtual URI to a real file URI.
673-
String uriString = (await asFileUri(fileSystem, uri)).toString();
674-
List<String> packages;
674+
final Uri fileUri = await asFileUri(fileSystem, uri);
675675
try {
676-
packages =
677-
await new File((await asFileUri(fileSystem, packagesUri)).toFilePath())
678-
.readAsLines();
679-
} on IOException {
676+
final packageConfig =
677+
await loadPackageConfigUri(await asFileUri(fileSystem, packagesUri));
678+
return packageConfig.toPackageUri(fileUri) ?? uri;
679+
} catch (_) {
680680
// Can't read packages file - silently give up.
681681
return uri;
682682
}
683-
// file:///a/b/x/y/main.dart -> package:x.y/main.dart
684-
for (var line in packages) {
685-
if (line.isEmpty || line.startsWith("#")) {
686-
continue;
687-
}
688-
689-
final colon = line.indexOf(':');
690-
if (colon == -1) {
691-
continue;
692-
}
693-
final packageName = line.substring(0, colon);
694-
String packagePath;
695-
try {
696-
packagePath = (await asFileUri(
697-
fileSystem, packagesUri.resolve(line.substring(colon + 1))))
698-
.toString();
699-
} on FileSystemException {
700-
// Can't resolve package path.
701-
continue;
702-
}
703-
if (uriString.startsWith(packagePath)) {
704-
return Uri.parse(
705-
'package:$packageName/${uriString.substring(packagePath.length)}');
706-
}
707-
}
708-
return uri;
709683
}
710684

711685
/// Write a separate kernel binary for each package. The name of the

pkg/vm/test/kernel_front_end_test.dart

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ String platformPath() => computePlatformBinariesLocation()
1818
const String mainScript = 'pkg/vm/bin/gen_kernel.dart';
1919
const String mainScriptPackageUri = 'package:vm/kernel_front_end.dart';
2020
const String packagesFile = '.packages';
21+
const String packageConfigFile = '.dart_tool/package_config.json';
2122

2223
void testCompile(List<String> args) async {
2324
final compilerExitCode =
@@ -132,4 +133,32 @@ main() {
132133
'$sdkDir/$mainScript',
133134
]);
134135
}, timeout: Timeout.none);
136+
137+
test('compile-package-config', () async {
138+
await testCompile([
139+
'--platform',
140+
platformPath(),
141+
'--packages',
142+
'$sdkDir/$packageConfigFile',
143+
'--output',
144+
outputDill(),
145+
'$sdkDir/$mainScript',
146+
]);
147+
}, timeout: Timeout.none);
148+
149+
test('compile-multi-root-package-config', () async {
150+
await testCompile([
151+
'--platform',
152+
platformPath(),
153+
'--filesystem-scheme',
154+
'test-filesystem-scheme',
155+
'--filesystem-root',
156+
sdkDir,
157+
'--packages',
158+
'test-filesystem-scheme:///$packageConfigFile',
159+
'--output',
160+
outputDill(),
161+
'test-filesystem-scheme:///$mainScript',
162+
]);
163+
}, timeout: Timeout.none);
135164
}

0 commit comments

Comments
 (0)