From 930cae0f1322d00f0acb4f512b479186cc094434 Mon Sep 17 00:00:00 2001 From: Paul Berry Date: Tue, 2 Jun 2020 15:20:32 +0000 Subject: [PATCH] Revert "Remove DartSdk.useSummary." MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This reverts commit a2c3ecabce0f00c854222382934522c500d91144. Reason for revert: Breaking change to de facto API Original change's description: > Remove DartSdk.useSummary. > > R=​brianwilkerson@google.com > > Change-Id: Ifa851f4af47a973d65c528c6d07fcac0a515134b > Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149495 > Reviewed-by: Brian Wilkerson > Commit-Queue: Konstantin Shcheglov TBR=scheglov@google.com,brianwilkerson@google.com # Not skipping CQ checks because original CL landed > 1 day ago. Change-Id: I9998bedb74ea940371f18ac7dce42b2f5dcc3b98 Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/149687 Reviewed-by: Paul Berry Reviewed-by: Konstantin Shcheglov Commit-Queue: Paul Berry --- .../lib/src/server/driver.dart | 14 +++---- .../lib/src/status/diagnostics.dart | 4 ++ .../test/analysis_abstract.dart | 2 +- .../test/analysis_server_test.dart | 2 +- .../test/client/impl/abstract_client.dart | 2 +- .../test/context_manager_test.dart | 7 ++-- .../test/domain_analysis_test.dart | 2 +- .../test/domain_execution_test.dart | 2 +- .../test/domain_server_test.dart | 2 +- .../test/lsp/server_abstract.dart | 2 +- .../test/socket_server_test.dart | 2 +- .../tool/migration_runner.dart | 2 +- .../lib/src/command_line/arguments.dart | 16 ++++++-- pkg/analyzer/lib/src/context/builder.dart | 1 + .../src/dart/analysis/context_builder.dart | 2 +- .../src/dart/analysis/context_locator.dart | 3 +- pkg/analyzer/lib/src/dart/sdk/sdk.dart | 22 +++++++++++ pkg/analyzer/lib/src/generated/sdk.dart | 8 +++- pkg/analyzer/lib/src/generated/sdk_io.dart | 22 +++++++++++ .../lib/src/summary/summary_file_builder.dart | 1 + pkg/analyzer/test/generated/sdk_test.dart | 6 +-- .../test/src/command_line/arguments_test.dart | 38 +++++++++++++++++-- .../test/src/context/builder_test.dart | 4 +- pkg/analyzer/test/src/dart/sdk/sdk_test.dart | 14 +++++++ pkg/analyzer_cli/lib/src/driver.dart | 11 +++++- pkg/analyzer_cli/test/embedder_test.dart | 1 + pkg/analyzer_plugin/lib/plugin/plugin.dart | 2 +- 27 files changed, 156 insertions(+), 38 deletions(-) diff --git a/pkg/analysis_server/lib/src/server/driver.dart b/pkg/analysis_server/lib/src/server/driver.dart index cc0f4066590..5d9a1f8b0a7 100644 --- a/pkg/analysis_server/lib/src/server/driver.dart +++ b/pkg/analysis_server/lib/src/server/driver.dart @@ -437,12 +437,12 @@ class Driver implements ServerStarter { } final defaultSdkPath = _getSdkPath(results); - final dartSdkManager = DartSdkManager(defaultSdkPath); + final dartSdkManager = DartSdkManager(defaultSdkPath, true); // TODO(brianwilkerson) It would be nice to avoid creating an SDK that // cannot be re-used, but the SDK is needed to create a package map provider // in the case where we need to run `pub` in order to get the package map. - var defaultSdk = _createDefaultSdk(defaultSdkPath); + var defaultSdk = _createDefaultSdk(defaultSdkPath, true); // // Initialize the instrumentation service. // @@ -825,12 +825,12 @@ class Driver implements ServerStarter { return parser; } - DartSdk _createDefaultSdk(String defaultSdkPath) { + DartSdk _createDefaultSdk(String defaultSdkPath, bool useSummaries) { var resourceProvider = PhysicalResourceProvider.INSTANCE; - return FolderBasedDartSdk( - resourceProvider, - resourceProvider.getFolder(defaultSdkPath), - ); + var sdk = FolderBasedDartSdk( + resourceProvider, resourceProvider.getFolder(defaultSdkPath)); + sdk.useSummary = useSummaries; + return sdk; } /// Constructs a uuid combining the current date and a random integer. diff --git a/pkg/analysis_server/lib/src/status/diagnostics.dart b/pkg/analysis_server/lib/src/status/diagnostics.dart index 24f843de60a..e0c20bb71c4 100644 --- a/pkg/analysis_server/lib/src/status/diagnostics.dart +++ b/pkg/analysis_server/lib/src/status/diagnostics.dart @@ -516,6 +516,10 @@ class ContextsPage extends DiagnosticPageWithNav { if (sdkOptions != null) { h3('SDK analysis options'); p(describe(sdkOptions), raw: true); + + if (sdk is FolderBasedDartSdk) { + p(writeOption('Use summaries', sdk.useSummary), raw: true); + } } buf.writeln(''); diff --git a/pkg/analysis_server/test/analysis_abstract.dart b/pkg/analysis_server/test/analysis_abstract.dart index 6603372299f..f740aa1cf5c 100644 --- a/pkg/analysis_server/test/analysis_abstract.dart +++ b/pkg/analysis_server/test/analysis_abstract.dart @@ -121,7 +121,7 @@ class AbstractAnalysisTest with ResourceProviderMixin { serverChannel, resourceProvider, options, - DartSdkManager(resourceProvider.convertPath('/sdk')), + DartSdkManager(resourceProvider.convertPath('/sdk'), true), CrashReportingAttachmentsBuilder.empty, InstrumentationService.NULL_SERVICE); } diff --git a/pkg/analysis_server/test/analysis_server_test.dart b/pkg/analysis_server/test/analysis_server_test.dart index e0bd3d6c9c9..64a0fae00cd 100644 --- a/pkg/analysis_server/test/analysis_server_test.dart +++ b/pkg/analysis_server/test/analysis_server_test.dart @@ -84,7 +84,7 @@ class AnalysisServerTest with ResourceProviderMixin { channel, resourceProvider, AnalysisServerOptions(), - DartSdkManager(convertPath('/sdk')), + DartSdkManager(convertPath('/sdk'), false), CrashReportingAttachmentsBuilder.empty, InstrumentationService.NULL_SERVICE); } diff --git a/pkg/analysis_server/test/client/impl/abstract_client.dart b/pkg/analysis_server/test/client/impl/abstract_client.dart index f5ea24285c8..0c82e50e29d 100644 --- a/pkg/analysis_server/test/client/impl/abstract_client.dart +++ b/pkg/analysis_server/test/client/impl/abstract_client.dart @@ -111,7 +111,7 @@ abstract class AbstractClient { serverChannel, resourceProvider, serverOptions, - DartSdkManager(sdkPath), + DartSdkManager(sdkPath, true), CrashReportingAttachmentsBuilder.empty, InstrumentationService.NULL_SERVICE); } diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart index 51e813fffdf..b8e4a999b66 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('/sdk'), true); manager = ContextManagerImpl( resourceProvider, sdkManager, @@ -2290,7 +2290,7 @@ class TestContextManagerCallbacks extends ContextManagerCallbacks { expect(contextRoot.root, path); currentContextTimestamps[path] = now; - var builder = createContextBuilder(folder, options); + var builder = createContextBuilder(folder, options, useSummaries: true); builder.analysisDriverScheduler = scheduler; builder.byteStore = MemoryByteStore(); builder.performanceLog = logger; @@ -2347,7 +2347,8 @@ class TestContextManagerCallbacks extends ContextManagerCallbacks { } @override - ContextBuilder createContextBuilder(Folder folder, AnalysisOptions options) { + ContextBuilder createContextBuilder(Folder folder, AnalysisOptions options, + {bool useSummaries = false}) { var builderOptions = ContextBuilderOptions(); builderOptions.defaultOptions = options; var builder = ContextBuilder(resourceProvider, sdkManager, null, diff --git a/pkg/analysis_server/test/domain_analysis_test.dart b/pkg/analysis_server/test/domain_analysis_test.dart index 45b57b37669..0d9c790cda1 100644 --- a/pkg/analysis_server/test/domain_analysis_test.dart +++ b/pkg/analysis_server/test/domain_analysis_test.dart @@ -363,7 +363,7 @@ class AnalysisTestHelper with ResourceProviderMixin { serverChannel, resourceProvider, AnalysisServerOptions(), - DartSdkManager(convertPath('/sdk')), + DartSdkManager(convertPath('/sdk'), false), CrashReportingAttachmentsBuilder.empty, InstrumentationService.NULL_SERVICE); handler = AnalysisDomainHandler(server); diff --git a/pkg/analysis_server/test/domain_execution_test.dart b/pkg/analysis_server/test/domain_execution_test.dart index 72b7b5b8cd3..8532220e3a6 100644 --- a/pkg/analysis_server/test/domain_execution_test.dart +++ b/pkg/analysis_server/test/domain_execution_test.dart @@ -31,7 +31,7 @@ void main() { MockServerChannel(), provider, AnalysisServerOptions(), - DartSdkManager(''), + DartSdkManager('', false), CrashReportingAttachmentsBuilder.empty, InstrumentationService.NULL_SERVICE); handler = ExecutionDomainHandler(server); diff --git a/pkg/analysis_server/test/domain_server_test.dart b/pkg/analysis_server/test/domain_server_test.dart index 1ac94ccc496..cb73ed3108a 100644 --- a/pkg/analysis_server/test/domain_server_test.dart +++ b/pkg/analysis_server/test/domain_server_test.dart @@ -29,7 +29,7 @@ void main() { serverChannel, resourceProvider, AnalysisServerOptions(), - DartSdkManager(''), + DartSdkManager('', false), CrashReportingAttachmentsBuilder.empty, InstrumentationService.NULL_SERVICE); handler = ServerDomainHandler(server); diff --git a/pkg/analysis_server/test/lsp/server_abstract.dart b/pkg/analysis_server/test/lsp/server_abstract.dart index 8715e55bee8..3498d9ed74c 100644 --- a/pkg/analysis_server/test/lsp/server_abstract.dart +++ b/pkg/analysis_server/test/lsp/server_abstract.dart @@ -116,7 +116,7 @@ abstract class AbstractLspAnalysisServerTest channel, resourceProvider, AnalysisServerOptions(), - DartSdkManager(convertPath('/sdk')), + DartSdkManager(convertPath('/sdk'), false), CrashReportingAttachmentsBuilder.empty, InstrumentationService.NULL_SERVICE); server.pluginManager = pluginManager; diff --git a/pkg/analysis_server/test/socket_server_test.dart b/pkg/analysis_server/test/socket_server_test.dart index c546b235b5b..260bf0b1d72 100644 --- a/pkg/analysis_server/test/socket_server_test.dart +++ b/pkg/analysis_server/test/socket_server_test.dart @@ -105,7 +105,7 @@ class SocketServerTest { final errorNotifier = ErrorNotifier(); final server = SocketServer( AnalysisServerOptions(), - DartSdkManager(''), + DartSdkManager('', false), CrashReportingAttachmentsBuilder.empty, errorNotifier, null, diff --git a/pkg/analysis_server/tool/migration_runner.dart b/pkg/analysis_server/tool/migration_runner.dart index 8b989cd4e00..851885c227b 100644 --- a/pkg/analysis_server/tool/migration_runner.dart +++ b/pkg/analysis_server/tool/migration_runner.dart @@ -77,7 +77,7 @@ class MigrationBase { serverChannel, resourceProvider, options, - DartSdkManager(sdkPath), + DartSdkManager(sdkPath, true), CrashReportingAttachmentsBuilder.empty, InstrumentationService.NULL_SERVICE); } diff --git a/pkg/analyzer/lib/src/command_line/arguments.dart b/pkg/analyzer/lib/src/command_line/arguments.dart index d94ec038c54..006e5f377d5 100644 --- a/pkg/analyzer/lib/src/command_line/arguments.dart +++ b/pkg/analyzer/lib/src/command_line/arguments.dart @@ -10,6 +10,7 @@ import 'package:analyzer/src/dart/sdk/sdk.dart'; import 'package:analyzer/src/generated/engine.dart'; import 'package:analyzer/src/generated/sdk.dart'; import 'package:args/args.dart'; +import 'package:path/path.dart'; const String analysisOptionsFileOption = 'options'; const String defineVariableOption = 'D'; @@ -102,15 +103,22 @@ ContextBuilderOptions createContextBuilderOptions(ArgResults args) { /** * Use the given [resourceProvider] and command-line [args] to create a Dart SDK - * manager. + * manager. The manager will use summary information if [useSummaries] is `true` + * and if the summary information exists. */ DartSdkManager createDartSdkManager( - ResourceProvider resourceProvider, ArgResults args) { + ResourceProvider resourceProvider, bool useSummaries, ArgResults args) { String sdkPath = args[sdkPathOption]; + bool canUseSummaries = useSummaries && + args.rest.every((String sourcePath) { + sourcePath = context.absolute(sourcePath); + sourcePath = context.normalize(sourcePath); + return !context.isWithin(sdkPath, sourcePath); + }); return DartSdkManager( - sdkPath ?? FolderBasedDartSdk.defaultSdkDirectory(resourceProvider)?.path, - ); + sdkPath ?? FolderBasedDartSdk.defaultSdkDirectory(resourceProvider)?.path, + canUseSummaries); } /** diff --git a/pkg/analyzer/lib/src/context/builder.dart b/pkg/analyzer/lib/src/context/builder.dart index 0bdeeb3a2e4..711a93071d1 100644 --- a/pkg/analyzer/lib/src/context/builder.dart +++ b/pkg/analyzer/lib/src/context/builder.dart @@ -250,6 +250,7 @@ class ContextBuilder { resourceProvider.getFolder(sdkPath), ); sdk.analysisOptions = analysisOptions; + sdk.useSummary = sdkManager.canUseSummaries; return sdk; }); } diff --git a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart index 5d272f663e8..ee087db2a93 100644 --- a/pkg/analyzer/lib/src/dart/analysis/context_builder.dart +++ b/pkg/analyzer/lib/src/dart/analysis/context_builder.dart @@ -68,7 +68,7 @@ class ContextBuilderImpl implements ContextBuilder { if (sdkPath == null) { throw ArgumentError('Cannot find path to the SDK'); } - DartSdkManager sdkManager = DartSdkManager(sdkPath); + DartSdkManager sdkManager = DartSdkManager(sdkPath, true); if (scheduler == null) { scheduler = AnalysisDriverScheduler(performanceLog); diff --git a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart index 73ca508284b..7bfa83fcdc3 100644 --- a/pkg/analyzer/lib/src/dart/analysis/context_locator.dart +++ b/pkg/analyzer/lib/src/dart/analysis/context_locator.dart @@ -84,7 +84,8 @@ class ContextLocatorImpl implements ContextLocator { } PerformanceLog performanceLog = PerformanceLog(StringBuffer()); AnalysisDriverScheduler scheduler = AnalysisDriverScheduler(performanceLog); - DartSdkManager sdkManager = DartSdkManager(sdkPath ?? _defaultSdkPath); + DartSdkManager sdkManager = + DartSdkManager(sdkPath ?? _defaultSdkPath, true); scheduler.start(); ContextBuilderOptions options = ContextBuilderOptions(); ContextBuilder builder = diff --git a/pkg/analyzer/lib/src/dart/sdk/sdk.dart b/pkg/analyzer/lib/src/dart/sdk/sdk.dart index 44cd25ea4cf..f72c2a9df4e 100644 --- a/pkg/analyzer/lib/src/dart/sdk/sdk.dart +++ b/pkg/analyzer/lib/src/dart/sdk/sdk.dart @@ -39,6 +39,12 @@ abstract class AbstractDartSdk implements DartSdk { */ AnalysisOptions _analysisOptions; + /** + * The flag that specifies whether an SDK summary should be used. This is a + * temporary flag until summaries are enabled by default. + */ + bool _useSummary = false; + /** * The [AnalysisContext] which is used for all of the sources in this SDK. */ @@ -86,6 +92,22 @@ abstract class AbstractDartSdk implements DartSdk { @override List get uris => libraryMap.uris; + /** + * Return `true` if the SDK summary will be used when available. + */ + bool get useSummary => _useSummary; + + /** + * Specify whether SDK summary should be used. + */ + set useSummary(bool use) { + if (_analysisContext != null) { + throw StateError( + 'The "useSummary" flag cannot be changed after context creation.'); + } + _useSummary = use; + } + /** * Add the extensions from one or more sdk extension files to this sdk. The * [extensions] should be a table mapping the names of extensions to the paths diff --git a/pkg/analyzer/lib/src/generated/sdk.dart b/pkg/analyzer/lib/src/generated/sdk.dart index 7c6eef34dac..0aaabceab01 100644 --- a/pkg/analyzer/lib/src/generated/sdk.dart +++ b/pkg/analyzer/lib/src/generated/sdk.dart @@ -97,6 +97,12 @@ class DartSdkManager { */ final String defaultSdkDirectory; + /** + * A flag indicating whether it is acceptable to use summaries when they are + * available. + */ + final bool canUseSummaries; + /** * A table mapping (an encoding of) analysis options and SDK locations to the * DartSdk from that location that has been configured with those options. @@ -106,7 +112,7 @@ class DartSdkManager { /** * Initialize a newly created manager. */ - DartSdkManager(this.defaultSdkDirectory); + DartSdkManager(this.defaultSdkDirectory, this.canUseSummaries); /** * Return any SDK that has been created, or `null` if no SDKs have been diff --git a/pkg/analyzer/lib/src/generated/sdk_io.dart b/pkg/analyzer/lib/src/generated/sdk_io.dart index 36fe8e44b75..a2e058c1830 100644 --- a/pkg/analyzer/lib/src/generated/sdk_io.dart +++ b/pkg/analyzer/lib/src/generated/sdk_io.dart @@ -32,6 +32,12 @@ abstract class AbstractDartSdk implements DartSdk { */ AnalysisOptions _analysisOptions; + /** + * The flag that specifies whether an SDK summary should be used. This is a + * temporary flag until summaries are enabled by default. + */ + bool _useSummary = false; + /** * The [AnalysisContext] which is used for all of the sources in this SDK. */ @@ -67,6 +73,22 @@ abstract class AbstractDartSdk implements DartSdk { @override List get uris => libraryMap.uris; + /** + * Return `true` if the SDK summary will be used when available. + */ + bool get useSummary => _useSummary; + + /** + * Specify whether SDK summary should be used. + */ + set useSummary(bool use) { + if (_analysisContext != null) { + throw StateError( + 'The "useSummary" flag cannot be changed after context creation.'); + } + _useSummary = use; + } + /** * Add the extensions from one or more sdk extension files to this sdk. The * [extensions] should be a table mapping the names of extensions to the paths diff --git a/pkg/analyzer/lib/src/summary/summary_file_builder.dart b/pkg/analyzer/lib/src/summary/summary_file_builder.dart index 6c28f4b8216..d0e934eef87 100644 --- a/pkg/analyzer/lib/src/summary/summary_file_builder.dart +++ b/pkg/analyzer/lib/src/summary/summary_file_builder.dart @@ -31,6 +31,7 @@ List buildSdkSummary({ // FolderBasedDartSdk sdk = FolderBasedDartSdk(resourceProvider, resourceProvider.getFolder(sdkPath)); + sdk.useSummary = false; sdk.analysisOptions = AnalysisOptionsImpl(); // diff --git a/pkg/analyzer/test/generated/sdk_test.dart b/pkg/analyzer/test/generated/sdk_test.dart index 1fd9a49d540..30cbb5470b1 100644 --- a/pkg/analyzer/test/generated/sdk_test.dart +++ b/pkg/analyzer/test/generated/sdk_test.dart @@ -19,7 +19,7 @@ main() { @reflectiveTest class DartSdkManagerTest with ResourceProviderMixin { void test_anySdk() { - DartSdkManager manager = DartSdkManager('/a/b/c'); + DartSdkManager manager = DartSdkManager('/a/b/c', false); expect(manager.anySdk, isNull); AnalysisOptions options = AnalysisOptionsImpl(); @@ -30,7 +30,7 @@ class DartSdkManagerTest with ResourceProviderMixin { } void test_getSdk_differentDescriptors() { - DartSdkManager manager = DartSdkManager('/a/b/c'); + DartSdkManager manager = DartSdkManager('/a/b/c', false); AnalysisOptions options = AnalysisOptionsImpl(); SdkDescription description1 = SdkDescription(['/c/d'], options); DartSdk sdk1 = MockSdk(resourceProvider: resourceProvider); @@ -46,7 +46,7 @@ class DartSdkManagerTest with ResourceProviderMixin { } void test_getSdk_sameDescriptor() { - DartSdkManager manager = DartSdkManager('/a/b/c'); + DartSdkManager manager = DartSdkManager('/a/b/c', false); AnalysisOptions options = AnalysisOptionsImpl(); SdkDescription description = SdkDescription(['/c/d'], options); DartSdk sdk = MockSdk(resourceProvider: resourceProvider); diff --git a/pkg/analyzer/test/src/command_line/arguments_test.dart b/pkg/analyzer/test/src/command_line/arguments_test.dart index 38ccc7c9afd..362cc48a946 100644 --- a/pkg/analyzer/test/src/command_line/arguments_test.dart +++ b/pkg/analyzer/test/src/command_line/arguments_test.dart @@ -71,25 +71,55 @@ class ArgumentsTest with ResourceProviderMixin { expect(defaultOptions.implicitDynamic, true); } - void test_createDartSdkManager_noPath() { + void test_createDartSdkManager_noPath_noSummaries() { ArgParser parser = ArgParser(); defineAnalysisArguments(parser); List args = []; ArgResults result = parse(resourceProvider, parser, args); - DartSdkManager manager = createDartSdkManager(resourceProvider, result); + DartSdkManager manager = + createDartSdkManager(resourceProvider, false, result); expect(manager, isNotNull); expect(manager.defaultSdkDirectory, FolderBasedDartSdk.defaultSdkDirectory(resourceProvider)?.path); + expect(manager.canUseSummaries, false); } - void test_createDartSdkManager_path() { + void test_createDartSdkManager_noPath_summaries() { + ArgParser parser = ArgParser(); + defineAnalysisArguments(parser); + List args = []; + ArgResults result = parse(resourceProvider, parser, args); + DartSdkManager manager = + createDartSdkManager(resourceProvider, true, result); + expect(manager, isNotNull); + + expect(manager.defaultSdkDirectory, + FolderBasedDartSdk.defaultSdkDirectory(resourceProvider)?.path); + expect(manager.canUseSummaries, true); + } + + void test_createDartSdkManager_path_noSummaries() { ArgParser parser = ArgParser(); defineAnalysisArguments(parser); List args = ['--dart-sdk=x']; ArgResults result = parse(resourceProvider, parser, args); - DartSdkManager manager = createDartSdkManager(resourceProvider, result); + DartSdkManager manager = + createDartSdkManager(resourceProvider, false, result); expect(manager, isNotNull); expect(manager.defaultSdkDirectory, 'x'); + expect(manager.canUseSummaries, false); + } + + void test_createDartSdkManager_path_summaries() { + ArgParser parser = ArgParser(); + defineAnalysisArguments(parser); + List args = ['--dart-sdk=y']; + ArgResults result = parse(resourceProvider, parser, args); + DartSdkManager manager = + createDartSdkManager(resourceProvider, true, result); + expect(manager, isNotNull); + expect(manager.defaultSdkDirectory, 'y'); + expect(manager.canUseSummaries, true); } void test_defineAnalysisArguments() { diff --git a/pkg/analyzer/test/src/context/builder_test.dart b/pkg/analyzer/test/src/context/builder_test.dart index 46e808c8f21..227862f757f 100644 --- a/pkg/analyzer/test/src/context/builder_test.dart +++ b/pkg/analyzer/test/src/context/builder_test.dart @@ -86,14 +86,14 @@ const Map libraries = const { "core": const LibraryInfo("core/core.dart"), }; '''); - sdkManager = DartSdkManager(defaultSdkPath); + sdkManager = DartSdkManager(defaultSdkPath, false); builder = ContextBuilder(resourceProvider, sdkManager, contentCache, options: builderOptions); } void setUp() { MockSdk(resourceProvider: resourceProvider); - sdkManager = DartSdkManager(convertPath('/sdk')); + sdkManager = DartSdkManager(convertPath('/sdk'), false); contentCache = ContentCache(); builder = ContextBuilder( resourceProvider, diff --git a/pkg/analyzer/test/src/dart/sdk/sdk_test.dart b/pkg/analyzer/test/src/dart/sdk/sdk_test.dart index 97cc5bfaed1..50066f48e4a 100644 --- a/pkg/analyzer/test/src/dart/sdk/sdk_test.dart +++ b/pkg/analyzer/test/src/dart/sdk/sdk_test.dart @@ -216,6 +216,20 @@ class FolderBasedDartSdkTest with ResourceProviderMixin { expect(partSource, normalSource); } + void test_useSummary_afterContextCreation() { + FolderBasedDartSdk sdk = _createDartSdk(); + sdk.context; + expect(() { + sdk.useSummary = true; + }, throwsStateError); + } + + void test_useSummary_beforeContextCreation() { + FolderBasedDartSdk sdk = _createDartSdk(); + sdk.useSummary = true; + sdk.context; + } + FolderBasedDartSdk _createDartSdk() { Folder sdkDirectory = getFolder('/sdk'); _createFile(sdkDirectory, diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart index ade7730ee9f..1b75a7a0dec 100644 --- a/pkg/analyzer_cli/lib/src/driver.dart +++ b/pkg/analyzer_cli/lib/src/driver.dart @@ -552,7 +552,7 @@ class Driver with HasContextMixin implements CommandLineStarter { useSummaries ? options.buildSummaryInputs : []); // Once options and embedders are processed, setup the SDK. - _setupSdk(options, analysisOptions); + _setupSdk(options, useSummaries, analysisOptions); // Choose a package resolution policy and a diet parsing policy based on // the command-line options. @@ -627,7 +627,8 @@ class Driver with HasContextMixin implements CommandLineStarter { return analyzer.analyze(formatter); } - void _setupSdk(CommandLineOptions options, AnalysisOptions analysisOptions) { + void _setupSdk(CommandLineOptions options, bool useSummaries, + AnalysisOptions analysisOptions) { if (sdk == null) { if (options.dartSdkSummaryPath != null) { sdk = SummaryBasedDartSdk(options.dartSdkSummaryPath, true); @@ -635,6 +636,12 @@ class Driver with HasContextMixin implements CommandLineStarter { var dartSdkPath = options.dartSdkPath; var dartSdk = FolderBasedDartSdk( resourceProvider, resourceProvider.getFolder(dartSdkPath)); + dartSdk.useSummary = useSummaries && + options.sourceFiles.every((String sourcePath) { + sourcePath = path.absolute(sourcePath); + sourcePath = path.normalize(sourcePath); + return !path.isWithin(dartSdkPath, sourcePath); + }); dartSdk.analysisOptions = analysisOptions; sdk = dartSdk; } diff --git a/pkg/analyzer_cli/test/embedder_test.dart b/pkg/analyzer_cli/test/embedder_test.dart index 120af724eeb..c855d21dcd8 100644 --- a/pkg/analyzer_cli/test/embedder_test.dart +++ b/pkg/analyzer_cli/test/embedder_test.dart @@ -53,6 +53,7 @@ void main() { var sdk = driver.sdk; expect(sdk, const TypeMatcher()); + expect((sdk as FolderBasedDartSdk).useSummary, isFalse); })); }); } diff --git a/pkg/analyzer_plugin/lib/plugin/plugin.dart b/pkg/analyzer_plugin/lib/plugin/plugin.dart index 2b38a8e03bd..6147731534a 100644 --- a/pkg/analyzer_plugin/lib/plugin/plugin.dart +++ b/pkg/analyzer_plugin/lib/plugin/plugin.dart @@ -412,7 +412,7 @@ abstract class ServerPlugin { FileByteStore(byteStorePath, tempNameSuffix: DateTime.now().millisecondsSinceEpoch.toString()), 64 * M); - _sdkManager = DartSdkManager(sdkPath); + _sdkManager = DartSdkManager(sdkPath, true); return PluginVersionCheckResult( isCompatibleWith(serverVersion), name, version, fileGlobsToAnalyze, contactInfo: contactInfo);