[flutter_tools] null assertions off by default for web (#64186)

Like Android/iOS, only enable --null-assertions if asked. Previously this was enabled by default for web, but in general this has proved to be too breaking to enable by default.

#61042
This commit is contained in:
Jonah Williams 2020-08-19 14:52:47 -07:00 committed by GitHub
parent ae4b3ba2d1
commit 69fd5c50a2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 14 additions and 7 deletions

View File

@ -866,7 +866,8 @@ Future<void> _runWebDebugTest(String target, {
...<String>[
'--enable-experiment',
'non-nullable',
'--no-sound-null-safety'
'--no-sound-null-safety',
'--null-assertions',
],
'-d',
'chrome',

View File

@ -636,6 +636,7 @@ class WebDevFS implements DevFS {
@required this.entrypoint,
@required this.expressionCompiler,
@required this.chromiumLauncher,
@required this.nullAssertions,
this.testMode = false,
});
@ -651,6 +652,7 @@ class WebDevFS implements DevFS {
final bool testMode;
final ExpressionCompiler expressionCompiler;
final ChromiumLauncher chromiumLauncher;
final bool nullAssertions;
WebAssetServer webAssetServer;
@ -791,8 +793,7 @@ class WebDevFS implements DevFS {
'main_module.bootstrap.js',
generateMainModule(
entrypoint: entrypoint,
nullSafety: buildInfo.extraFrontEndOptions
?.contains('--enable-experiment=non-nullable') ?? false,
nullAssertions: nullAssertions,
),
);
// TODO(jonahwilliams): refactor the asset code in this and the regular devfs to

View File

@ -469,6 +469,7 @@ class _ResidentWebRunner extends ResidentWebRunner {
entrypoint: globals.fs.file(target).uri,
expressionCompiler: expressionCompiler,
chromiumLauncher: _chromiumLauncher,
nullAssertions: debuggingOptions.nullAssertions,
);
final Uri url = await device.devFS.create();
if (debuggingOptions.buildInfo.isDebug) {

View File

@ -50,14 +50,14 @@ document.head.appendChild(requireEl);
/// this object is the module.
String generateMainModule({
@required String entrypoint,
@required bool nullSafety,
@required bool nullAssertions,
}) {
return '''/* ENTRYPOINT_EXTENTION_MARKER */
// Create the main module loaded below.
define("main_module.bootstrap", ["$entrypoint", "dart_sdk"], function(app, dart_sdk) {
dart_sdk.dart.setStartAsyncSynchronously(true);
dart_sdk._debugger.registerDevtoolsFormatter();
if ($nullSafety) {
if ($nullAssertions) {
dart_sdk.dart.nonNullAsserts(true);
}

View File

@ -23,7 +23,7 @@ void main() {
test('generateMainModule embeds urls correctly', () {
final String result = generateMainModule(
entrypoint: 'foo/bar/main.js',
nullSafety: false,
nullAssertions: false,
);
// bootstrap main module has correct defined module.
expect(result, contains('define("main_module.bootstrap", ["foo/bar/main.js", "dart_sdk"], '
@ -33,7 +33,7 @@ void main() {
test('generateMainModule includes null safety switches', () {
final String result = generateMainModule(
entrypoint: 'foo/bar/main.js',
nullSafety: true,
nullAssertions: true,
);
expect(result, contains(

View File

@ -462,6 +462,7 @@ void main() {
urlTunneller: null,
useSseForDebugProxy: true,
useSseForDebugBackend: true,
nullAssertions: true,
buildInfo: const BuildInfo(
BuildMode.debug,
'',
@ -574,6 +575,7 @@ void main() {
urlTunneller: null,
useSseForDebugProxy: true,
useSseForDebugBackend: true,
nullAssertions: true,
buildInfo: const BuildInfo(
BuildMode.debug,
'',
@ -689,6 +691,7 @@ void main() {
testMode: true,
expressionCompiler: null,
chromiumLauncher: null,
nullAssertions: true,
);
webDevFS.requireJS.createSync(recursive: true);
webDevFS.stackTraceMapper.createSync(recursive: true);
@ -725,6 +728,7 @@ void main() {
urlTunneller: null,
useSseForDebugProxy: true,
useSseForDebugBackend: true,
nullAssertions: true,
buildInfo: const BuildInfo(
BuildMode.debug,
'',