[dart2js] Prep js_model/js_strategy.dart for null safety migration.

Change-Id: Ia4eb541de5671850c34633d466ef2d7f0d50bbdc
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/277280
Reviewed-by: Stephen Adams <sra@google.com>
diff --git a/pkg/compiler/lib/src/compiler.dart b/pkg/compiler/lib/src/compiler.dart
index 471de47..e5bb5ea 100644
--- a/pkg/compiler/lib/src/compiler.dart
+++ b/pkg/compiler/lib/src/compiler.dart
@@ -27,6 +27,7 @@
         CompilerDumpInfoFacade,
         CompilerEmitterFacade,
         CompilerInferrerFacade,
+        CompilerJsBackendStrategyFacade,
         CompilerKernelStrategyFacade,
         CompilerTypeInferenceFacade;
 import 'deferred_load/deferred_load.dart' show DeferredLoadTask;
@@ -86,6 +87,7 @@
         CompilerDumpInfoFacade,
         CompilerEmitterFacade,
         CompilerInferrerFacade,
+        CompilerJsBackendStrategyFacade,
         CompilerKernelStrategyFacade,
         CompilerTypeInferenceFacade {
   @override
@@ -131,6 +133,7 @@
   @override
   Map<Entity, WorldImpact> get impactCache => _impactCache;
 
+  @override
   final Environment environment;
 
   List<CompilerTask> tasks;
@@ -141,6 +144,7 @@
   experimentalInferrer.GlobalTypeInferenceTask experimentalGlobalInference;
   CodegenWorldBuilder _codegenWorldBuilder;
 
+  @override
   AbstractValueStrategy abstractValueStrategy;
 
   GenericTask selfTask;
diff --git a/pkg/compiler/lib/src/compiler_interfaces.dart b/pkg/compiler/lib/src/compiler_interfaces.dart
index eed7d2c..e18f010 100644
--- a/pkg/compiler/lib/src/compiler_interfaces.dart
+++ b/pkg/compiler/lib/src/compiler_interfaces.dart
@@ -6,6 +6,9 @@
 // TODO(48820): delete after the migration is complete.
 library compiler.src.compiler_interfaces;
 
+import 'package:compiler/src/environment.dart';
+import 'package:compiler/src/inferrer/abstract_value_strategy.dart';
+
 import '../compiler_api.dart' show CompilerOutput, Diagnostic;
 
 import 'common/tasks.dart' show Measurer;
@@ -111,3 +114,15 @@
   CompilerOutput get outputProvider;
   DumpInfoJavaScriptMonitor get dumpInfoTask;
 }
+
+// Subset of [Compiler] needed by JsBackendStrategy
+///
+/// See definitions on [Compiler] for documentation.
+abstract class CompilerJsBackendStrategyFacade
+    implements CompilerEmitterFacade, CompilerInferrerFacade {
+  KernelFrontendStrategy get frontendStrategy;
+
+  Environment get environment;
+
+  AbstractValueStrategy get abstractValueStrategy;
+}
diff --git a/pkg/compiler/lib/src/dump_info.dart b/pkg/compiler/lib/src/dump_info.dart
index c9fd2a8..9d43f9c 100644
--- a/pkg/compiler/lib/src/dump_info.dart
+++ b/pkg/compiler/lib/src/dump_info.dart
@@ -1185,6 +1185,7 @@
     inlineMap[inlinedFrom]!.add(element);
   }
 
