[dart2js] Migrate startup_emitter/emitter.dart and js_emitter/code_emitter_task.dart to null safety.
Change-Id: Iabad108c88a4e900fcb0c05dc23bb7318b04472b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/270341
Reviewed-by: Mayank Patke <fishythefish@google.com>
diff --git a/pkg/compiler/lib/src/js_backend/constant_emitter.dart b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
index 2e53482..a399d2a 100644
--- a/pkg/compiler/lib/src/js_backend/constant_emitter.dart
+++ b/pkg/compiler/lib/src/js_backend/constant_emitter.dart
@@ -40,11 +40,11 @@
/// Constructs a literal expression that evaluates to the constant. Uses a
/// canonical name unless the constant can be emitted multiple times (as for
/// numbers and strings).
- jsAst.Expression generate(ConstantValue constant) {
+ jsAst.Expression? generate(ConstantValue constant) {
return _visit(constant);
}
- jsAst.Expression _visit(ConstantValue constant) {
+ jsAst.Expression? _visit(ConstantValue constant) {
return constant.accept(this, null);
}
diff --git a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
index ec7eacd..6f103af 100644
--- a/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
+++ b/pkg/compiler/lib/src/js_emitter/code_emitter_task.dart
@@ -2,11 +2,11 @@
// 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.10
-
library dart2js.js_emitter.code_emitter_task;
-import '../common.dart';
+import 'package:compiler/src/dump_info.dart';
+import 'package:compiler/src/native/enqueue.dart';
+
import '../common/metrics.dart' show Metric, Metrics, CountMetric;
import '../common/tasks.dart' show CompilerTask;
import '../compiler_interfaces.dart' show CompilerEmitterFacade;
@@ -37,11 +37,13 @@
/// The code for the containing (used) methods must exist in the `universe`.
class CodeEmitterTask extends CompilerTask
implements interfaces.CodeEmitterTask {
- RuntimeTypesChecks _rtiChecks;
- NativeEmitter _nativeEmitter;
+ late final RuntimeTypesChecks _rtiChecks;
@override
- MetadataCollector metadataCollector;
- Emitter _emitter;
+ late final NativeEmitter nativeEmitter;
+ @override
+ late final MetadataCollector metadataCollector;
+ @override
+ late final Emitter emitter;
final CompilerEmitterFacade _compiler;
final bool _generateSourceMap;
@@ -53,11 +55,11 @@
/// Contains a list of all classes that are emitted.
/// Currently used for testing and dump-info.
@override
- Set<ClassEntity> neededClasses;
+ late final Set<ClassEntity> neededClasses;
/// See [neededClasses] but for class types.
@override
- Set<ClassEntity> neededClassTypes;
+ late final Set<ClassEntity> neededClassTypes;
@override
final _EmitterMetrics metrics = _EmitterMetrics();
@@ -66,22 +68,6 @@
: super(_compiler.measurer);
@override
- NativeEmitter get nativeEmitter {
- assert(
- _nativeEmitter != null,
- failedAt(
- NO_LOCATION_SPANNABLE, "NativeEmitter has not been created yet."));
- return _nativeEmitter;
- }
-
- @override
- Emitter /*!*/ get emitter {
- assert(_emitter != null,
- failedAt(NO_LOCATION_SPANNABLE, "Emitter has not been created yet."));
- return _emitter;
- }
-
- @override
String get name => 'Code emitter';
void _finalizeRti(CodegenInputs codegen, CodegenWorld codegenWorld) {
@@ -95,22 +81,22 @@
void createEmitter(
Namer namer, CodegenInputs codegen, JClosedWorld closedWorld) {
measure(() {
- _nativeEmitter = NativeEmitter(
- this, closedWorld, _backendStrategy.nativeCodegenEnqueuer);
- _emitter = startup_js_emitter.EmitterImpl(
+ nativeEmitter = NativeEmitter(this, closedWorld,
+ _backendStrategy.nativeCodegenEnqueuer as NativeCodegenEnqueuer);
+ emitter = startup_js_emitter.EmitterImpl(
_compiler.options,
_compiler.reporter,
_compiler.outputProvider,
- _compiler.dumpInfoTask,
+ _compiler.dumpInfoTask as DumpInfoTask,
namer,
closedWorld,
codegen.rtiRecipeEncoder,
- _nativeEmitter,
+ nativeEmitter,
_backendStrategy.sourceInformationStrategy,
this,
_generateSourceMap);
metadataCollector = MetadataCollector(
- _compiler.reporter, _emitter, codegen.rtiRecipeEncoder);
+ _compiler.reporter, emitter, codegen.rtiRecipeEncoder);
});
}
@@ -130,7 +116,7 @@
closedWorld.commonElements,
closedWorld.outputUnitData,
codegenWorld,
- _backendStrategy.nativeCodegenEnqueuer,
+ _backendStrategy.nativeCodegenEnqueuer as NativeCodegenEnqueuer,
closedWorld.backendUsage,
closedWorld.nativeData,
closedWorld.rtiNeed,
@@ -148,7 +134,7 @@
_backendStrategy.sourceInformationStrategy,
closedWorld.sorter,
_rtiChecks.requiredClasses,
- closedWorld.elementEnvironment.mainFunction);
+ closedWorld.elementEnvironment.mainFunction!);
int size = emitter.emitProgram(programBuilder, codegenWorld);
neededClasses = programBuilder.collector.neededClasses;
neededClassTypes = programBuilder.collector.neededClassTypes;
@@ -215,9 +201,9 @@
///
/// These methods are _not_ available during modular code generation.
abstract class Emitter implements ModularEmitter, interfaces.Emitter {
- Program get programForTesting;
+ Program? get programForTesting;
- List<PreFragment> get preDeferredFragmentsForTesting;
+ List<PreFragment>? get preDeferredFragmentsForTesting;
/// The set of omitted [OutputUnits].
Set<OutputUnit> get omittedOutputUnits;
diff --git a/pkg/compiler/lib/src/js_emitter/js_emitter.dart b/pkg/compiler/lib/src/js_emitter/js_emitter.dart
index 2371dee..b5d4f85 100644
--- a/pkg/compiler/lib/src/js_emitter/js_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/js_emitter.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.10
-
library dart2js.js_emitter;
export 'class_stub_generator.dart';
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
index 60a9091..b97cef2 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/emitter.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.10
-
library dart2js.js_emitter.startup_emitter;
import '../../../compiler_api.dart' as api;
@@ -71,7 +69,7 @@
@override
js.PropertyAccess prototypeAccess(ClassEntity element) {
js.Expression constructor = constructorAccess(element);
- return js.js('#.prototype', constructor);
+ return js.js('#.prototype', constructor) as js.PropertyAccess;
}
@override
@@ -103,28 +101,27 @@
final CodegenRegistry _registry;
final ModularConstantEmitter _constantEmitter;
- ModularEmitterImpl(
- ModularNamer namer, this._registry, CompilerOptions options)
- : _constantEmitter = ModularConstantEmitter(options, namer),
- super(namer);
+ ModularEmitterImpl(super.namer, this._registry, CompilerOptions options)
+ : _constantEmitter = ModularConstantEmitter(options, namer);
@override
js.Expression constantReference(ConstantValue constant) {
if (constant is FunctionConstantValue) {
return staticClosureAccess(constant.element);
}
- js.Expression expression = _constantEmitter.generate(constant);
+ js.Expression? expression = _constantEmitter.generate(constant);
if (expression != null) {
return expression;
}
- expression = ModularExpression(ModularExpressionKind.constant, constant);
- _registry.registerModularExpression(expression);
- return expression;
+ final modularExpression =
+ ModularExpression(ModularExpressionKind.constant, constant);
+ _registry.registerModularExpression(modularExpression);
+ return modularExpression;
}
@override
js.Expression generateEmbeddedGlobalAccess(String global) {
- js.Expression expression =
+ final expression =
ModularExpression(ModularExpressionKind.embeddedGlobalAccess, global);
_registry.registerModularExpression(expression);
return expression;
@@ -136,23 +133,23 @@
final JClosedWorld _closedWorld;
final RecipeEncoder _rtiRecipeEncoder;
final CodeEmitterTask _task;
- ModelEmitter _emitter;
+ late final ModelEmitter _emitter;
final NativeEmitter _nativeEmitter;
@override
- Program programForTesting;
+ Program? programForTesting;
@override
- List<PreFragment> preDeferredFragmentsForTesting;
+ List<PreFragment>? preDeferredFragmentsForTesting;
@override
- Set<OutputUnit> omittedOutputUnits;
+ late final Set<OutputUnit> omittedOutputUnits;
@override
- Map<String, List<FinalizedFragment>> finalizedFragmentsToLoad;
+ late final Map<String, List<FinalizedFragment>> finalizedFragmentsToLoad;
@override
- FragmentMerger fragmentMerger;
+ late final FragmentMerger fragmentMerger;
EmitterImpl(
CompilerOptions options,
@@ -183,9 +180,6 @@
}
@override
- Namer get _namer => super._namer;
-
- @override
int emitProgram(ProgramBuilder programBuilder, CodegenWorld codegenWorld) {
Program program = _task.measureSubtask('build program', () {
return programBuilder.buildProgram();
@@ -250,6 +244,6 @@
if (_emitter.omittedOutputUnits.contains(unit)) {
return 0;
}
- return _emitter.emittedOutputBuffers[unit].length;
+ return _emitter.emittedOutputBuffers[unit]!.length;
}
}
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
index 5ee2de9..75f92c7 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/model_emitter.dart
@@ -224,7 +224,7 @@
// We are only interested in the "isInlined" part, but it does not hurt to
// test for the other predicates.
if (isConstantInlinedOrAlreadyEmitted(value)) {
- return constantEmitter.generate(value);
+ return constantEmitter.generate(value)!;
}
return js.js('#.#',
[_namer.globalObjectForConstant(value), _namer.constantName(value)]);