diff --git a/pkg/analysis_server/test/services/search/search_engine_test.dart b/pkg/analysis_server/test/services/search/search_engine_test.dart index c46b81f7aec..b09dfac42b9 100644 --- a/pkg/analysis_server/test/services/search/search_engine_test.dart +++ b/pkg/analysis_server/test/services/search/search_engine_test.dart @@ -7,6 +7,7 @@ import 'dart:async'; import 'package:analysis_server/src/services/search/search_engine.dart'; import 'package:analysis_server/src/services/search/search_engine_internal.dart'; import 'package:analyzer/dart/element/element.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/driver.dart'; import 'package:analyzer/src/dart/analysis/file_state.dart'; @@ -489,7 +490,7 @@ class B extends A {} return AnalysisDriver(scheduler, logger, resourceProvider, byteStore, contentOverlay, null, SourceFactory(resolvers), AnalysisOptionsImpl(), - enableIndex: true); + packages: Packages.empty, enableIndex: true); } static void _assertContainsClass(Set subtypes, String name) { diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart index 70d6aa7df0d..5038e0fca3a 100644 --- a/pkg/analyzer/lib/src/context/builder.dart +++ b/pkg/analyzer/lib/src/context/builder.dart @@ -129,6 +129,7 @@ class ContextBuilder { contextRoot, sf, options, + packages: createPackageMap(path), enableIndex: enableIndex, externalSummaries: summaryData); diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart index a889a250400..7ea2d29ae31 100644 --- a/pkg/analyzer/lib/src/dart/analysis/driver.dart +++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart @@ -17,6 +17,7 @@ import 'package:analyzer/error/listener.dart'; import 'package:analyzer/exception/exception.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/src/context/context_root.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/feature_set_provider.dart'; import 'package:analyzer/src/dart/analysis/file_state.dart'; @@ -131,6 +132,9 @@ class AnalysisDriver implements AnalysisDriverGeneric { /// The analysis options to analyze with. AnalysisOptionsImpl _analysisOptions; + /// The [Packages] object with packages and their language versions. + Packages _packages; + /// The [SourceFactory] is used to resolve URIs to paths and restore URIs /// from file paths. SourceFactory _sourceFactory; @@ -286,11 +290,13 @@ class AnalysisDriver implements AnalysisDriverGeneric { this.contextRoot, SourceFactory sourceFactory, this._analysisOptions, - {this.disableChangesAndCacheAllResults = false, + {@required Packages packages, + this.disableChangesAndCacheAllResults = false, this.enableIndex = false, SummaryDataStore externalSummaries, bool retainDataForTesting = false}) : _logger = logger, + _packages = packages ?? Packages.empty, _sourceFactory = sourceFactory, _externalSummaries = externalSummaries, testingData = retainDataForTesting ? TestingData() : null { @@ -488,11 +494,17 @@ class AnalysisDriver implements AnalysisDriverGeneric { /// /// At least one of the optional parameters should be provided, but only those /// that represent state that has actually changed need be provided. - void configure( - {AnalysisOptions analysisOptions, SourceFactory sourceFactory}) { + void configure({ + AnalysisOptions analysisOptions, + Packages packages, + SourceFactory sourceFactory, + }) { if (analysisOptions != null) { _analysisOptions = analysisOptions; } + if (packages != null) { + _packages = packages; + } if (sourceFactory != null) { _sourceFactory = sourceFactory; } @@ -1460,7 +1472,7 @@ class AnalysisDriver implements AnalysisDriverGeneric { var featureSetProvider = FeatureSetProvider.build( resourceProvider: resourceProvider, - contextRoot: contextRoot, + packages: _packages, sourceFactory: _sourceFactory, defaultFeatureSet: _analysisOptions.contextFeatures, ); diff --git a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart index 2f7abdfe530..0bbaee58216 100644 --- a/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart +++ b/pkg/analyzer/lib/src/dart/analysis/feature_set_provider.dart @@ -4,7 +4,6 @@ import 'package:analyzer/dart/analysis/features.dart'; import 'package:analyzer/file_system/file_system.dart'; -import 'package:analyzer/src/context/context_root.dart'; import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/generated/source.dart'; import 'package:meta/meta.dart'; @@ -51,7 +50,7 @@ class FeatureSetProvider { static FeatureSetProvider build({ @required ResourceProvider resourceProvider, - @required ContextRoot contextRoot, + @required Packages packages, @required SourceFactory sourceFactory, @required FeatureSet defaultFeatureSet, }) { @@ -61,8 +60,6 @@ class FeatureSetProvider { defaultFeatureSet, ); - var packages = _findPackages(resourceProvider, contextRoot); - return FeatureSetProvider._( sdkFeatureSet: sdkFeatureSet, packages: packages, @@ -97,16 +94,4 @@ class FeatureSetProvider { return defaultFeatureSet; } - - static Packages _findPackages( - ResourceProvider resourceProvider, - ContextRoot contextRoot, - ) { - if (contextRoot == null) { - return Packages(const {}); - } - - var rootFolder = resourceProvider.getFolder(contextRoot.root); - return findPackagesFrom(resourceProvider, rootFolder); - } } diff --git a/pkg/analyzer/lib/src/lint/analysis.dart b/pkg/analyzer/lib/src/lint/analysis.dart index a5d61ba05a9..49536c714bd 100644 --- a/pkg/analyzer/lib/src/lint/analysis.dart +++ b/pkg/analyzer/lib/src/lint/analysis.dart @@ -175,14 +175,16 @@ class LintDriver { PerformanceLog log = PerformanceLog(null); AnalysisDriverScheduler scheduler = AnalysisDriverScheduler(log); AnalysisDriver analysisDriver = AnalysisDriver( - scheduler, - log, - resourceProvider, - MemoryByteStore(), - FileContentOverlay(), - null, - sourceFactory, - _buildAnalyzerOptions(options)); + scheduler, + log, + resourceProvider, + MemoryByteStore(), + FileContentOverlay(), + null, + sourceFactory, + _buildAnalyzerOptions(options), + packages: Packages.empty, + ); analysisDriver.results.listen((_) {}); analysisDriver.exceptions.listen((_) {}); scheduler.start(); diff --git a/pkg/analyzer/test/generated/resolver_test_case.dart b/pkg/analyzer/test/generated/resolver_test_case.dart index 86950e94da5..0575378b706 100644 --- a/pkg/analyzer/test/generated/resolver_test_case.dart +++ b/pkg/analyzer/test/generated/resolver_test_case.dart @@ -13,6 +13,7 @@ import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/dart/element/type_provider.dart'; import 'package:analyzer/error/error.dart'; import 'package:analyzer/file_system/file_system.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/driver.dart'; import 'package:analyzer/src/dart/analysis/file_state.dart'; @@ -600,7 +601,8 @@ class ResolverTestCase with ResourceProviderMixin { PerformanceLog log = PerformanceLog(_logBuffer); AnalysisDriverScheduler scheduler = AnalysisDriverScheduler(log); driver = AnalysisDriver(scheduler, log, resourceProvider, MemoryByteStore(), - fileContentOverlay, null, sourceFactory, options); + fileContentOverlay, null, sourceFactory, options, + packages: Packages.empty); scheduler.start(); } diff --git a/pkg/analyzer/test/src/dart/analysis/base.dart b/pkg/analyzer/test/src/dart/analysis/base.dart index d1cebbcc7a9..4d2361c16e7 100644 --- a/pkg/analyzer/test/src/dart/analysis/base.dart +++ b/pkg/analyzer/test/src/dart/analysis/base.dart @@ -6,6 +6,7 @@ import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/visitor.dart'; import 'package:analyzer/file_system/file_system.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/driver.dart'; import 'package:analyzer/src/dart/analysis/file_state.dart'; @@ -99,6 +100,7 @@ class BaseAnalysisDriverTest with ResourceProviderMixin { ResourceUriResolver(resourceProvider) ]), createAnalysisOptions(), + packages: Packages.empty, disableChangesAndCacheAllResults: disableChangesAndCacheAllResults, enableIndex: true, externalSummaries: externalSummaries); diff --git a/pkg/analyzer/test/src/dart/analysis/driver_test.dart b/pkg/analyzer/test/src/dart/analysis/driver_test.dart index a7f4feee98b..789a977da4b 100644 --- a/pkg/analyzer/test/src/dart/analysis/driver_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/driver_test.dart @@ -9,6 +9,7 @@ import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/dart/element/type.dart'; import 'package:analyzer/error/error.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/driver.dart'; import 'package:analyzer/src/dart/analysis/file_state.dart'; @@ -78,7 +79,8 @@ class AnalysisDriverSchedulerTest with ResourceProviderMixin { SourceFactory( [DartUriResolver(sdk), ResourceUriResolver(resourceProvider)], ), - AnalysisOptionsImpl()); + AnalysisOptionsImpl(), + packages: Packages.empty); driver.results.forEach(allResults.add); return driver; } diff --git a/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart b/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart index d5a39b6e6fb..a1746fa9c1f 100644 --- a/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/feature_set_provider_test.dart @@ -4,7 +4,6 @@ import 'package:analyzer/dart/analysis/features.dart'; import 'package:analyzer/file_system/file_system.dart'; -import 'package:analyzer/src/context/context_root.dart'; import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/context/source.dart'; import 'package:analyzer/src/dart/analysis/feature_set_provider.dart'; @@ -128,11 +127,7 @@ test:lib/ void _buildProvider(List enabledExperiments) { provider = FeatureSetProvider.build( resourceProvider: resourceProvider, - contextRoot: ContextRoot( - convertPath('/test'), - [], - pathContext: resourceProvider.pathContext, - ), + packages: findPackagesFrom(resourceProvider, getFolder('/test')), sourceFactory: sourceFactory, defaultFeatureSet: FeatureSet.fromEnableFlags(enabledExperiments), ); diff --git a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart index de5f084843e..079713add8b 100644 --- a/pkg/analyzer/test/src/dart/analysis/file_state_test.dart +++ b/pkg/analyzer/test/src/dart/analysis/file_state_test.dart @@ -8,6 +8,7 @@ import 'dart:typed_data'; import 'package:analyzer/dart/analysis/declared_variables.dart'; import 'package:analyzer/dart/analysis/features.dart'; import 'package:analyzer/file_system/file_system.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/feature_set_provider.dart'; import 'package:analyzer/src/dart/analysis/file_state.dart'; @@ -61,7 +62,7 @@ class FileSystemStateTest with ResourceProviderMixin { AnalysisOptions analysisOptions = AnalysisOptionsImpl(); var featureSetProvider = FeatureSetProvider.build( resourceProvider: resourceProvider, - contextRoot: null, + packages: Packages.empty, sourceFactory: sourceFactory, defaultFeatureSet: FeatureSet.fromEnableFlags([]), ); diff --git a/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart b/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart index a55f39c7974..8e35b702ef3 100644 --- a/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart +++ b/pkg/analyzer/test/src/dart/resolution/driver_resolution.dart @@ -7,6 +7,7 @@ import 'dart:async'; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/src/context/context_root.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/driver.dart'; import 'package:analyzer/src/dart/analysis/file_state.dart'; @@ -75,7 +76,8 @@ class DriverResolutionTest with ResourceProviderMixin, ResolutionTest { PackageMapUriResolver(resourceProvider, packageMap), ResourceUriResolver(resourceProvider) ]), - analysisOptions); + analysisOptions, + packages: Packages.empty); scheduler.start(); } diff --git a/pkg/analyzer/test/src/dart/resolution/language_version_test.dart b/pkg/analyzer/test/src/dart/resolution/language_version_test.dart index 88732aa2bd0..5e42d74be6c 100644 --- a/pkg/analyzer/test/src/dart/resolution/language_version_test.dart +++ b/pkg/analyzer/test/src/dart/resolution/language_version_test.dart @@ -2,6 +2,7 @@ // 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:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/experiments.dart'; import 'package:analyzer/src/generated/engine.dart'; import 'package:test_reflective_loader/test_reflective_loader.dart'; @@ -42,7 +43,12 @@ class DefaultNonNullableTest extends DriverResolutionTest { ] } '''); - driver.configure(); + driver.configure( + packages: findPackagesFrom( + resourceProvider, + getFolder('/test'), + ), + ); newFile('/aaa/lib/a.dart', content: r''' int a = 0; @@ -80,7 +86,12 @@ var z = PI; ] } '''); - driver.configure(); + driver.configure( + packages: findPackagesFrom( + resourceProvider, + getFolder('/test'), + ), + ); newFile('/aaa/lib/a.dart', content: r''' int a = 0; diff --git a/pkg/analyzer/test/src/task/strong/strong_test_helper.dart b/pkg/analyzer/test/src/task/strong/strong_test_helper.dart index 0e6fd9b2f61..5936f6bee26 100644 --- a/pkg/analyzer/test/src/task/strong/strong_test_helper.dart +++ b/pkg/analyzer/test/src/task/strong/strong_test_helper.dart @@ -13,6 +13,7 @@ import 'package:analyzer/dart/element/element.dart'; import 'package:analyzer/error/error.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/source/error_processor.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/driver.dart'; import 'package:analyzer/src/dart/analysis/file_state.dart'; @@ -303,7 +304,8 @@ class AbstractStrongTest with ResourceProviderMixin { fileContentOverlay, null, sourceFactory, - analysisOptions); + analysisOptions, + packages: Packages.empty); scheduler.start(); mainUnit = (await _driver.getResult(mainFile.path)).unit; diff --git a/pkg/analyzer/test/util/id_testing_helper.dart b/pkg/analyzer/test/util/id_testing_helper.dart index 5081ede9fa5..babb02e8a2a 100644 --- a/pkg/analyzer/test/util/id_testing_helper.dart +++ b/pkg/analyzer/test/util/id_testing_helper.dart @@ -16,6 +16,7 @@ import 'package:analyzer/diagnostic/diagnostic.dart'; import 'package:analyzer/error/error.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/file_system/memory_file_system.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/driver.dart'; import 'package:analyzer/src/dart/analysis/file_state.dart'; @@ -146,6 +147,7 @@ Future> runTestForConfig( ResourceUriResolver(resourceProvider) ]), analysisOptions, + packages: Packages.empty, retainDataForTesting: true); scheduler.start(); var result = await driver diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart index 48d9d71f1aa..6ad947b2709 100644 --- a/pkg/analyzer_cli/lib/src/build_mode.dart +++ b/pkg/analyzer_cli/lib/src/build_mode.dart @@ -12,6 +12,7 @@ import 'package:analyzer/dart/ast/ast.dart'; import 'package:analyzer/error/error.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/src/context/context.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/byte_store.dart'; import 'package:analyzer/src/dart/analysis/cache.dart'; import 'package:analyzer/src/dart/analysis/driver.dart'; @@ -422,6 +423,8 @@ class BuildMode with HasContextMixin { summaryDataStore.addBundle(null, sdkBundle); }); + var packages = _findPackages(rootPath); + sourceFactory = SourceFactory([ DartUriResolver(sdk), TrackingInSummaryUriResolver( @@ -435,15 +438,17 @@ class BuildMode with HasContextMixin { AnalysisDriverScheduler scheduler = AnalysisDriverScheduler(logger); analysisDriver = AnalysisDriver( - scheduler, - logger, - resourceProvider, - MemoryByteStore(), - FileContentOverlay(), - null, - sourceFactory, - analysisOptions, - externalSummaries: summaryDataStore); + scheduler, + logger, + resourceProvider, + MemoryByteStore(), + FileContentOverlay(), + null, + sourceFactory, + analysisOptions, + externalSummaries: summaryDataStore, + packages: packages, + ); declaredVariables = DeclaredVariables.fromMap(options.definedVariables); analysisDriver.declaredVariables = declaredVariables; @@ -494,6 +499,14 @@ class BuildMode with HasContextMixin { return uriToFileMap; } + Packages _findPackages(String path) { + if (path != null) { + return findPackagesFrom(resourceProvider, resourceProvider.getFile(path)); + } else { + return Packages.empty; + } + } + /// Ensure that the parsed unit for [absoluteUri] is available. /// /// If the unit is in the input [summaryDataStore], do nothing. diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart index e92cb2c3535..9bbde0aecc2 100644 --- a/pkg/analyzer_cli/lib/src/driver.dart +++ b/pkg/analyzer_cli/lib/src/driver.dart @@ -581,7 +581,8 @@ class Driver with HasContextMixin implements CommandLineStarter { FileContentOverlay(), ContextRoot(source, [], pathContext: resourceProvider.pathContext), sourceFactory, - analysisOptions); + analysisOptions, + packages: packageInfo.packages); analysisDriver.results.listen((_) {}); analysisDriver.exceptions.listen((_) {}); scheduler.start(); diff --git a/pkg/analyzer_plugin/test/plugin/mocks.dart b/pkg/analyzer_plugin/test/plugin/mocks.dart index ee54ad368e7..93409ded3d7 100644 --- a/pkg/analyzer_plugin/test/plugin/mocks.dart +++ b/pkg/analyzer_plugin/test/plugin/mocks.dart @@ -8,6 +8,7 @@ import 'dart:collection'; import 'package:analyzer/dart/analysis/results.dart'; import 'package:analyzer/error/error.dart'; import 'package:analyzer/file_system/file_system.dart'; +import 'package:analyzer/src/context/packages.dart'; import 'package:analyzer/src/dart/analysis/driver.dart'; import 'package:analyzer/src/dart/analysis/file_state.dart'; import 'package:analyzer/src/generated/engine.dart' @@ -34,7 +35,8 @@ class MockAnalysisDriver extends AnalysisDriver { FileContentOverlay(), null, SourceFactory([]), - AnalysisOptionsImpl()); + AnalysisOptionsImpl(), + packages: Packages.empty); @override bool get hasFilesToAnalyze => false;