[ddc] Migrate module_builder to null safety
Issue: https://github.com/dart-lang/sdk/issues/46617
Change-Id: I977cf87a4461863b39ee52beb5404cb80f1ac3c6
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/245284
Commit-Queue: Nicholas Shahan <nshahan@google.com>
Reviewed-by: Anna Gringauze <annagrin@google.com>
diff --git a/pkg/dev_compiler/lib/src/compiler/module_builder.dart b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
index 9e89dc5..eeb78ea 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
@@ -2,8 +2,6 @@
// 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.
-// @dart = 2.9
-
import 'package:args/args.dart' show ArgParser, ArgResults;
import 'package:path/path.dart' as p;
@@ -104,7 +102,7 @@
/// structure as possible with the original. The transformation is a shallow one
/// that affects the [ImportDeclaration]s from [items].
///
-/// Returns a new function that combines all statements from tranformed imports
+/// Returns a new function that combines all statements from transformed imports
/// from [items] and the body of the [function].
Fun transformFunctionModuleFormat(
List<ModuleItem> items, Fun function, ModuleFormat format) {
@@ -191,11 +189,11 @@
Identifier moduleVar, ImportDeclaration import, bool deferModules) {
var items = <Statement>[];
- for (var importName in import.namedImports) {
+ for (var importName in import.namedImports!) {
// import * is not emitted by the compiler, so we don't handle it here.
assert(!importName.isStar);
var asName = importName.asName ?? importName.name;
- var fromName = importName.name.name;
+ var fromName = importName.name!.name;
// Load non-SDK modules on demand (i.e., deferred).
if (deferModules && import.from.valueWithoutQuotes != dartSdkModule) {
items.add(js.statement(
@@ -220,10 +218,11 @@
items.add(js.comment('Exports:'));
// TODO(jmesserly): make these immutable in JS?
for (var export in exports) {
- var names = export.exportedNames;
- assert(names != null); // export * not supported in ddc modules.
+ // export * (exportedNames is null) is not emitted by the compiler, so
+ // we don't handle it here.
+ var names = export.exportedNames!;
for (var name in names) {
- var alias = name.asName ?? name.name;
+ var alias = name.asName ?? name.name!;
items.add(
js.statement('#.# = #;', [exportsVar, alias.name, name.name]));
}
@@ -238,7 +237,7 @@
/// compilation, in order to include all the context needed for evaluation
/// inside it.
///
- /// Returns a new function that combines all statements from tranformed
+ /// Returns a new function that combines all statements from transformed
/// imports from [items] and the body of the [function].
Fun buildFunctionWithImports(List<ModuleItem> items, Fun function) {
clear();
@@ -279,19 +278,20 @@
importStatements.addAll(buildImports(moduleVar, import, true));
}
- // Prepend import statetements.
+ // Prepend import statements.
statements.insertAll(0, importStatements);
// Append export statements.
statements.addAll(buildExports(exportsVar, exports));
+ var moduleName = module.name!;
var resultModule = NamedFunction(
- loadFunctionIdentifier(module.name),
+ loadFunctionIdentifier(moduleName),
js.fun("function(#) { 'use strict'; #; }", [parameters, statements]),
true);
var moduleDef = js.statement('dart_library.library(#, #, #, #, #)', [
- js.string(module.name, "'"),
+ js.string(moduleName, "'"),
LiteralNull(),
js.commentExpression(
'Imports', ArrayInitializer(importNames, multiline: true)),
@@ -320,12 +320,12 @@
.add(js.statement('const # = require(#);', [moduleVar, import.from]));
// TODO(jmesserly): optimize for the common case of a single import.
- for (var importName in import.namedImports) {
+ for (var importName in import.namedImports!) {
// import * is not emitted by the compiler, so we don't support it here.
assert(!importName.isStar);
var asName = importName.asName ?? importName.name;
importStatements.add(js.statement(
- 'const # = #.#', [asName, moduleVar, importName.name.name]));
+ 'const # = #.#', [asName, moduleVar, importName.name!.name]));
}
}
statements.insertAll(0, importStatements);
@@ -334,11 +334,11 @@
var exportsVar = Identifier('exports');
statements.add(js.comment('Exports:'));
for (var export in exports) {
- var names = export.exportedNames;
- // export * is not emitted by the compiler, so we don't handle it here.
- assert(names != null);
+ // export * (exportedNames is null) is not emitted by the compiler, so
+ // we don't handle it here.
+ var names = export.exportedNames!;
for (var name in names) {
- var alias = name.asName ?? name.name;
+ var alias = name.asName ?? name.name!;
statements.add(
js.statement('#.# = #;', [exportsVar, alias.name, name.name]));
}
@@ -366,12 +366,12 @@
Identifier moduleVar, ImportDeclaration import) {
var items = <Statement>[];
- for (var importName in import.namedImports) {
+ for (var importName in import.namedImports!) {
// import * is not emitted by the compiler, so we don't handle it here.
assert(!importName.isStar);
var asName = importName.asName ?? importName.name;
items.add(js.statement(
- 'const # = #.#', [asName, moduleVar, importName.name.name]));
+ 'const # = #.#', [asName, moduleVar, importName.name!.name]));
}
return items;
}
@@ -383,12 +383,12 @@
if (exports.isNotEmpty) {
var exportedProps = <Property>[];
for (var export in exports) {
- var names = export.exportedNames;
- // export * is not emitted by the compiler, so we don't handle it here.
- assert(names != null);
+ // export * (exportedNames is null) is not emitted by the compiler, so
+ // we don't handle it here.
+ var names = export.exportedNames!;
for (var name in names) {
- var alias = name.asName ?? name.name;
- exportedProps.add(Property(js.string(alias.name), name.name));
+ var alias = name.asName ?? name.name!;
+ exportedProps.add(Property(js.string(alias.name), name.name!));
}
}
items.add(js.comment('Exports:'));
@@ -403,7 +403,7 @@
/// compilation, in order to include all the context needed for evaluation
/// inside it.
///
- /// Returns a new function that combines all statements from tranformed
+ /// Returns a new function that combines all statements from transformed
/// imports from [items] and the body of the [function].
Fun buildFunctionWithImports(List<ModuleItem> items, Fun function) {
clear();
@@ -442,14 +442,14 @@
importStatements.addAll(buildImports(moduleVar, import));
}
- // Prepend import statetements.
+ // Prepend import statements.
statements.insertAll(0, importStatements);
// Append export statements.
statements.addAll(buildExports(exports));
var resultModule = NamedFunction(
- loadFunctionIdentifier(module.name),
+ loadFunctionIdentifier(module.name!),
js.fun("function(#) { 'use strict'; #; }", [fnParams, statements]),
true);
var block = js.statement(