+  @override
   void registerImpact(MemberEntity member, WorldImpact impact) {
     if (compiler.options.dumpInfo) {
       impacts[member] = impact;
diff --git a/pkg/compiler/lib/src/dump_info_javascript_monitor.dart b/pkg/compiler/lib/src/dump_info_javascript_monitor.dart
index da46ae1..5645e56 100644
--- a/pkg/compiler/lib/src/dump_info_javascript_monitor.dart
+++ b/pkg/compiler/lib/src/dump_info_javascript_monitor.dart
@@ -6,6 +6,9 @@
 
 import 'package:js_ast/js_ast.dart' as jsAst show Node;
 
+import 'elements/entities.dart';
+import 'universe/world_impact.dart';
+
 /// Interface implemented by `DumpInfoTask` used to monitor the generated
 /// JavaScript as it is written.
 // TODO(48820): Remove this interface when `DumpInfoTask` is migrated.
@@ -15,4 +18,5 @@
   void enterNode(jsAst.Node node, int start);
   void emit(String string);
   void exitNode(jsAst.Node node, int start, int end, int? closing);
+  void registerImpact(MemberEntity member, WorldImpact worldImpact);
 }
diff --git a/pkg/compiler/lib/src/js_backend/backend.dart b/pkg/compiler/lib/src/js_backend/backend.dart
index 81e3b49..368f25a 100644
--- a/pkg/compiler/lib/src/js_backend/backend.dart
+++ b/pkg/compiler/lib/src/js_backend/backend.dart
@@ -6,6 +6,7 @@
 
 import '../common.dart';
 import '../common/codegen.dart';
+import '../common/tasks.dart';
 import '../elements/entities.dart';
 import '../inferrer/types.dart';
 import '../js_model/elements.dart';
@@ -19,7 +20,7 @@
   /// Generates JavaScript code for [member].
   CodegenResult compile(MemberEntity member);
 
-  Iterable get tasks;
+  List<CompilerTask> get tasks;
 }
 
 /*
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 0934d56..76e2a18 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -128,7 +128,7 @@
       this._environment,
       KernelToElementMap _elementMap,
       Map<MemberEntity, MemberUsage> liveMemberUsage,
-      Set<MemberEntity> liveAbstractMembers,
+      Iterable<MemberEntity> liveAbstractMembers,
       AnnotationsData annotations)
       : this.options = _elementMap.options {
     _elementEnvironment = JsElementEnvironment(this);
diff --git a/pkg/compiler/lib/src/js_model/js_strategy.dart b/pkg/compiler/lib/src/js_model/js_strategy.dart
index a90ea9f..9f6a65b 100644
--- a/pkg/compiler/lib/src/js_model/js_strategy.dart
+++ b/pkg/compiler/lib/src/js_model/js_strategy.dart
@@ -11,7 +11,7 @@
 import '../common/elements.dart' show CommonElements, ElementEnvironment;
 import '../common/tasks.dart';
 import '../common/work.dart';
-import '../compiler.dart';
+import '../compiler_interfaces.dart';
 import '../deferred_load/output_unit.dart'
     show LateOutputUnitDataBuilder, OutputUnitData;
 import '../dump_info.dart';
@@ -74,7 +74,7 @@
 /// JS Strategy pattern that defines the element model used in type inference
 /// and code generation.
 class JsBackendStrategy implements interfaces.JsBackendStrategy {
-  final Compiler _compiler;
+  final CompilerJsBackendStrategyFacade _compiler;
   JsKernelToElementMap _elementMap;
 
   /// Codegen support for generating table of interceptors and
diff --git a/pkg/compiler/lib/src/kernel/env.dart b/pkg/compiler/lib/src/kernel/env.dart
index b38c337..07bd4a2 100644
--- a/pkg/compiler/lib/src/kernel/env.dart
+++ b/pkg/compiler/lib/src/kernel/env.dart
@@ -246,7 +246,7 @@
   JClassEnv convert(
       IrToElementMap kElementMap,
       Map<MemberEntity, MemberUsage> liveMemberUsage,
-      Set<MemberEntity> liveAbstractMembers,
+      Iterable<MemberEntity> liveAbstractMembers,
       LibraryEntity Function(ir.Library library) getJLibrary);
 
   /// Returns `true` if [node] is a known member of this class.
@@ -436,7 +436,7 @@
   JClassEnv convert(
       IrToElementMap kElementMap,
       Map<MemberEntity, MemberUsage> liveMemberUsage,
-      Set<MemberEntity> liveAbstractMembers,
+      Iterable<MemberEntity> liveAbstractMembers,
       LibraryEntity Function(ir.Library library) getJLibrary) {
     Map<String, ir.Member> constructorMap;
     Map<Name, ir.Member> memberMap;
diff --git a/pkg/compiler/lib/src/ssa/ssa.dart b/pkg/compiler/lib/src/ssa/ssa.dart
index 2cfa4d4..5d16492 100644
--- a/pkg/compiler/lib/src/ssa/ssa.dart
+++ b/pkg/compiler/lib/src/ssa/ssa.dart
@@ -311,7 +311,7 @@
   }
 
   @override
-  Iterable<CompilerTask> get tasks {
+  List<CompilerTask> get tasks {
     return [_builder, optimizer, generator];
   }
 }