diff --git a/DEPS b/DEPS index b32253a5bed..8aba9500501 100644 --- a/DEPS +++ b/DEPS @@ -107,7 +107,7 @@ vars = { "mustache_tag" : "5e81b12215566dbe2473b2afd01a8a8aedd56ad9", "oauth2_tag": "1.2.1", "observatory_pub_packages_rev": "0894122173b0f98eb08863a7712e78407d4477bc", - "package_config_tag": "1.0.5", + "package_config_tag": "2453cd2e78c2db56ee2669ced17ce70dd00bf576", # should be 1.1.0 "package_resolver_tag": "1.0.10", "path_tag": "1.6.2", "pedantic_tag": "v1.8.0", diff --git a/pkg/analyzer/test/src/context/source_test.dart b/pkg/analyzer/test/src/context/source_test.dart index 74b8c43ed9c..5bc310863a1 100644 --- a/pkg/analyzer/test/src/context/source_test.dart +++ b/pkg/analyzer/test/src/context/source_test.dart @@ -58,4 +58,19 @@ class _MockPackages implements Packages { Uri resolve(Uri packageUri, {Uri notFound(Uri packageUri)}) { fail('Unexpected invocation of resolve'); } + + @override + String get defaultPackageName { + fail('Unexpected invocation of defaultPackageName'); + } + + @override + String libraryMetadata(Uri libraryUri, String key) { + fail('Unexpected invocation of libraryMetadata'); + } + + @override + String packageMetadata(String packageName, String key) { + fail('Unexpected invocation of packageMetadata'); + } } diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart index b081701f3b0..e1cb0033153 100644 --- a/pkg/front_end/lib/src/base/processed_options.dart +++ b/pkg/front_end/lib/src/base/processed_options.dart @@ -494,7 +494,8 @@ class ProcessedOptions { if (contents != null) { _packagesUri = file; try { - Map map = package_config.parse(contents, file); + Map map = + package_config.parse(contents, file, allowDefaultPackage: true); return new MapPackages(map); } on FormatException catch (e) { report( diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart index 1fcfc874b5e..b1ff9959868 100644 --- a/pkg/front_end/lib/src/fasta/loader.dart +++ b/pkg/front_end/lib/src/fasta/loader.dart @@ -118,6 +118,9 @@ abstract class Loader { default: fileUri = uri; + // Check for empty package name entry (redirecting to package name + // from which we should get the fragment part). + packageFragment = target.uriTranslator?.getDefaultPackageFragment(); break; } } diff --git a/pkg/front_end/lib/src/fasta/uri_translator.dart b/pkg/front_end/lib/src/fasta/uri_translator.dart index 4d0d91ea3dc..bb2b0259d11 100644 --- a/pkg/front_end/lib/src/fasta/uri_translator.dart +++ b/pkg/front_end/lib/src/fasta/uri_translator.dart @@ -50,6 +50,16 @@ class UriTranslator { return packageBaseUri.fragment; } + /// Get the fragment for the package specified as the default package, if any. + String getDefaultPackageFragment() { + Uri emptyPackageRedirect = packages.asMap()[""]; + if (emptyPackageRedirect == null) return null; + String packageName = emptyPackageRedirect.toString(); + Uri packageBaseUri = packages.asMap()[packageName]; + if (packageBaseUri == null) return null; + return packageBaseUri.fragment; + } + bool isLibrarySupported(String libraryName) { // TODO(sigmund): change this to `?? false` when all backends provide the // `libraries.json` file by default (Issue #32657). diff --git a/pkg/front_end/pubspec.yaml b/pkg/front_end/pubspec.yaml index 731b2217abf..2842dbf259e 100644 --- a/pkg/front_end/pubspec.yaml +++ b/pkg/front_end/pubspec.yaml @@ -9,7 +9,7 @@ environment: sdk: '>=2.2.2 <3.0.0' dependencies: kernel: 0.3.22 - package_config: '^1.0.1' + package_config: '^1.1.0' path: '^1.3.9' yaml: '^2.1.12' dev_dependencies: diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_default_version/.packages b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/.packages new file mode 100644 index 00000000000..b18dc607b13 --- /dev/null +++ b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/.packages @@ -0,0 +1,2 @@ +foo:lib/#dart=2.5.3-dev.2 +:foo diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_default_version/lib/foo.dart b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/lib/foo.dart new file mode 100644 index 00000000000..1fe23f33591 --- /dev/null +++ b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/lib/foo.dart @@ -0,0 +1,9 @@ +// Copyright (c) 2019, 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: languageVersion=2.5*/ + +foo() { + print("Hello from foo!"); +} diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_default_version/main.dart b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/main.dart new file mode 100644 index 00000000000..3870a48b69b --- /dev/null +++ b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/main.dart @@ -0,0 +1,13 @@ +// Copyright (c) 2019, 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. + +import 'package:foo/foo.dart'; + +// Version comes from "default package" in .packages. + +/*library: languageVersion=2.5*/ + +main() { + foo(); +} diff --git a/pkg/front_end/test/language_versioning/data/package_non_package_default_version/pubspec.yaml b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/pubspec.yaml new file mode 100644 index 00000000000..ff98642af3b --- /dev/null +++ b/pkg/front_end/test/language_versioning/data/package_non_package_default_version/pubspec.yaml @@ -0,0 +1,5 @@ +# Copyright (c) 2019, 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. + +# Analyzer workaround, see https://github.com/dart-lang/sdk/issues/37513 \ No newline at end of file