diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart index 6e075f6d56b..d4ce68a1b90 100644 --- a/pkg/analysis_server/lib/src/server/driver.dart +++ b/pkg/analysis_server/lib/src/server/driver.dart @@ -470,13 +470,14 @@ class Driver implements ServerStarter { MulticastInstrumentationService(allInstrumentationServices); instrumentationService.logVersion( - results[TRAIN_USING] != null - ? 'training-0' - : _readUuid(instrumentationService), - analysisServerOptions.clientId, - analysisServerOptions.clientVersion, - PROTOCOL_VERSION, - defaultSdk.sdkVersion); + results[TRAIN_USING] != null + ? 'training-0' + : _readUuid(instrumentationService), + analysisServerOptions.clientId, + analysisServerOptions.clientVersion, + PROTOCOL_VERSION, + defaultSdk.languageVersion.toString(), + ); AnalysisEngine.instance.instrumentationService = instrumentationService; int diagnosticServerPort; diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart index 59af0c157ff..b7fbb8ba7d4 100644 --- a/pkg/analysis_server/test/context_manager_test.dart +++ b/pkg/analysis_server/test/context_manager_test.dart @@ -1591,7 +1591,7 @@ abstract class ContextManagerTest with ResourceProviderMixin { resourceProvider.newFolder(projPath); // Create an SDK in the mock file system. MockSdk(resourceProvider: resourceProvider); - var sdkManager = DartSdkManager(convertPath('/sdk')); + var sdkManager = DartSdkManager(convertPath(sdkRoot)); manager = ContextManagerImpl( resourceProvider, sdkManager, diff --git a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart index 11cf54308e2..f1fd49a7114 100644 --- a/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart +++ b/pkg/analysis_server/test/integration/analysis/get_errors_non_standard_sdk_test.dart @@ -29,6 +29,8 @@ class AnalysisDomainGetErrorsTest Directory(path.join(sdkPath, 'lib', 'async')).createSync(recursive: true); Directory(path.join(sdkPath, 'lib', 'fake')).createSync(recursive: true); + File(path.join(sdkPath, 'version')).writeAsStringSync('2.10.0'); + File(path.join(sdkPath, 'lib', 'core', 'core.dart')).writeAsStringSync(r''' library dart.core; import 'dart:async'; diff --git a/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart b/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart index 30e01ff3fb2..6b85a28e4f5 100644 --- a/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart +++ b/pkg/analyzer/lib/dart/sdk/build_sdk_summary.dart @@ -22,6 +22,7 @@ import 'package:analyzer/src/summary2/link.dart'; import 'package:analyzer/src/summary2/linked_element_factory.dart'; import 'package:analyzer/src/summary2/reference.dart'; import 'package:meta/meta.dart'; +import 'package:pub_semver/pub_semver.dart'; import 'package:yaml/yaml.dart'; /// Build summary for SDK at the given [sdkPath]. @@ -44,7 +45,11 @@ Uint8List buildSdkSummary({ var file = resourceProvider.getFile(embedderYamlPath); var content = file.readAsStringSync(); var map = loadYaml(content) as YamlMap; - var embedderSdk = EmbedderSdk(resourceProvider, {file.parent: map}); + var embedderSdk = EmbedderSdk( + resourceProvider, + {file.parent: map}, + languageVersion: sdk.languageVersion, + ); for (var library in embedderSdk.sdkLibraries) { var uriStr = library.shortName; if (sdk.libraryMap.getLibrary(uriStr) == null) { @@ -60,6 +65,7 @@ Uint8List buildSdkSummary({ return _Builder( sdk.context, sdk.allowedExperimentsJson, + sdk.languageVersion, librarySources, ).build(); } @@ -73,11 +79,13 @@ class _Builder { final List inputLibraries = []; AllowedExperiments allowedExperiments; + Version languageVersion; final PackageBundleAssembler bundleAssembler = PackageBundleAssembler(); _Builder( this.context, this.allowedExperimentsJson, + this.languageVersion, this.librarySources, ) { allowedExperiments = _parseAllowedExperiments(allowedExperimentsJson); @@ -100,6 +108,10 @@ class _Builder { bundle2: linkResult.bundle, sdk: PackageBundleSdkBuilder( allowedExperimentsJson: allowedExperimentsJson, + languageVersion: LinkedLanguageVersionBuilder( + major: languageVersion.major, + minor: languageVersion.minor, + ), ), ).toBuffer(); diff --git a/pkg/analyzer/lib/source/embedder.dart b/pkg/analyzer/lib/source/embedder.dart index f55cc5d1628..f2cb675919e 100644 --- a/pkg/analyzer/lib/source/embedder.dart +++ b/pkg/analyzer/lib/source/embedder.dart @@ -18,6 +18,7 @@ import 'package:analyzer/src/generated/sdk_io.dart'; import 'package:analyzer/src/generated/source.dart'; import 'package:analyzer/src/generated/source_io.dart' show FileBasedSource; import 'package:analyzer/src/summary/idl.dart' show PackageBundle; +import 'package:pub_semver/src/version.dart'; import 'package:yaml/yaml.dart'; export 'package:analyzer/src/context/builder.dart' show EmbedderYamlLocator; @@ -38,12 +39,14 @@ class EmbedderSdk extends AbstractDartSdk { embedderYamls?.forEach(_processEmbedderYaml); } - // TODO(danrubel) Determine SDK version @override String get allowedExperimentsJson { return null; } + @override + Version get languageVersion => throw UnimplementedError(); + @override String get sdkVersion => '0'; diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart index daf2debc493..de3f46fe4b4 100644 --- a/pkg/analyzer/lib/src/context/builder.dart +++ b/pkg/analyzer/lib/src/context/builder.dart @@ -225,6 +225,20 @@ class ContextBuilder { resourceProvider: resourceProvider); } + DartSdk folderSdk; + { + String sdkPath = sdkManager.defaultSdkDirectory; + SdkDescription description = SdkDescription(sdkPath); + folderSdk = sdkManager.getSdk(description, () { + var sdk = FolderBasedDartSdk( + resourceProvider, + resourceProvider.getFolder(sdkPath), + ); + sdk.analysisOptions = analysisOptions; + return sdk; + }); + } + if (workspace != null) { var partialSourceFactory = workspace.createSourceFactory(null, null); var embedderYamlSource = partialSourceFactory.forUri( @@ -237,22 +251,17 @@ class ContextBuilder { EmbedderYamlLocator.forLibFolder(libFolder); Map embedderMap = locator.embedderYamls; if (embedderMap.isNotEmpty) { - EmbedderSdk embedderSdk = EmbedderSdk(resourceProvider, embedderMap); + EmbedderSdk embedderSdk = EmbedderSdk( + resourceProvider, + embedderMap, + languageVersion: folderSdk.languageVersion, + ); return embedderSdk; } } } - String sdkPath = sdkManager.defaultSdkDirectory; - SdkDescription description = SdkDescription(sdkPath); - return sdkManager.getSdk(description, () { - var sdk = FolderBasedDartSdk( - resourceProvider, - resourceProvider.getFolder(sdkPath), - ); - sdk.analysisOptions = analysisOptions; - return sdk; - }); + return folderSdk; } /// Return the analysis options that should be used to analyze code in the diff --git a/pkg/analyzer/lib/src/dart/sdk/sdk.dart b/pkg/analyzer/lib/src/dart/sdk/sdk.dart index d50e6e614d6..29956ee3b30 100644 --- a/pkg/analyzer/lib/src/dart/sdk/sdk.dart +++ b/pkg/analyzer/lib/src/dart/sdk/sdk.dart @@ -3,6 +3,7 @@ // BSD-style license that can be found in the LICENSE file. import 'dart:collection'; +import 'dart:io' as io; import 'package:analyzer/dart/analysis/features.dart'; import 'package:analyzer/dart/analysis/utilities.dart'; @@ -14,8 +15,16 @@ import 'package:analyzer/src/generated/engine.dart'; import 'package:analyzer/src/generated/java_engine_io.dart'; import 'package:analyzer/src/generated/sdk.dart'; import 'package:analyzer/src/generated/source_io.dart'; +import 'package:pub_semver/pub_semver.dart'; import 'package:yaml/yaml.dart'; +Version languageVersionFromSdkVersion(String sdkVersionStr) { + var sdkVersionParts = sdkVersionStr.split('.'); + var sdkVersionMajor = int.parse(sdkVersionParts[0]); + var sdkVersionMinor = int.parse(sdkVersionParts[1]); + return Version(sdkVersionMajor, sdkVersionMinor, 0); +} + /// An abstract implementation of a Dart SDK in which the available libraries /// are stored in a library map. Subclasses are responsible for populating the /// library map. @@ -197,11 +206,21 @@ class EmbedderSdk extends AbstractDartSdk { static const String _DART_COLON_PREFIX = 'dart:'; static const String _EMBEDDED_LIB_MAP_KEY = 'embedded_libs'; + + Version _languageVersion; + final Map _urlMappings = HashMap(); + /// TODO(scheglov) Make [languageVersion] required. + /// https://github.com/dart-lang/sdk/issues/42890 EmbedderSdk( - ResourceProvider resourceProvider, Map embedderYamls) { + ResourceProvider resourceProvider, + Map embedderYamls, { + Version languageVersion, + }) { this.resourceProvider = resourceProvider; + this._languageVersion = + languageVersion ?? languageVersionFromSdkVersion(io.Platform.version); embedderYamls?.forEach(_processEmbedderYaml); } @@ -221,6 +240,9 @@ class EmbedderSdk extends AbstractDartSdk { return null; } + @override + Version get languageVersion => _languageVersion; + @override // TODO(danrubel) Determine SDK version String get sdkVersion => '0'; @@ -364,6 +386,9 @@ class FolderBasedDartSdk extends AbstractDartSdk { /// discovered. String _sdkVersion; + /// The cached language version of this SDK. + Version _languageVersion; + /// The file containing the pub executable. File _pubExecutable; @@ -395,6 +420,18 @@ class FolderBasedDartSdk extends AbstractDartSdk { Folder get docDirectory => _sdkDirectory.getChildAssumingFolder(_DOCS_DIRECTORY_NAME); + @override + Version get languageVersion { + if (_languageVersion == null) { + var sdkVersionStr = _sdkDirectory + .getChildAssumingFile(_VERSION_FILE_NAME) + .readAsStringSync(); + _languageVersion = languageVersionFromSdkVersion(sdkVersionStr); + } + + return _languageVersion; + } + /// Return the directory within the SDK directory that contains the libraries. Folder get libraryDirectory { return _libraryDirectory ??= diff --git a/pkg/analyzer/lib/src/generated/sdk.dart b/pkg/analyzer/lib/src/generated/sdk.dart index efa21c73235..1f141f7c6be 100644 --- a/pkg/analyzer/lib/src/generated/sdk.dart +++ b/pkg/analyzer/lib/src/generated/sdk.dart @@ -8,6 +8,7 @@ import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/ast/visitor.dart'; import 'package:analyzer/src/generated/engine.dart' show AnalysisContext; import 'package:analyzer/src/generated/source.dart' show Source; +import 'package:pub_semver/pub_semver.dart'; /// A Dart SDK installed in a specified location. abstract class DartSdk { @@ -34,6 +35,12 @@ abstract class DartSdk { /// Return the analysis context used for all of the sources in this [DartSdk]. AnalysisContext get context; + /// Return the language version of this SDK, or throws an exception. + /// + /// The language version has only major/minor components, the patch number + /// is always zero, because the patch number does not change the language. + Version get languageVersion; + /// Return a list containing all of the libraries defined in this SDK. List get sdkLibraries; diff --git a/pkg/analyzer/lib/src/summary/format.dart b/pkg/analyzer/lib/src/summary/format.dart index 18d2996721e..f7c6b215a08 100644 --- a/pkg/analyzer/lib/src/summary/format.dart +++ b/pkg/analyzer/lib/src/summary/format.dart @@ -17792,6 +17792,7 @@ class PackageBundleSdkBuilder extends Object with _PackageBundleSdkMixin implements idl.PackageBundleSdk { String _allowedExperimentsJson; + LinkedLanguageVersionBuilder _languageVersion; @override String get allowedExperimentsJson => _allowedExperimentsJson ??= ''; @@ -17801,27 +17802,49 @@ class PackageBundleSdkBuilder extends Object this._allowedExperimentsJson = value; } - PackageBundleSdkBuilder({String allowedExperimentsJson}) - : _allowedExperimentsJson = allowedExperimentsJson; + @override + LinkedLanguageVersionBuilder get languageVersion => _languageVersion; + + /// The language version of the SDK. + set languageVersion(LinkedLanguageVersionBuilder value) { + this._languageVersion = value; + } + + PackageBundleSdkBuilder( + {String allowedExperimentsJson, + LinkedLanguageVersionBuilder languageVersion}) + : _allowedExperimentsJson = allowedExperimentsJson, + _languageVersion = languageVersion; /// Flush [informative] data recursively. - void flushInformative() {} + void flushInformative() { + _languageVersion?.flushInformative(); + } /// Accumulate non-[informative] data into [signature]. void collectApiSignature(api_sig.ApiSignature signature) { signature.addString(this._allowedExperimentsJson ?? ''); + signature.addBool(this._languageVersion != null); + this._languageVersion?.collectApiSignature(signature); } fb.Offset finish(fb.Builder fbBuilder) { fb.Offset offset_allowedExperimentsJson; + fb.Offset offset_languageVersion; if (_allowedExperimentsJson != null) { offset_allowedExperimentsJson = fbBuilder.writeString(_allowedExperimentsJson); } + if (_languageVersion != null) { + offset_languageVersion = _languageVersion.finish(fbBuilder); + } fbBuilder.startTable(); if (offset_allowedExperimentsJson != null) { fbBuilder.addOffset(0, offset_allowedExperimentsJson); } + if (offset_languageVersion != null) { + fbBuilder.addOffset(1, offset_languageVersion); + } return fbBuilder.endTable(); } } @@ -17843,6 +17866,7 @@ class _PackageBundleSdkImpl extends Object _PackageBundleSdkImpl(this._bc, this._bcOffset); String _allowedExperimentsJson; + idl.LinkedLanguageVersion _languageVersion; @override String get allowedExperimentsJson { @@ -17850,6 +17874,13 @@ class _PackageBundleSdkImpl extends Object const fb.StringReader().vTableGet(_bc, _bcOffset, 0, ''); return _allowedExperimentsJson; } + + @override + idl.LinkedLanguageVersion get languageVersion { + _languageVersion ??= + const _LinkedLanguageVersionReader().vTableGet(_bc, _bcOffset, 1, null); + return _languageVersion; + } } abstract class _PackageBundleSdkMixin implements idl.PackageBundleSdk { @@ -17859,12 +17890,16 @@ abstract class _PackageBundleSdkMixin implements idl.PackageBundleSdk { if (allowedExperimentsJson != '') { _result["allowedExperimentsJson"] = allowedExperimentsJson; } + if (languageVersion != null) { + _result["languageVersion"] = languageVersion.toJson(); + } return _result; } @override Map toMap() => { "allowedExperimentsJson": allowedExperimentsJson, + "languageVersion": languageVersion, }; @override diff --git a/pkg/analyzer/lib/src/summary/format.fbs b/pkg/analyzer/lib/src/summary/format.fbs index e948b37952e..211f5fb797f 100644 --- a/pkg/analyzer/lib/src/summary/format.fbs +++ b/pkg/analyzer/lib/src/summary/format.fbs @@ -1274,6 +1274,9 @@ table PackageBundle { table PackageBundleSdk { /// The content of the `allowed_experiments.json` from SDK. allowedExperimentsJson:string (id: 0); + + /// The language version of the SDK. + languageVersion:LinkedLanguageVersion (id: 1); } /// Summary information about a top-level type inference error. diff --git a/pkg/analyzer/lib/src/summary/idl.dart b/pkg/analyzer/lib/src/summary/idl.dart index 1eea7da347d..8f6deeacd49 100644 --- a/pkg/analyzer/lib/src/summary/idl.dart +++ b/pkg/analyzer/lib/src/summary/idl.dart @@ -1912,6 +1912,10 @@ abstract class PackageBundleSdk extends base.SummaryClass { /// The content of the `allowed_experiments.json` from SDK. @Id(0) String get allowedExperimentsJson; + + /// The language version of the SDK. + @Id(1) + LinkedLanguageVersion get languageVersion; } /// Summary information about a top-level type inference error. diff --git a/pkg/analyzer/lib/src/summary/summary_sdk.dart b/pkg/analyzer/lib/src/summary/summary_sdk.dart index 3315a882c2a..80cd2395227 100644 --- a/pkg/analyzer/lib/src/summary/summary_sdk.dart +++ b/pkg/analyzer/lib/src/summary/summary_sdk.dart @@ -10,11 +10,12 @@ import 'package:analyzer/src/generated/source.dart' show DartUriResolver, Source, SourceFactory; import 'package:analyzer/src/summary/idl.dart'; import 'package:analyzer/src/summary/package_bundle_reader.dart'; +import 'package:pub_semver/pub_semver.dart'; /// An implementation of [DartSdk] which provides analysis results for `dart:` /// libraries from the given summary file. This implementation is limited and /// suitable only for command-line tools, but not for IDEs - it does not -/// implement [sdkLibraries], [sdkVersion], [uris] and [fromFileUri]. +/// implement [sdkLibraries], [uris] and [fromFileUri]. class SummaryBasedDartSdk implements DartSdk { SummaryDataStore _dataStore; InSummaryUriResolver _uriResolver; @@ -41,7 +42,7 @@ class SummaryBasedDartSdk implements DartSdk { @override String get allowedExperimentsJson { - return _bundle.sdk?.allowedExperimentsJson; + return _bundle.sdk.allowedExperimentsJson; } /// Return the [PackageBundle] for this SDK, not `null`. @@ -57,6 +58,12 @@ class SummaryBasedDartSdk implements DartSdk { return _analysisContext; } + @override + Version get languageVersion { + var version = _bundle.sdk.languageVersion; + return Version(version.major, version.minor, 0); + } + @override List get sdkLibraries { throw UnimplementedError(); diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart index d44f818963e..a4ee8111e4f 100644 --- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart +++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart @@ -5,10 +5,12 @@ import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/file_system/memory_file_system.dart'; import 'package:analyzer/src/context/context.dart'; +import 'package:analyzer/src/dart/sdk/sdk.dart'; import 'package:analyzer/src/generated/engine.dart'; import 'package:analyzer/src/generated/sdk.dart'; import 'package:analyzer/src/generated/source.dart'; import 'package:meta/meta.dart'; +import 'package:pub_semver/src/version.dart'; const String sdkRoot = '/sdk'; @@ -1084,6 +1086,8 @@ class MockSdk implements DartSdk { @override final List sdkLibraries = []; + File _versionFile; + /// Optional [additionalLibraries] should have unique URIs, and paths in /// their units are relative (will be put into `sdkRoot/lib`). MockSdk({ @@ -1091,6 +1095,11 @@ class MockSdk implements DartSdk { AnalysisOptionsImpl analysisOptions, List additionalLibraries = const [], }) : _analysisOptions = analysisOptions ?? AnalysisOptionsImpl() { + _versionFile = resourceProvider + .getFolder(resourceProvider.convertPath(sdkRoot)) + .getChildAssumingFile('version'); + _versionFile.writeAsStringSync('2.10.0'); + for (MockSdkLibrary library in _LIBRARIES) { var convertedLibrary = library._toProvider(resourceProvider); sdkLibraries.add(convertedLibrary); @@ -1179,6 +1188,12 @@ class MockSdk implements DartSdk { return _analysisContext; } + @override + Version get languageVersion { + var sdkVersionStr = _versionFile.readAsStringSync(); + return languageVersionFromSdkVersion(sdkVersionStr); + } + @override String get sdkVersion => throw UnimplementedError(); diff --git a/pkg/analyzer/test/src/context/builder_test.dart b/pkg/analyzer/test/src/context/builder_test.dart index 30165300f23..14729ad91a4 100644 --- a/pkg/analyzer/test/src/context/builder_test.dart +++ b/pkg/analyzer/test/src/context/builder_test.dart @@ -67,19 +67,9 @@ class ContextBuilderTest with ResourceProviderMixin { windows: resourceProvider.pathContext.style == path.windows.style); } - void createDefaultSdk(Folder sdkDir) { - defaultSdkPath = join(sdkDir.path, 'default', 'sdk'); - String librariesFilePath = join(defaultSdkPath, 'lib', '_internal', - 'sdk_library_metadata', 'lib', 'libraries.dart'); - newFile(librariesFilePath, content: r''' -const Map libraries = const { - "async": const LibraryInfo("async/async.dart"), - "core": const LibraryInfo("core/core.dart"), -}; -'''); - sdkManager = DartSdkManager(defaultSdkPath); - builder = ContextBuilder(resourceProvider, sdkManager, contentCache, - options: builderOptions); + void createDefaultSdk() { + defaultSdkPath = convertPath(sdkRoot); + MockSdk(resourceProvider: resourceProvider); } void setUp() { @@ -347,8 +337,7 @@ bar:${toUriStr('/pkg/bar')} void test_createSourceFactory_noProvider_packages_embedder_noExtensions() { String rootPath = convertPath('/root'); - Folder rootFolder = getFolder(rootPath); - createDefaultSdk(rootFolder); + createDefaultSdk(); String projectPath = join(rootPath, 'project'); String packageFilePath = join(projectPath, '.packages'); @@ -387,8 +376,7 @@ b:${resourceProvider.pathContext.toUri(packageB)} void test_createSourceFactory_noProvider_packages_noEmbedder_noExtensions() { String rootPath = convertPath('/root'); - Folder rootFolder = getFolder(rootPath); - createDefaultSdk(rootFolder); + createDefaultSdk(); String projectPath = join(rootPath, 'project'); String packageFilePath = join(projectPath, '.packages'); String packageA = join(rootPath, 'pkgs', 'a'); diff --git a/pkg/analyzer/test/src/dart/sdk/sdk_test.dart b/pkg/analyzer/test/src/dart/sdk/sdk_test.dart index 06d671db6f4..01403adfdf8 100644 --- a/pkg/analyzer/test/src/dart/sdk/sdk_test.dart +++ b/pkg/analyzer/test/src/dart/sdk/sdk_test.dart @@ -10,6 +10,7 @@ import 'package:analyzer/src/generated/java_engine_io.dart'; import 'package:analyzer/src/generated/sdk.dart'; import 'package:analyzer/src/generated/source.dart'; import 'package:analyzer/src/test_utilities/resource_provider_mixin.dart'; +import 'package:pub_semver/pub_semver.dart'; import 'package:test/test.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -30,7 +31,11 @@ class EmbedderSdkTest extends EmbedderRelatedTest { EmbedderYamlLocator locator = EmbedderYamlLocator({ 'fox': [pathTranslator.getResource(foxLib)] }); - EmbedderSdk sdk = EmbedderSdk(resourceProvider, locator.embedderYamls); + EmbedderSdk sdk = EmbedderSdk( + resourceProvider, + locator.embedderYamls, + languageVersion: Version.parse('2.10.0'), + ); expect(sdk.allowedExperimentsJson, isNull); @@ -45,7 +50,11 @@ class EmbedderSdkTest extends EmbedderRelatedTest { EmbedderYamlLocator locator = EmbedderYamlLocator({ 'fox': [pathTranslator.getResource(foxLib)] }); - EmbedderSdk sdk = EmbedderSdk(resourceProvider, locator.embedderYamls); + EmbedderSdk sdk = EmbedderSdk( + resourceProvider, + locator.embedderYamls, + languageVersion: Version.parse('2.10.0'), + ); expect(sdk.urlMappings, hasLength(5)); } @@ -54,7 +63,11 @@ class EmbedderSdkTest extends EmbedderRelatedTest { EmbedderYamlLocator locator = EmbedderYamlLocator({ 'fox': [pathTranslator.getResource(foxLib)] }); - EmbedderSdk sdk = EmbedderSdk(resourceProvider, locator.embedderYamls); + EmbedderSdk sdk = EmbedderSdk( + resourceProvider, + locator.embedderYamls, + languageVersion: Version.parse('2.10.0'), + ); expectSource(String posixPath, String dartUri) { Uri uri = Uri.parse(posixToOSFileUri(posixPath)); @@ -73,7 +86,11 @@ class EmbedderSdkTest extends EmbedderRelatedTest { EmbedderYamlLocator locator = EmbedderYamlLocator({ 'fox': [pathTranslator.getResource(foxLib)] }); - EmbedderSdk sdk = EmbedderSdk(resourceProvider, locator.embedderYamls); + EmbedderSdk sdk = EmbedderSdk( + resourceProvider, + locator.embedderYamls, + languageVersion: Version.parse('2.10.0'), + ); SdkLibrary lib = sdk.getSdkLibrary('dart:fox'); expect(lib, isNotNull); @@ -85,7 +102,11 @@ class EmbedderSdkTest extends EmbedderRelatedTest { EmbedderYamlLocator locator = EmbedderYamlLocator({ 'fox': [pathTranslator.getResource(foxLib)] }); - EmbedderSdk sdk = EmbedderSdk(resourceProvider, locator.embedderYamls); + EmbedderSdk sdk = EmbedderSdk( + resourceProvider, + locator.embedderYamls, + languageVersion: Version.parse('2.10.0'), + ); void expectSource(String dartUri, String posixPath) { Source source = sdk.mapDartUri(dartUri); diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart index de97117847a..702c73a3a39 100644 --- a/pkg/analyzer_cli/lib/src/driver.dart +++ b/pkg/analyzer_cli/lib/src/driver.dart @@ -441,7 +441,11 @@ class Driver with HasContextMixin implements CommandLineStarter { // Setup embedding. if (includeSdkResolver) { - var embedderSdk = EmbedderSdk(resourceProvider, embedderMap); + var embedderSdk = EmbedderSdk( + resourceProvider, + embedderMap, + languageVersion: sdk.languageVersion, + ); if (embedderSdk.libraryMap.size() == 0) { // The embedder uri resolver has no mappings. Use the default Dart SDK // uri resolver. diff --git a/pkg/dev_compiler/tool/patch_sdk.dart b/pkg/dev_compiler/tool/patch_sdk.dart index 06c87dbb4ba..74b3ec5709a 100755 --- a/pkg/dev_compiler/tool/patch_sdk.dart +++ b/pkg/dev_compiler/tool/patch_sdk.dart @@ -40,7 +40,7 @@ void main(List argv) { var outDir = resolveInputUri(outPath.endsWith('/') ? outPath : '$outPath/'); var outLibRoot = outDir.resolve('lib/'); - var inputVersion = Platform.script.resolve('../../../tools/VERSION'); + var inputVersion = Uri.file(Platform.executable).resolve('../version'); var outVersion = outDir.resolve('version'); var specification = LibrariesSpecification.parse( diff --git a/pkg/testing/lib/src/analyze.dart b/pkg/testing/lib/src/analyze.dart index fd4d17f59f5..0faf99fe793 100644 --- a/pkg/testing/lib/src/analyze.dart +++ b/pkg/testing/lib/src/analyze.dart @@ -218,7 +218,7 @@ Future analyzeUris( List arguments = [ "--packages=${toFilePath(packages)}", "--format=machine", - "--dart-sdk=${Uri.base.resolve('sdk/').toFilePath()}", + "--dart-sdk=${_findSdkPath()}", ]; if (analysisOptions != null) { arguments.add("--options=${toFilePath(analysisOptions)}"); @@ -274,6 +274,18 @@ Future analyzeUris( } } +String _findSdkPath() { + var executableUri = Uri.file(Platform.executable); + if (File.fromUri(executableUri.resolve('../version')).existsSync()) { + return executableUri.resolve('..').toFilePath(); + } else if (File.fromUri(executableUri.resolve('dart-sdk/version')) + .existsSync()) { + return executableUri.resolve('dart-sdk').toFilePath(); + } else { + throw StateError('Cannot find dart-sdk for $executableUri'); + } +} + Future git(String command, Iterable arguments, {String workingDirectory}) async { ProcessResult result = await Process.run( diff --git a/tools/bots/try_benchmarks.sh b/tools/bots/try_benchmarks.sh index 7241cb5c69e..920e30a3438 100755 --- a/tools/bots/try_benchmarks.sh +++ b/tools/bots/try_benchmarks.sh @@ -179,7 +179,6 @@ EOF out/ReleaseIA32/dart pkg/front_end/tool/perf.dart scan hello.dart out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart kernel_gen_e2e hello.dart out/ReleaseIA32/dart pkg/front_end/tool/fasta_perf.dart scan hello.dart - out/ReleaseIA32/dart-sdk/bin/dart --print_metrics pkg/analyzer_cli/bin/analyzer.dart --dart-sdk=sdk hello.dart out/ReleaseIA32/run_vm_tests --dfe=out/ReleaseIA32/kernel-service.dart.snapshot InitialRSS out/ReleaseIA32/run_vm_tests --dfe=out/ReleaseIA32/kernel-service.dart.snapshot --sound-null-safety --enable-experiment=non-nullable InitialRSS out/ReleaseIA32/run_vm_tests --dfe=out/ReleaseIA32/kernel-service.dart.snapshot GenKernelKernelLoadKernel @@ -355,7 +354,6 @@ EOF out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart kernel_gen_e2e hello.dart out/ReleaseX64/dart pkg/front_end/tool/fasta_perf.dart scan hello.dart out/ReleaseX64/dart-sdk/bin/dart pkg/analysis_server/benchmark/benchmarks.dart run --quick --repeat 1 analysis-server-cold - out/ReleaseX64/dart-sdk/bin/dart --print_metrics pkg/analyzer_cli/bin/analyzer.dart --dart-sdk=sdk hello.dart echo '[{"name":"foo","edits":[["pkg/compiler/lib/src/dart2js.dart","2016","2017"],["pkg/compiler/lib/src/options.dart","2016","2017"]]}]' > appjit_train_edits.json out/ReleaseX64/dart --background-compilation=false --snapshot-kind=app-jit --snapshot=pkg/front_end/tool/incremental_perf.dart.appjit pkg/front_end/tool/incremental_perf.dart --target=vm --sdk-summary=out/ReleaseX64/vm_platform_strong.dill --sdk-library-specification=sdk/lib/libraries.json pkg/compiler/lib/src/dart2js.dart appjit_train_edits.json out/ReleaseX64/dart --background-compilation=false pkg/front_end/tool/incremental_perf.dart.appjit --target=vm --sdk-summary=out/ReleaseX64/vm_platform_strong.dill --sdk-library-specification=sdk/lib/libraries.json pkg/front_end/benchmarks/ikg/hello.dart pkg/front_end/benchmarks/ikg/hello.edits.json