Version 2.18.0-115.0.dev

Merge commit 'ebce8e8dd049e9045c5a54de832607e9a028587b' into 'dev'
diff --git a/pkg/compiler/lib/src/elements/indexed.dart b/pkg/compiler/lib/src/elements/indexed.dart
index fef7e77..1534bae 100644
--- a/pkg/compiler/lib/src/elements/indexed.dart
+++ b/pkg/compiler/lib/src/elements/indexed.dart
@@ -2,14 +2,12 @@
 // 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
-
 /// Indexed entity interfaces for modeling elements derived from Kernel IR.
 
 import '../elements/entities.dart';
 
 abstract class _Indexed {
-  int _index;
+  late final int _index;
 }
 
 abstract class IndexedLibrary extends _Indexed implements LibraryEntity {
@@ -56,10 +54,10 @@
   bool _closed = false;
 
   int _size = 0;
-  final List<E> _list = <E>[];
+  final List<E?> _list = <E?>[];
 
   /// Returns the [index]th entity in the map.
-  E getEntity(int index) => _list[index];
+  E? getEntity(int index) => _list[index];
 
   /// Returns the number of non-null entities in the map.
   int get size => _size;
@@ -85,8 +83,7 @@
   E0 register<E0 extends E>(E0 entity) {
     assert(
         !_closed, "Trying to register $entity @ ${_list.length} when closed.");
-    assert(entity != null);
-    assert(entity._index == null);
+    assert((entity as dynamic) != null); // TODO(48820): Remove.
     entity._index = _list.length;
     _list.add(entity);
     _size++;
@@ -103,7 +100,7 @@
   /// Calls [f] for each non-null entity.
   void forEach<E0 extends E>(void f(E0 entity)) {
     for (int index = 0; index < _list.length; index++) {
-      E entity = _list[index];
+      final entity = _list[index] as E0?;
       if (entity != null) {
         f(entity);
       }
@@ -115,7 +112,7 @@
 /// corresponding data object of type [D].
 abstract class EntityDataMapBase<E extends _Indexed, D>
     extends EntityMapBase<E> {
-  final List<D> _data = <D>[];
+  final List<D?> _data = <D?>[];
 
   /// Returns the data object stored for the [index]th entity.
   D getData(E entity) {
@@ -124,7 +121,7 @@
       throw StateError(
           'Data is in the process of being created for ${_list[index]}.');
     }
-    return _data[index];
+    return _data[index]!;
   }
 }
 
@@ -145,8 +142,7 @@
   E0 register<E0 extends E, D0 extends D>(E0 entity, D0 data) {
     assert(
         !_closed, "Trying to register $entity @ ${_list.length} when closed.");
-    assert(entity != null);
-    assert(entity._index == null);
+    assert((entity as dynamic) != null); // TODO(48820): Remove.
     assert(
         _list.length == _data.length,
         'Data list length ${_data.length} inconsistent '
@@ -174,9 +170,9 @@
       throw StateError('Data is in the process of being created.');
     }
     for (int index = 0; index < _list.length; index++) {
-      E entity = _list[index];
+      final entity = _list[index] as E0?;
       if (entity != null) {
-        f(entity, _data[index]);
+        f(entity, _data[index] as D0);
       }
     }
   }
@@ -212,8 +208,7 @@
       E0 entity, D0 data, V0 env) {
     assert(
         !_closed, "Trying to register $entity @ ${_list.length} when closed.");
-    assert(entity != null);
-    assert(entity._index == null);
+    assert((entity as dynamic) != null); // TODO(48820): Remove.
     assert(
         _list.length == _data.length,
         'Data list length ${_data.length} inconsistent '
@@ -244,8 +239,7 @@
   void _preRegister<E0 extends E, V0 extends V>(E0 entity, V0 env) {
     assert(
         !_closed, "Trying to register $entity @ ${_list.length} when closed.");
-    assert(entity != null);
-    assert(entity._index == null);
+    assert((entity as dynamic) != null); // TODO(48820): Remove.
     assert(
         _list.length == _env.length,
         'Env list length ${_env.length} inconsistent '
@@ -272,7 +266,7 @@
   void postRegisterData<E0 extends E, D0 extends D>(E0 entity, D0 data) {
     assert(
         !_closed, "Trying to register $entity @ ${_list.length} when closed.");
-    assert(entity != null);
+    assert((entity as dynamic) != null); // TODO(48820): Remove.
     assert(
         (_list.length - 1) == _data.length,
         'Data list length ${_data.length} inconsistent '
@@ -292,9 +286,9 @@
       throw StateError('Env is in the process of being created.');
     }
     for (int index = 0; index < _list.length; index++) {
-      E entity = _list[index];
+      final entity = _list[index] as E0?;
       if (entity != null) {
-        f(entity, _data[index], _env[index]);
+        f(entity, _data[index] as D0, _env[index] as V0);
       }
     }
   }
diff --git a/tools/VERSION b/tools/VERSION
index 2676ad4..eee5da8 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 2
 MINOR 18
 PATCH 0
-PRERELEASE 114
+PRERELEASE 115
 PRERELEASE_PATCH 0
\ No newline at end of file