diff --git a/pkg/analysis_server/test/context_manager_test.dart b/pkg/analysis_server/test/context_manager_test.dart index 3fa52ffbc6b..bf3f07d8757 100644 --- a/pkg/analysis_server/test/context_manager_test.dart +++ b/pkg/analysis_server/test/context_manager_test.dart @@ -7,6 +7,7 @@ import 'dart:async'; import 'package:analysis_server/src/context_manager.dart'; import 'package:analysis_server/src/plugin/notification_manager.dart'; import 'package:analysis_server/src/utilities/null_string_sink.dart'; +import 'package:analyzer/dart/analysis/features.dart'; import 'package:analyzer/error/error.dart'; import 'package:analyzer/exception/exception.dart'; import 'package:analyzer/file_system/file_system.dart'; @@ -1939,7 +1940,7 @@ include: package:boo/other_options.yaml var synchronousSession = SynchronousSession(analysisOptions, null); List bytes = SummaryBuilder([], AnalysisContextImpl(synchronousSession, null)) - .build(); + .build(featureSet: FeatureSet.fromEnableFlags([])); newFileWithBytes('$projPath/sdk.ds', bytes); // Setup _embedder.yaml. newFile('$libPath/_embedder.yaml', content: r''' diff --git a/pkg/analyzer/lib/src/summary/summary_file_builder.dart b/pkg/analyzer/lib/src/summary/summary_file_builder.dart index 539395171f6..0083fedcdc6 100644 --- a/pkg/analyzer/lib/src/summary/summary_file_builder.dart +++ b/pkg/analyzer/lib/src/summary/summary_file_builder.dart @@ -22,6 +22,7 @@ import 'package:analyzer/src/summary/summarize_elements.dart'; import 'package:analyzer/src/summary2/link.dart' as summary2; import 'package:analyzer/src/summary2/linked_element_factory.dart' as summary2; import 'package:analyzer/src/summary2/reference.dart' as summary2; +import 'package:meta/meta.dart'; class SummaryBuilder { final Iterable librarySources; @@ -63,11 +64,16 @@ class SummaryBuilder { /** * Build the linked bundle and return its bytes. */ - List build() => _Builder(context, librarySources).build(); + List build({ + @required FeatureSet featureSet, + }) { + return _Builder(context, featureSet, librarySources).build(); + } } class _Builder { final AnalysisContext context; + final FeatureSet featureSet; final Iterable librarySources; final Set libraryUris = {}; @@ -75,7 +81,7 @@ class _Builder { final PackageBundleAssembler bundleAssembler = PackageBundleAssembler(); - _Builder(this.context, this.librarySources); + _Builder(this.context, this.featureSet, this.librarySources); /** * Build the linked bundle and return its bytes. @@ -132,14 +138,12 @@ class _Builder { AnalysisErrorListener errorListener = AnalysisErrorListener.NULL_LISTENER; String code = source.contents.data; CharSequenceReader reader = CharSequenceReader(code); - // TODO(paulberry): figure out the appropriate featureSet to use here - var featureSet = FeatureSet.fromEnableFlags([]); Scanner scanner = Scanner(source, reader, errorListener) ..configureFeatures(featureSet); Token token = scanner.tokenize(); LineInfo lineInfo = LineInfo(scanner.lineStarts); Parser parser = Parser(source, errorListener, - featureSet: featureSet, + featureSet: scanner.featureSet, useFasta: context.analysisOptions.useFastaParser); parser.enableOptionalNewAndConst = true; CompilationUnit unit = parser.parseCompilationUnit(token); diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart index b3fcd5860de..546b07bf847 100644 --- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart +++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.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/dart/analysis/features.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/file_system/memory_file_system.dart'; import 'package:analyzer/src/context/context.dart'; @@ -1022,7 +1023,10 @@ class MockSdk implements DartSdk { List librarySources = sdkLibraries .map((SdkLibrary library) => mapDartUri(library.shortName)) .toList(); - return SummaryBuilder(librarySources, context).build(); + var featureSet = FeatureSet.fromEnableFlags([]); + return SummaryBuilder(librarySources, context).build( + featureSet: featureSet, + ); } } diff --git a/pkg/analyzer/tool/summary/build_sdk_summaries.dart b/pkg/analyzer/tool/summary/build_sdk_summaries.dart index 8292a9f78a1..7bfc71e1fb0 100644 --- a/pkg/analyzer/tool/summary/build_sdk_summaries.dart +++ b/pkg/analyzer/tool/summary/build_sdk_summaries.dart @@ -1,8 +1,14 @@ +// Copyright (c) 2015, 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 'dart:io'; +import 'package:analyzer/dart/analysis/features.dart'; import 'package:analyzer/file_system/physical_file_system.dart'; import 'package:analyzer/src/dart/sdk/sdk.dart'; import 'package:analyzer/src/summary/summary_file_builder.dart'; +import 'package:meta/meta.dart'; void main(List args) { String command; @@ -36,8 +42,20 @@ void main(List args) { // // Handle commands. // - if (command == 'build-strong') { - _buildSummary(sdkPath, outFilePath); + if (command == 'build-non-nullable') { + _buildSummary( + sdkPath, + outFilePath, + enabledExperiments: ['non-nullable'], + title: 'non-nullable', + ); + } else if (command == 'build-legacy' || command == 'build-strong') { + _buildSummary( + sdkPath, + outFilePath, + enabledExperiments: [], + title: 'legacy', + ); } else { _printUsage(); return; @@ -49,10 +67,18 @@ void main(List args) { */ const BINARY_NAME = "build_sdk_summaries"; -void _buildSummary(String sdkPath, String outPath) { - print('Generating strong mode summary.'); +void _buildSummary( + String sdkPath, + String outPath, { + @required List enabledExperiments, + @required String title, +}) { + print('Generating $title summary.'); Stopwatch sw = Stopwatch()..start(); - List bytes = SummaryBuilder.forSdk(sdkPath).build(); + var featureSet = FeatureSet.fromEnableFlags(enabledExperiments); + List bytes = SummaryBuilder.forSdk(sdkPath).build( + featureSet: featureSet, + ); File(outPath).writeAsBytesSync(bytes, mode: FileMode.writeOnly); print('\tDone in ${sw.elapsedMilliseconds} ms.'); } @@ -63,6 +89,8 @@ void _buildSummary(String sdkPath, String outPath) { void _printUsage() { print('Usage: $BINARY_NAME command arguments'); print('Where command can be one of the following:'); - print(' build-strong output_file [sdk_path]'); - print(' Generate strong mode summary file.'); + print(' build-non-nullable output_file [sdk_path]'); + print(' Generate non-nullable summary file.'); + print(' build-legacy output_file [sdk_path]'); + print(' Generate legacy summary file.'); } diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart index f3dc01d6fa4..e92cb2c3535 100644 --- a/pkg/analyzer_cli/lib/src/driver.dart +++ b/pkg/analyzer_cli/lib/src/driver.dart @@ -6,6 +6,7 @@ import 'dart:async'; import 'dart:io' as io; import 'dart:isolate'; +import 'package:analyzer/dart/analysis/features.dart'; import 'package:analyzer/error/error.dart'; import 'package:analyzer/file_system/file_system.dart'; import 'package:analyzer/file_system/physical_file_system.dart'; @@ -158,9 +159,12 @@ class Driver with HasContextMixin implements CommandLineStarter { print('\nGenerating strong mode summary...'); final Stopwatch stopwatch = Stopwatch()..start(); - SummaryBuilder.forSdk(options.dartSdkPath).build(); - SummaryBuilder.forSdk(options.dartSdkPath).build(); - SummaryBuilder.forSdk(options.dartSdkPath).build(); + for (var i = 0; i < 3; i++) { + var featureSet = FeatureSet.fromEnableFlags([]); + SummaryBuilder.forSdk(options.dartSdkPath).build( + featureSet: featureSet, + ); + } print('Done in ${stopwatch.elapsedMilliseconds} ms.'); } diff --git a/utils/dartanalyzer/BUILD.gn b/utils/dartanalyzer/BUILD.gn index 7665d74821b..35b88d75497 100644 --- a/utils/dartanalyzer/BUILD.gn +++ b/utils/dartanalyzer/BUILD.gn @@ -46,9 +46,17 @@ prebuilt_dart_action("generate_summary_strong") { outputs = [ output, ] - args = [ - "build-strong", - rebase_path(output), - rebase_path("../../sdk"), - ] + if (use_nnbd) { + args = [ + "build-non-nullable", + rebase_path(output), + rebase_path("../../sdk_nnbd"), + ] + } else { + args = [ + "build-legacy", + rebase_path(output), + rebase_path("../../sdk"), + ] + } }