Revert "Remove DartSdk.useSummary."

This reverts commit a2c3ecabce.

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 <brianwilkerson@google.com>
> Commit-Queue: Konstantin Shcheglov <scheglov@google.com>

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 <paulberry@google.com>
Reviewed-by: Konstantin Shcheglov <scheglov@google.com>
Commit-Queue: Paul Berry <paulberry@google.com>
This commit is contained in:
Paul Berry
2020-06-02 15:20:32 +00:00
committed by commit-bot@chromium.org
parent 3cef87a516
commit 930cae0f13
27 changed files with 156 additions and 38 deletions
@@ -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.
@@ -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('</div>');
@@ -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);
}
@@ -84,7 +84,7 @@ class AnalysisServerTest with ResourceProviderMixin {
channel,
resourceProvider,
AnalysisServerOptions(),
DartSdkManager(convertPath('/sdk')),
DartSdkManager(convertPath('/sdk'), false),
CrashReportingAttachmentsBuilder.empty,
InstrumentationService.NULL_SERVICE);
}
@@ -111,7 +111,7 @@ abstract class AbstractClient {
serverChannel,
resourceProvider,
serverOptions,
DartSdkManager(sdkPath),
DartSdkManager(sdkPath, true),
CrashReportingAttachmentsBuilder.empty,
InstrumentationService.NULL_SERVICE);
}
@@ -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,
@@ -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);
@@ -31,7 +31,7 @@ void main() {
MockServerChannel(),
provider,
AnalysisServerOptions(),
DartSdkManager(''),
DartSdkManager('', false),
CrashReportingAttachmentsBuilder.empty,
InstrumentationService.NULL_SERVICE);
handler = ExecutionDomainHandler(server);
@@ -29,7 +29,7 @@ void main() {
serverChannel,
resourceProvider,
AnalysisServerOptions(),
DartSdkManager(''),
DartSdkManager('', false),
CrashReportingAttachmentsBuilder.empty,
InstrumentationService.NULL_SERVICE);
handler = ServerDomainHandler(server);
@@ -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;
@@ -105,7 +105,7 @@ class SocketServerTest {
final errorNotifier = ErrorNotifier();
final server = SocketServer(
AnalysisServerOptions(),
DartSdkManager(''),
DartSdkManager('', false),
CrashReportingAttachmentsBuilder.empty,
errorNotifier,
null,
@@ -77,7 +77,7 @@ class MigrationBase {
serverChannel,
resourceProvider,
options,
DartSdkManager(sdkPath),
DartSdkManager(sdkPath, true),
CrashReportingAttachmentsBuilder.empty,
InstrumentationService.NULL_SERVICE);
}
@@ -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);
}
/**
@@ -250,6 +250,7 @@ class ContextBuilder {
resourceProvider.getFolder(sdkPath),
);
sdk.analysisOptions = analysisOptions;
sdk.useSummary = sdkManager.canUseSummaries;
return sdk;
});
}
@@ -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);
@@ -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 =
+22
View File
@@ -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<String> 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
+7 -1
View File
@@ -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
@@ -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<String> 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
@@ -31,6 +31,7 @@ List<int> buildSdkSummary({
//
FolderBasedDartSdk sdk =
FolderBasedDartSdk(resourceProvider, resourceProvider.getFolder(sdkPath));
sdk.useSummary = false;
sdk.analysisOptions = AnalysisOptionsImpl();
//
+3 -3
View File
@@ -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(<String>['/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(<String>['/c/d'], options);
DartSdk sdk = MockSdk(resourceProvider: resourceProvider);
@@ -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<String> 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<String> 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<String> 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<String> 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() {
@@ -86,14 +86,14 @@ const Map<String, LibraryInfo> 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,
@@ -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,
+9 -2
View File
@@ -552,7 +552,7 @@ class Driver with HasContextMixin implements CommandLineStarter {
useSummaries ? options.buildSummaryInputs : <String>[]);
// 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;
}
+1
View File
@@ -53,6 +53,7 @@ void main() {
var sdk = driver.sdk;
expect(sdk, const TypeMatcher<FolderBasedDartSdk>());
expect((sdk as FolderBasedDartSdk).useSummary, isFalse);
}));
});
}
+1 -1
View File
@@ -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);