diff --git a/pkg/kernel/lib/core_types.dart b/pkg/kernel/lib/core_types.dart
index 4123eec..30c0329 100644
--- a/pkg/kernel/lib/core_types.dart
+++ b/pkg/kernel/lib/core_types.dart
@@ -119,8 +119,8 @@
   CoreTypes(Component component)
       : index = new LibraryIndex.coreLibraries(component);
 
-  late final Procedure asyncErrorWrapperHelperProcedure = index
-      .getTopLevelMember('dart:async', '_asyncErrorWrapperHelper') as Procedure;
+  late final Procedure asyncErrorWrapperHelperProcedure =
+      index.getTopLevelProcedure('dart:async', '_asyncErrorWrapperHelper');
 
   late final Library asyncLibrary = index.getLibrary('dart:async');
 
@@ -139,33 +139,33 @@
   late final Member asyncStarStreamControllerClose =
       index.getMember('dart:async', '_AsyncStarStreamController', 'close');
 
-  late final Constructor asyncStarStreamControllerDefaultConstructor = index
-      .getMember('dart:async', '_AsyncStarStreamController', '') as Constructor;
+  late final Constructor asyncStarStreamControllerDefaultConstructor =
+      index.getConstructor('dart:async', '_AsyncStarStreamController', '');
 
   late final Member asyncStarStreamControllerStream =
       index.getMember('dart:async', '_AsyncStarStreamController', 'get:stream');
 
-  late final Procedure asyncStarMoveNextHelper = index.getTopLevelMember(
-      'dart:async', '_asyncStarMoveNextHelper') as Procedure;
+  late final Procedure asyncStarMoveNextHelper =
+      index.getTopLevelProcedure('dart:async', '_asyncStarMoveNextHelper');
 
-  late final Procedure asyncThenWrapperHelperProcedure = index
-      .getTopLevelMember('dart:async', '_asyncThenWrapperHelper') as Procedure;
+  late final Procedure asyncThenWrapperHelperProcedure =
+      index.getTopLevelProcedure('dart:async', '_asyncThenWrapperHelper');
 
   late final Procedure awaitHelperProcedure =
-      index.getTopLevelMember('dart:async', '_awaitHelper') as Procedure;
+      index.getTopLevelProcedure('dart:async', '_awaitHelper');
 
   late final Class boolClass = index.getClass('dart:core', 'bool');
 
   late final Class futureImplClass = index.getClass('dart:async', '_Future');
 
   late final Constructor futureImplConstructor =
-      index.getMember('dart:async', '_Future', '') as Constructor;
+      index.getConstructor('dart:async', '_Future', '');
 
-  late final Procedure completeOnAsyncReturn = index.getTopLevelMember(
-      'dart:async', '_completeOnAsyncReturn') as Procedure;
+  late final Procedure completeOnAsyncReturn =
+      index.getTopLevelProcedure('dart:async', '_completeOnAsyncReturn');
 
-  late final Procedure completeOnAsyncError = index.getTopLevelMember(
-      'dart:async', '_completeOnAsyncError') as Procedure;
+  late final Procedure completeOnAsyncError =
+      index.getTopLevelProcedure('dart:async', '_completeOnAsyncError');
 
   late final Library coreLibrary = index.getLibrary('dart:core');
 
@@ -180,7 +180,7 @@
       index.getClass('dart:async', 'FutureOr');
 
   late final Procedure identicalProcedure =
-      index.getTopLevelMember('dart:core', 'identical') as Procedure;
+      index.getTopLevelProcedure('dart:core', 'identical');
 
   late final Class intClass = index.getClass('dart:core', 'int');
 
@@ -192,47 +192,46 @@
   late final Class invocationMirrorClass =
       index.getClass('dart:core', '_InvocationMirror');
 
-  late final Constructor invocationMirrorWithTypeConstructor = index.getMember(
-      'dart:core', '_InvocationMirror', '_withType') as Constructor;
+  late final Constructor invocationMirrorWithTypeConstructor =
+      index.getConstructor('dart:core', '_InvocationMirror', '_withType');
 
   late final Class iterableClass = index.getClass('dart:core', 'Iterable');
 
   late final Procedure iterableGetIterator =
-      index.getMember('dart:core', 'Iterable', 'get:iterator') as Procedure;
+      index.getProcedure('dart:core', 'Iterable', 'get:iterator');
 
   late final Class iteratorClass = index.getClass('dart:core', 'Iterator');
 
   late final Procedure iteratorMoveNext =
-      index.getMember('dart:core', 'Iterator', 'moveNext') as Procedure;
+      index.getProcedure('dart:core', 'Iterator', 'moveNext');
 
   late final Procedure iteratorGetCurrent =
-      index.getMember('dart:core', 'Iterator', 'get:current') as Procedure;
+      index.getProcedure('dart:core', 'Iterator', 'get:current');
 
   late final Class listClass = index.getClass('dart:core', 'List');
 
   late final Procedure listDefaultConstructor =
-      index.getMember('dart:core', 'List', '') as Procedure;
+      index.getProcedure('dart:core', 'List', '');
 
   late final Procedure listFromConstructor =
-      index.getMember('dart:core', 'List', 'from') as Procedure;
+      index.getProcedure('dart:core', 'List', 'from');
 
   late final Procedure listUnmodifiableConstructor =
-      index.getMember('dart:core', 'List', 'unmodifiable') as Procedure;
+      index.getProcedure('dart:core', 'List', 'unmodifiable');
 
   late final Class setClass = index.getClass('dart:core', 'Set');
 
   late final Class mapClass = index.getClass('dart:core', 'Map');
 
   late final Procedure mapUnmodifiable =
-      index.getMember('dart:core', 'Map', 'unmodifiable') as Procedure;
+      index.getProcedure('dart:core', 'Map', 'unmodifiable');
 
   /// The `dart:mirrors` library, or `null` if the component does not use it.
   late final Library? mirrorsLibrary = index.tryGetLibrary('dart:mirrors');
 
   late final Constructor noSuchMethodErrorDefaultConstructor =
       // TODO(regis): Replace 'withInvocation' with '' after dart2js is fixed.
-      index.getMember('dart:core', 'NoSuchMethodError', 'withInvocation')
-          as Constructor;
+      index.getConstructor('dart:core', 'NoSuchMethodError', 'withInvocation');
 
   late final Class deprecatedNullClass = index.getClass('dart:core', 'Null');
 
@@ -241,18 +240,17 @@
   late final Class objectClass = index.getClass('dart:core', 'Object');
 
   late final Procedure objectEquals =
-      index.getMember('dart:core', 'Object', '==') as Procedure;
+      index.getProcedure('dart:core', 'Object', '==');
 
   late final Class pragmaClass = index.getClass('dart:core', 'pragma');
 
-  late final Field pragmaName =
-      index.getMember('dart:core', 'pragma', 'name') as Field;
+  late final Field pragmaName = index.getField('dart:core', 'pragma', 'name');
 
   late final Field pragmaOptions =
-      index.getMember('dart:core', 'pragma', 'options') as Field;
+      index.getField('dart:core', 'pragma', 'options');
 
   late final Constructor pragmaConstructor =
-      index.getMember('dart:core', 'pragma', '_') as Constructor;
+      index.getConstructor('dart:core', 'pragma', '_');
 
   late final Class stackTraceClass = index.getClass('dart:core', 'StackTrace');
 
@@ -268,7 +266,7 @@
       index.getClass('dart:async', '_StreamIterator');
 
   late final Constructor streamIteratorDefaultConstructor =
-      index.getMember('dart:async', '_StreamIterator', '') as Constructor;
+      index.getConstructor('dart:async', '_StreamIterator', '');
 
   late final Member streamIteratorMoveNext =
       index.getMember('dart:async', '_StreamIterator', 'moveNext');
@@ -281,7 +279,7 @@
   late final Class symbolClass = index.getClass('dart:core', 'Symbol');
 
   late final Constructor syncIterableDefaultConstructor =
-      index.getMember('dart:core', '_SyncIterable', '') as Constructor;
+      index.getConstructor('dart:core', '_SyncIterable', '');
 
   late final Class syncIteratorClass =
       index.getClass('dart:core', '_SyncIterator');
@@ -294,40 +292,40 @@
 
   late final Class typeClass = index.getClass('dart:core', 'Type');
 
-  late final Constructor fallThroughErrorUrlAndLineConstructor = index
-      .getMember('dart:core', 'FallThroughError', '_create') as Constructor;
+  late final Constructor fallThroughErrorUrlAndLineConstructor =
+      index.getConstructor('dart:core', 'FallThroughError', '_create');
 
   late final Procedure boolFromEnvironment =
-      index.getMember('dart:core', 'bool', 'fromEnvironment') as Procedure;
+      index.getProcedure('dart:core', 'bool', 'fromEnvironment');
 
   late final Procedure createSentinelMethod =
-      index.getTopLevelMember('dart:_internal', 'createSentinel') as Procedure;
+      index.getTopLevelProcedure('dart:_internal', 'createSentinel');
 
   late final Procedure isSentinelMethod =
-      index.getTopLevelMember('dart:_internal', 'isSentinel') as Procedure;
+      index.getTopLevelProcedure('dart:_internal', 'isSentinel');
 
   late final Constructor
       lateInitializationFieldAssignedDuringInitializationConstructor =
-      index.getMember('dart:_internal', 'LateError', 'fieldADI') as Constructor;
+      index.getConstructor('dart:_internal', 'LateError', 'fieldADI');
 
   late final Constructor
       lateInitializationLocalAssignedDuringInitializationConstructor =
-      index.getMember('dart:_internal', 'LateError', 'localADI') as Constructor;
+      index.getConstructor('dart:_internal', 'LateError', 'localADI');
 
   late final Constructor lateInitializationFieldNotInitializedConstructor =
-      index.getMember('dart:_internal', 'LateError', 'fieldNI') as Constructor;
+      index.getConstructor('dart:_internal', 'LateError', 'fieldNI');
 
   late final Constructor lateInitializationLocalNotInitializedConstructor =
-      index.getMember('dart:_internal', 'LateError', 'localNI') as Constructor;
+      index.getConstructor('dart:_internal', 'LateError', 'localNI');
 
   late final Constructor lateInitializationFieldAlreadyInitializedConstructor =
-      index.getMember('dart:_internal', 'LateError', 'fieldAI') as Constructor;
+      index.getConstructor('dart:_internal', 'LateError', 'fieldAI');
 
   late final Constructor lateInitializationLocalAlreadyInitializedConstructor =
-      index.getMember('dart:_internal', 'LateError', 'localAI') as Constructor;
+      index.getConstructor('dart:_internal', 'LateError', 'localAI');
 
   late final Constructor reachabilityErrorConstructor =
-      index.getMember('dart:_internal', 'ReachabilityError', '') as Constructor;
+      index.getConstructor('dart:_internal', 'ReachabilityError', '');
 
   late final Class cellClass = index.getClass('dart:_late_helper', '_Cell');
 
diff --git a/pkg/kernel/lib/library_index.dart b/pkg/kernel/lib/library_index.dart
index 6ee654d..e2f89df 100644
--- a/pkg/kernel/lib/library_index.dart
+++ b/pkg/kernel/lib/library_index.dart
@@ -108,6 +108,19 @@
     return _libraries[library]?.tryGetMember(className, memberName);
   }
 
+  Constructor getConstructor(
+      String library, String className, String memberName) {
+    return _getLibraryIndex(library).getConstructor(className, memberName);
+  }
+
+  Procedure getProcedure(String library, String className, String memberName) {
+    return _getLibraryIndex(library).getProcedure(className, memberName);
+  }
+
+  Field getField(String library, String className, String memberName) {
+    return _getLibraryIndex(library).getField(className, memberName);
+  }
+
   /// Returns the top-level member with the given name, in the given library.
   ///
   /// If a getter or setter is wanted, the `get:` or `set:` prefix must be
@@ -127,6 +140,14 @@
       String library, String className, String memberName) {
     return tryGetMember(library, topLevel, memberName);
   }
+
+  Procedure getTopLevelProcedure(String library, String memberName) {
+    return getProcedure(library, topLevel, memberName);
+  }
+
+  Field getTopLevelField(String library, String memberName) {
+    return getField(library, topLevel, memberName);
+  }
 }
 
 class _ClassTable {
@@ -186,6 +207,18 @@
   Member? tryGetMember(String className, String memberName) {
     return classes[className]?.tryGetMember(memberName);
   }
+
+  Constructor getConstructor(String className, String memberName) {
+    return _getClassIndex(className).getConstructor(memberName);
+  }
+
+  Procedure getProcedure(String className, String memberName) {
+    return _getClassIndex(className).getProcedure(memberName);
+  }
+
+  Field getField(String className, String memberName) {
+    return _getClassIndex(className).getField(memberName);
+  }
 }
 
 class _MemberTable {
@@ -290,4 +323,31 @@
   }
 
   Member? tryGetMember(String name) => members[name];
+
+  Constructor getConstructor(String name) {
+    Member member = getMember(name);
+    if (member is! Constructor) {
+      throw "Member '$name' in $containerName is not a Constructor: "
+          "${member} (${member.runtimeType}).";
+    }
+    return member;
+  }
+
+  Procedure getProcedure(String name) {
+    Member member = getMember(name);
+    if (member is! Procedure) {
+      throw "Member '$name' in $containerName is not a Procedure: "
+          "${member} (${member.runtimeType}).";
+    }
+    return member;
+  }
+
+  Field getField(String name) {
+    Member member = getMember(name);
+    if (member is! Field) {
+      throw "Member '$name' in $containerName is not a Field: "
+          "${member} (${member.runtimeType}).";
+    }
+    return member;
+  }
 }
diff --git a/pkg/kernel/lib/vm/constants_native_effects.dart b/pkg/kernel/lib/vm/constants_native_effects.dart
index f4efb71..911f2cc 100644
--- a/pkg/kernel/lib/vm/constants_native_effects.dart
+++ b/pkg/kernel/lib/vm/constants_native_effects.dart
@@ -25,8 +25,8 @@
         .firstWhere((Class klass) => klass.name == '_ImmutableMap');
     // ignore: unnecessary_null_comparison
     assert(immutableMapClass != null);
-    Field unmodifiableSetMap = coreTypes.index
-        .getMember('dart:collection', '_UnmodifiableSet', '_map') as Field;
+    Field unmodifiableSetMap =
+        coreTypes.index.getField('dart:collection', '_UnmodifiableSet', '_map');
 
     return new VmConstantsBackend._(immutableMapClass, unmodifiableSetMap,
         unmodifiableSetMap.enclosingClass!);
diff --git a/pkg/vm/lib/metadata/call_site_attributes.dart b/pkg/vm/lib/metadata/call_site_attributes.dart
index 10acd75..7ef8c93 100644
--- a/pkg/vm/lib/metadata/call_site_attributes.dart
+++ b/pkg/vm/lib/metadata/call_site_attributes.dart
@@ -2,6 +2,8 @@
 // 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.12
+
 library vm.metadata.call_site_attributes;
 
 import 'package:kernel/ast.dart';
@@ -11,7 +13,7 @@
 class CallSiteAttributesMetadata {
   final DartType receiverType;
 
-  const CallSiteAttributesMetadata({this.receiverType});
+  const CallSiteAttributesMetadata({required this.receiverType});
 
   @override
   String toString() =>
diff --git a/pkg/vm/lib/transformations/call_site_annotator.dart b/pkg/vm/lib/transformations/call_site_annotator.dart
index 8a45c5a..e3722a1 100644
--- a/pkg/vm/lib/transformations/call_site_annotator.dart
+++ b/pkg/vm/lib/transformations/call_site_annotator.dart
@@ -2,6 +2,8 @@
 // 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.12
+
 // This transformation annotates call sites with the receiver type.
 // This is done to avoid reimplementing [Expression.getStaticType] in
 // C++.
@@ -19,8 +21,9 @@
 
 CallSiteAttributesMetadataRepository addRepositoryTo(Component component) {
   return component.metadata.putIfAbsent(
-      CallSiteAttributesMetadataRepository.repositoryTag,
-      () => new CallSiteAttributesMetadataRepository());
+          CallSiteAttributesMetadataRepository.repositoryTag,
+          () => new CallSiteAttributesMetadataRepository())
+      as CallSiteAttributesMetadataRepository;
 }
 
 void transformLibraries(Component component, List<Library> libraries,
@@ -33,7 +36,7 @@
 class AnnotateWithStaticTypes extends RecursiveVisitor {
   final CallSiteAttributesMetadataRepository _metadata;
   final TypeEnvironment env;
-  StaticTypeContext _staticTypeContext;
+  StaticTypeContext? _staticTypeContext;
 
   AnnotateWithStaticTypes(
       Component component, CoreTypes coreTypes, ClassHierarchy hierarchy)
@@ -49,7 +52,7 @@
 
   void annotateWithType(TreeNode node, Expression receiver) {
     _metadata.mapping[node] = new CallSiteAttributesMetadata(
-        receiverType: receiver.getStaticType(_staticTypeContext));
+        receiverType: receiver.getStaticType(_staticTypeContext!));
   }
 
   @override
@@ -80,7 +83,7 @@
 
   /// Returns [true] if the given [member] has any parameters annotated with
   /// generic-covariant-impl attribute.
-  static bool hasGenericCovariantParameters(Member member) {
+  static bool hasGenericCovariantParameters(Member? member) {
     if (member is Procedure) {
       return containsGenericCovariantImpl(
               member.function.positionalParameters) ||
diff --git a/pkg/vm/lib/transformations/ffi.dart b/pkg/vm/lib/transformations/ffi.dart
index 3012c7a..f4bc7eb 100644
--- a/pkg/vm/lib/transformations/ffi.dart
+++ b/pkg/vm/lib/transformations/ffi.dart
@@ -2,6 +2,8 @@
 // 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.12
+
 // This file contains logic which is shared between the ffi_definition and
 // ffi_use_site transformers.
 
@@ -195,7 +197,7 @@
   final LibraryIndex index;
   final ClassHierarchy hierarchy;
   final DiagnosticReporter diagnosticReporter;
-  final ReferenceFromIndex referenceFromIndex;
+  final ReferenceFromIndex? referenceFromIndex;
 
   final Class objectClass;
   final Class intClass;
@@ -288,8 +290,8 @@
   /// Classes corresponding to [NativeType], indexed by [NativeType].
   final List<Class> nativeTypesClasses;
 
-  Library currentLibrary;
-  IndexedLibrary currentLibraryIndex;
+  Library? currentLibrary;
+  IndexedLibrary? currentLibraryIndex;
 
   FfiTransformer(this.index, this.coreTypes, this.hierarchy,
       this.diagnosticReporter, this.referenceFromIndex)
@@ -300,23 +302,25 @@
         listClass = coreTypes.listClass,
         typeClass = coreTypes.typeClass,
         unsafeCastMethod =
-            index.getTopLevelMember('dart:_internal', 'unsafeCast'),
+            index.getTopLevelProcedure('dart:_internal', 'unsafeCast'),
         nativeEffectMethod =
-            index.getTopLevelMember('dart:_internal', '_nativeEffect'),
+            index.getTopLevelProcedure('dart:_internal', '_nativeEffect'),
         typedDataClass = index.getClass('dart:typed_data', 'TypedData'),
         typedDataBufferGetter =
-            index.getMember('dart:typed_data', 'TypedData', 'get:buffer'),
-        typedDataOffsetInBytesGetter = index.getMember(
+            index.getProcedure('dart:typed_data', 'TypedData', 'get:buffer'),
+        typedDataOffsetInBytesGetter = index.getProcedure(
             'dart:typed_data', 'TypedData', 'get:offsetInBytes'),
         byteBufferAsUint8List =
-            index.getMember('dart:typed_data', 'ByteBuffer', 'asUint8List'),
-        uint8ListFactory = index.getMember('dart:typed_data', 'Uint8List', ''),
+            index.getProcedure('dart:typed_data', 'ByteBuffer', 'asUint8List'),
+        uint8ListFactory =
+            index.getProcedure('dart:typed_data', 'Uint8List', ''),
         pragmaClass = coreTypes.pragmaClass,
         pragmaName = coreTypes.pragmaName,
         pragmaOptions = coreTypes.pragmaOptions,
-        listElementAt = coreTypes.index.getMember('dart:core', 'List', '[]'),
-        numAddition = coreTypes.index.getMember('dart:core', 'num', '+'),
-        numMultiplication = coreTypes.index.getMember('dart:core', 'num', '*'),
+        listElementAt = coreTypes.index.getProcedure('dart:core', 'List', '[]'),
+        numAddition = coreTypes.index.getProcedure('dart:core', 'num', '+'),
+        numMultiplication =
+            coreTypes.index.getProcedure('dart:core', 'num', '*'),
         ffiLibrary = index.getLibrary('dart:ffi'),
         allocatorClass = index.getClass('dart:ffi', 'Allocator'),
         nativeFunctionClass = index.getClass('dart:ffi', 'NativeFunction'),
@@ -324,120 +328,128 @@
         arrayClass = index.getClass('dart:ffi', 'Array'),
         arraySizeClass = index.getClass('dart:ffi', '_ArraySize'),
         arraySizeDimension1Field =
-            index.getMember('dart:ffi', '_ArraySize', 'dimension1'),
+            index.getField('dart:ffi', '_ArraySize', 'dimension1'),
         arraySizeDimension2Field =
-            index.getMember('dart:ffi', '_ArraySize', 'dimension2'),
+            index.getField('dart:ffi', '_ArraySize', 'dimension2'),
         arraySizeDimension3Field =
-            index.getMember('dart:ffi', '_ArraySize', 'dimension3'),
+            index.getField('dart:ffi', '_ArraySize', 'dimension3'),
         arraySizeDimension4Field =
-            index.getMember('dart:ffi', '_ArraySize', 'dimension4'),
+            index.getField('dart:ffi', '_ArraySize', 'dimension4'),
         arraySizeDimension5Field =
-            index.getMember('dart:ffi', '_ArraySize', 'dimension5'),
+            index.getField('dart:ffi', '_ArraySize', 'dimension5'),
         arraySizeDimensionsField =
-            index.getMember('dart:ffi', '_ArraySize', 'dimensions'),
+            index.getField('dart:ffi', '_ArraySize', 'dimensions'),
         pointerClass = index.getClass('dart:ffi', 'Pointer'),
         compoundClass = index.getClass('dart:ffi', '_Compound'),
         structClass = index.getClass('dart:ffi', 'Struct'),
         unionClass = index.getClass('dart:ffi', 'Union'),
         ffiStructLayoutClass = index.getClass('dart:ffi', '_FfiStructLayout'),
         ffiStructLayoutTypesField =
-            index.getMember('dart:ffi', '_FfiStructLayout', 'fieldTypes'),
+            index.getField('dart:ffi', '_FfiStructLayout', 'fieldTypes'),
         ffiStructLayoutPackingField =
-            index.getMember('dart:ffi', '_FfiStructLayout', 'packing'),
+            index.getField('dart:ffi', '_FfiStructLayout', 'packing'),
         ffiInlineArrayClass = index.getClass('dart:ffi', '_FfiInlineArray'),
         ffiInlineArrayElementTypeField =
-            index.getMember('dart:ffi', '_FfiInlineArray', 'elementType'),
+            index.getField('dart:ffi', '_FfiInlineArray', 'elementType'),
         ffiInlineArrayLengthField =
-            index.getMember('dart:ffi', '_FfiInlineArray', 'length'),
+            index.getField('dart:ffi', '_FfiInlineArray', 'length'),
         packedClass = index.getClass('dart:ffi', 'Packed'),
         packedMemberAlignmentField =
-            index.getMember('dart:ffi', 'Packed', 'memberAlignment'),
-        allocateMethod = index.getMember('dart:ffi', 'AllocatorAlloc', 'call'),
+            index.getField('dart:ffi', 'Packed', 'memberAlignment'),
+        allocateMethod =
+            index.getProcedure('dart:ffi', 'AllocatorAlloc', 'call'),
         allocatorAllocateMethod =
-            index.getMember('dart:ffi', 'Allocator', 'allocate'),
-        castMethod = index.getMember('dart:ffi', 'Pointer', 'cast'),
-        offsetByMethod = index.getMember('dart:ffi', 'Pointer', '_offsetBy'),
-        elementAtMethod = index.getMember('dart:ffi', 'Pointer', 'elementAt'),
-        addressGetter = index.getMember('dart:ffi', 'Pointer', 'get:address'),
+            index.getProcedure('dart:ffi', 'Allocator', 'allocate'),
+        castMethod = index.getProcedure('dart:ffi', 'Pointer', 'cast'),
+        offsetByMethod = index.getProcedure('dart:ffi', 'Pointer', '_offsetBy'),
+        elementAtMethod =
+            index.getProcedure('dart:ffi', 'Pointer', 'elementAt'),
+        addressGetter =
+            index.getProcedure('dart:ffi', 'Pointer', 'get:address'),
         compoundTypedDataBaseField =
-            index.getMember('dart:ffi', '_Compound', '_typedDataBase'),
+            index.getField('dart:ffi', '_Compound', '_typedDataBase'),
         arrayTypedDataBaseField =
-            index.getMember('dart:ffi', 'Array', '_typedDataBase'),
-        arraySizeField = index.getMember('dart:ffi', 'Array', '_size'),
+            index.getField('dart:ffi', 'Array', '_typedDataBase'),
+        arraySizeField = index.getField('dart:ffi', 'Array', '_size'),
         arrayNestedDimensionsField =
-            index.getMember('dart:ffi', 'Array', '_nestedDimensions'),
-        arrayCheckIndex = index.getMember('dart:ffi', 'Array', '_checkIndex'),
+            index.getField('dart:ffi', 'Array', '_nestedDimensions'),
+        arrayCheckIndex =
+            index.getProcedure('dart:ffi', 'Array', '_checkIndex'),
         arrayNestedDimensionsFlattened =
-            index.getMember('dart:ffi', 'Array', '_nestedDimensionsFlattened'),
+            index.getField('dart:ffi', 'Array', '_nestedDimensionsFlattened'),
         arrayNestedDimensionsFirst =
-            index.getMember('dart:ffi', 'Array', '_nestedDimensionsFirst'),
+            index.getField('dart:ffi', 'Array', '_nestedDimensionsFirst'),
         arrayNestedDimensionsRest =
-            index.getMember('dart:ffi', 'Array', '_nestedDimensionsRest'),
+            index.getField('dart:ffi', 'Array', '_nestedDimensionsRest'),
         structFromTypedDataBase =
-            index.getMember('dart:ffi', 'Struct', '_fromTypedDataBase'),
+            index.getConstructor('dart:ffi', 'Struct', '_fromTypedDataBase'),
         unionFromTypedDataBase =
-            index.getMember('dart:ffi', 'Union', '_fromTypedDataBase'),
-        arrayConstructor = index.getMember('dart:ffi', 'Array', '_'),
+            index.getConstructor('dart:ffi', 'Union', '_fromTypedDataBase'),
+        arrayConstructor = index.getConstructor('dart:ffi', 'Array', '_'),
         fromAddressInternal =
-            index.getTopLevelMember('dart:ffi', '_fromAddress'),
+            index.getTopLevelProcedure('dart:ffi', '_fromAddress'),
         structPointerRef =
-            index.getMember('dart:ffi', 'StructPointer', 'get:ref'),
+            index.getProcedure('dart:ffi', 'StructPointer', 'get:ref'),
         structPointerElemAt =
-            index.getMember('dart:ffi', 'StructPointer', '[]'),
+            index.getProcedure('dart:ffi', 'StructPointer', '[]'),
         unionPointerRef =
-            index.getMember('dart:ffi', 'UnionPointer', 'get:ref'),
-        unionPointerElemAt = index.getMember('dart:ffi', 'UnionPointer', '[]'),
-        structArrayElemAt = index.getMember('dart:ffi', 'StructArray', '[]'),
-        unionArrayElemAt = index.getMember('dart:ffi', 'UnionArray', '[]'),
-        arrayArrayElemAt = index.getMember('dart:ffi', 'ArrayArray', '[]'),
-        arrayArrayAssignAt = index.getMember('dart:ffi', 'ArrayArray', '[]='),
-        asFunctionMethod =
-            index.getMember('dart:ffi', 'NativeFunctionPointer', 'asFunction'),
+            index.getProcedure('dart:ffi', 'UnionPointer', 'get:ref'),
+        unionPointerElemAt =
+            index.getProcedure('dart:ffi', 'UnionPointer', '[]'),
+        structArrayElemAt = index.getProcedure('dart:ffi', 'StructArray', '[]'),
+        unionArrayElemAt = index.getProcedure('dart:ffi', 'UnionArray', '[]'),
+        arrayArrayElemAt = index.getProcedure('dart:ffi', 'ArrayArray', '[]'),
+        arrayArrayAssignAt =
+            index.getProcedure('dart:ffi', 'ArrayArray', '[]='),
+        asFunctionMethod = index.getProcedure(
+            'dart:ffi', 'NativeFunctionPointer', 'asFunction'),
         asFunctionInternal =
-            index.getTopLevelMember('dart:ffi', '_asFunctionInternal'),
-        sizeOfMethod = index.getTopLevelMember('dart:ffi', 'sizeOf'),
-        lookupFunctionMethod = index.getMember(
+            index.getTopLevelProcedure('dart:ffi', '_asFunctionInternal'),
+        sizeOfMethod = index.getTopLevelProcedure('dart:ffi', 'sizeOf'),
+        lookupFunctionMethod = index.getProcedure(
             'dart:ffi', 'DynamicLibraryExtension', 'lookupFunction'),
         fromFunctionMethod =
-            index.getMember('dart:ffi', 'Pointer', 'fromFunction'),
+            index.getProcedure('dart:ffi', 'Pointer', 'fromFunction'),
         libraryLookupMethod =
-            index.getMember('dart:ffi', 'DynamicLibrary', 'lookup'),
-        abiMethod = index.getTopLevelMember('dart:ffi', '_abi'),
+            index.getProcedure('dart:ffi', 'DynamicLibrary', 'lookup'),
+        abiMethod = index.getTopLevelProcedure('dart:ffi', '_abi'),
         pointerFromFunctionProcedure =
-            index.getTopLevelMember('dart:ffi', '_pointerFromFunction'),
+            index.getTopLevelProcedure('dart:ffi', '_pointerFromFunction'),
         nativeCallbackFunctionProcedure =
-            index.getTopLevelMember('dart:ffi', '_nativeCallbackFunction'),
+            index.getTopLevelProcedure('dart:ffi', '_nativeCallbackFunction'),
         nativeTypesClasses = nativeTypeClassNames
             .map((name) => index.getClass('dart:ffi', name))
             .toList(),
         loadMethods = Map.fromIterable(optimizedTypes, value: (t) {
           final name = nativeTypeClassNames[t.index];
-          return index.getTopLevelMember('dart:ffi', "_load$name");
+          return index.getTopLevelProcedure('dart:ffi', "_load$name");
         }),
         loadUnalignedMethods =
             Map.fromIterable(unalignedLoadsStores, value: (t) {
           final name = nativeTypeClassNames[t.index];
-          return index.getTopLevelMember('dart:ffi', "_load${name}Unaligned");
+          return index.getTopLevelProcedure(
+              'dart:ffi', "_load${name}Unaligned");
         }),
         storeMethods = Map.fromIterable(optimizedTypes, value: (t) {
           final name = nativeTypeClassNames[t.index];
-          return index.getTopLevelMember('dart:ffi', "_store$name");
+          return index.getTopLevelProcedure('dart:ffi', "_store$name");
         }),
         storeUnalignedMethods =
             Map.fromIterable(unalignedLoadsStores, value: (t) {
           final name = nativeTypeClassNames[t.index];
-          return index.getTopLevelMember('dart:ffi', "_store${name}Unaligned");
+          return index.getTopLevelProcedure(
+              'dart:ffi', "_store${name}Unaligned");
         }),
         elementAtMethods = Map.fromIterable(optimizedTypes, value: (t) {
           final name = nativeTypeClassNames[t.index];
-          return index.getTopLevelMember('dart:ffi', "_elementAt$name");
+          return index.getTopLevelProcedure('dart:ffi', "_elementAt$name");
         }),
-        memCopy = index.getTopLevelMember('dart:ffi', '_memCopy'),
-        allocationTearoff = index.getMember(
+        memCopy = index.getTopLevelProcedure('dart:ffi', '_memCopy'),
+        allocationTearoff = index.getProcedure(
             'dart:ffi', 'AllocatorAlloc', LibraryIndex.tearoffPrefix + 'call'),
-        asFunctionTearoff = index.getMember('dart:ffi', 'NativeFunctionPointer',
-            LibraryIndex.tearoffPrefix + 'asFunction'),
-        lookupFunctionTearoff = index.getMember(
+        asFunctionTearoff = index.getProcedure('dart:ffi',
+            'NativeFunctionPointer', LibraryIndex.tearoffPrefix + 'asFunction'),
+        lookupFunctionTearoff = index.getProcedure(
             'dart:ffi',
             'DynamicLibraryExtension',
             LibraryIndex.tearoffPrefix + 'lookupFunction');
@@ -472,7 +484,7 @@
   /// [Handle]                             -> [Object]
   /// [NativeFunction]<T1 Function(T2, T3) -> S1 Function(S2, S3)
   ///    where DartRepresentationOf(Tn) -> Sn
-  DartType convertNativeTypeToDartType(DartType nativeType,
+  DartType? convertNativeTypeToDartType(DartType nativeType,
       {bool allowCompounds = false,
       bool allowHandle = false,
       bool allowInlineArray = false}) {
@@ -481,7 +493,7 @@
     }
     final InterfaceType native = nativeType;
     final Class nativeClass = native.classNode;
-    final NativeType nativeType_ = getType(nativeClass);
+    final NativeType? nativeType_ = getType(nativeClass);
 
     if (nativeClass == arrayClass) {
       if (!allowInlineArray) {
@@ -519,27 +531,29 @@
       return null;
     }
 
-    final FunctionType fun = native.typeArguments[0];
+    final FunctionType fun = native.typeArguments[0] as FunctionType;
     if (fun.namedParameters.isNotEmpty) return null;
     if (fun.positionalParameters.length != fun.requiredParameterCount) {
       return null;
     }
     if (fun.typeParameters.length != 0) return null;
 
-    final DartType returnType = convertNativeTypeToDartType(fun.returnType,
+    final DartType? returnType = convertNativeTypeToDartType(fun.returnType,
         allowCompounds: true, allowHandle: true);
     if (returnType == null) return null;
     final List<DartType> argumentTypes = fun.positionalParameters
-        .map((t) => convertNativeTypeToDartType(t,
-            allowCompounds: true, allowHandle: true))
+        .map((t) =>
+            convertNativeTypeToDartType(t,
+                allowCompounds: true, allowHandle: true) ??
+            dummyDartType)
         .toList();
-    if (argumentTypes.contains(null)) return null;
+    if (argumentTypes.contains(dummyDartType)) return null;
     return FunctionType(argumentTypes, returnType, Nullability.legacy);
   }
 
   /// The [NativeType] corresponding to [c]. Returns `null` for user-defined
   /// structs.
-  NativeType getType(Class c) {
+  NativeType? getType(Class c) {
     final int index = nativeTypesClasses.indexOf(c);
     if (index == -1) {
       return null;
@@ -559,9 +573,9 @@
   Expression runtimeBranchOnLayout(Map<Abi, int> values) {
     return MethodInvocation(
         intListConstantExpression([
-          values[Abi.wordSize64],
-          values[Abi.wordSize32Align32],
-          values[Abi.wordSize32Align64]
+          values[Abi.wordSize64]!,
+          values[Abi.wordSize32Align32]!,
+          values[Abi.wordSize32Align64]!
         ]),
         Name("[]"),
         Arguments([StaticInvocation(abiMethod, Arguments([]))]),
diff --git a/pkg/vm/lib/transformations/late_var_init_transformer.dart b/pkg/vm/lib/transformations/late_var_init_transformer.dart
index 4acb7e4..88d8a25 100644
--- a/pkg/vm/lib/transformations/late_var_init_transformer.dart
+++ b/pkg/vm/lib/transformations/late_var_init_transformer.dart
@@ -2,6 +2,8 @@
 // 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.12
+
 import 'package:kernel/ast.dart';
 
 /// Wraps the initializers of late local variables in closures.
@@ -18,7 +20,7 @@
 
       // Variables with no initializer or a trivial initializer are ignored.
       if (s.initializer == null) return false;
-      final Expression init = s.initializer;
+      final Expression? init = s.initializer;
       if (init is StringLiteral) return false;
       if (init is BoolLiteral) return false;
       if (init is IntLiteral) return false;
@@ -47,12 +49,13 @@
     return [fn, node];
   }
 
-  List<Statement> _transformStatements(List<Statement> statements) {
+  List<Statement>? _transformStatements(List<Statement> statements) {
     if (!statements.any((s) => _shouldApplyTransform(s))) return null;
     final List<Statement> newStatements = <Statement>[];
     for (Statement s in statements) {
       if (_shouldApplyTransform(s)) {
-        newStatements.addAll(_transformVariableDeclaration(s));
+        newStatements
+            .addAll(_transformVariableDeclaration(s as VariableDeclaration));
       } else {
         newStatements.add(s);
       }
diff --git a/pkg/vm/lib/transformations/specializer/factory_specializer.dart b/pkg/vm/lib/transformations/specializer/factory_specializer.dart
index 02a3cfe..7475638 100644
--- a/pkg/vm/lib/transformations/specializer/factory_specializer.dart
+++ b/pkg/vm/lib/transformations/specializer/factory_specializer.dart
@@ -2,6 +2,8 @@
 // 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.12
+
 library vm.transformations.specializer.factory_specializer;
 
 import 'package:kernel/kernel.dart';
@@ -33,6 +35,7 @@
 
   TreeNode transformStaticInvocation(StaticInvocation invocation) {
     final target = invocation.target;
+    // ignore: unnecessary_null_comparison
     if (target == null) {
       return invocation;
     }
diff --git a/pkg/vm/lib/transformations/specializer/list_factory_specializer.dart b/pkg/vm/lib/transformations/specializer/list_factory_specializer.dart
index 672d618..248c192 100644
--- a/pkg/vm/lib/transformations/specializer/list_factory_specializer.dart
+++ b/pkg/vm/lib/transformations/specializer/list_factory_specializer.dart
@@ -2,6 +2,8 @@
 // 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.12
+
 library vm.transformations.specializer.list_factory_specializer;
 
 import 'package:kernel/ast.dart';
@@ -39,28 +41,29 @@
 
   ListFactorySpecializer(CoreTypes coreTypes)
       : _defaultListFactory =
-            coreTypes.index.getMember('dart:core', 'List', ''),
+            coreTypes.index.getProcedure('dart:core', 'List', ''),
         _listEmptyFactory =
-            coreTypes.index.getMember('dart:core', 'List', 'empty'),
+            coreTypes.index.getProcedure('dart:core', 'List', 'empty'),
         _listFilledFactory =
-            coreTypes.index.getMember('dart:core', 'List', 'filled'),
+            coreTypes.index.getProcedure('dart:core', 'List', 'filled'),
         _listGenerateFactory =
-            coreTypes.index.getMember('dart:core', 'List', 'generate'),
+            coreTypes.index.getProcedure('dart:core', 'List', 'generate'),
         _growableListFactory =
-            coreTypes.index.getMember('dart:core', '_GrowableList', ''),
+            coreTypes.index.getProcedure('dart:core', '_GrowableList', ''),
         _growableListEmptyFactory =
-            coreTypes.index.getMember('dart:core', '_GrowableList', 'empty'),
-        _growableListFilledFactory =
-            coreTypes.index.getMember('dart:core', '_GrowableList', 'filled'),
-        _growableListGenerateFactory =
-            coreTypes.index.getMember('dart:core', '_GrowableList', 'generate'),
-        _fixedListFactory = coreTypes.index.getMember('dart:core', '_List', ''),
+            coreTypes.index.getProcedure('dart:core', '_GrowableList', 'empty'),
+        _growableListFilledFactory = coreTypes.index
+            .getProcedure('dart:core', '_GrowableList', 'filled'),
+        _growableListGenerateFactory = coreTypes.index
+            .getProcedure('dart:core', '_GrowableList', 'generate'),
+        _fixedListFactory =
+            coreTypes.index.getProcedure('dart:core', '_List', ''),
         _fixedListEmptyFactory =
-            coreTypes.index.getMember('dart:core', '_List', 'empty'),
+            coreTypes.index.getProcedure('dart:core', '_List', 'empty'),
         _fixedListFilledFactory =
-            coreTypes.index.getMember('dart:core', '_List', 'filled'),
+            coreTypes.index.getProcedure('dart:core', '_List', 'filled'),
         _fixedListGenerateFactory =
-            coreTypes.index.getMember('dart:core', '_List', 'generate') {
+            coreTypes.index.getProcedure('dart:core', '_List', 'generate') {
     assert(_defaultListFactory.isFactory);
     assert(_listEmptyFactory.isFactory);
     assert(_listFilledFactory.isFactory);
@@ -96,7 +99,8 @@
   TreeNode transformListEmptyFactory(StaticInvocation node) {
     final args = node.arguments;
     assert(args.positional.length == 0);
-    final bool growable = _getConstantOptionalArgument(args, 'growable', false);
+    final bool? growable =
+        _getConstantOptionalArgument(args, 'growable', false);
     if (growable == null) {
       return node;
     }
@@ -118,7 +122,8 @@
     final fill = args.positional[1];
     final fillingWithNull = fill is NullLiteral ||
         (fill is ConstantExpression && fill.constant is NullConstant);
-    final bool growable = _getConstantOptionalArgument(args, 'growable', false);
+    final bool? growable =
+        _getConstantOptionalArgument(args, 'growable', false);
     if (growable == null) {
       return node;
     }
@@ -150,7 +155,7 @@
     assert(args.positional.length == 2);
     final length = args.positional[0];
     final generator = args.positional[1];
-    final bool growable = _getConstantOptionalArgument(args, 'growable', true);
+    final bool? growable = _getConstantOptionalArgument(args, 'growable', true);
     if (growable == null) {
       return node;
     }
@@ -168,7 +173,7 @@
   /// Returns constant value of the only optional argument in [args],
   /// or null if it is not a constant. Returns [defaultValue] if optional
   /// argument is not passed. Argument is asserted to have the given [name].
-  bool /*?*/ _getConstantOptionalArgument(
+  bool? _getConstantOptionalArgument(
       Arguments args, String name, bool defaultValue) {
     if (args.named.isEmpty) {
       return defaultValue;
diff --git a/pkg/vm/lib/transformations/specializer/map_factory_specializer.dart b/pkg/vm/lib/transformations/specializer/map_factory_specializer.dart
index 5779807..8a01984 100644
--- a/pkg/vm/lib/transformations/specializer/map_factory_specializer.dart
+++ b/pkg/vm/lib/transformations/specializer/map_factory_specializer.dart
@@ -2,6 +2,8 @@
 // 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.12
+
 library vm.transformations.specializer.map_factory_specializer;
 
 import 'package:kernel/ast.dart';
@@ -19,14 +21,14 @@
 
   MapFactorySpecializer(CoreTypes coreTypes)
       : _linkedHashMapDefaultFactory = assertNotNull(
-          coreTypes.index.getMember(
+          coreTypes.index.getProcedure(
             'dart:collection',
             'LinkedHashMap',
             '',
           ),
         ),
         _internalLinkedHashMapConstructor = assertNotNull(
-          coreTypes.index.getMember(
+          coreTypes.index.getConstructor(
             'dart:collection',
             '_InternalLinkedHashMap',
             '',
diff --git a/pkg/vm/lib/transformations/specializer/set_factory_specializer.dart b/pkg/vm/lib/transformations/specializer/set_factory_specializer.dart
index 0e6a855..a508435 100644
--- a/pkg/vm/lib/transformations/specializer/set_factory_specializer.dart
+++ b/pkg/vm/lib/transformations/specializer/set_factory_specializer.dart
@@ -2,6 +2,8 @@
 // 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.12
+
 library vm.transformations.specializer.set_factory_specializer;
 
 import 'package:kernel/ast.dart';
@@ -19,14 +21,14 @@
 
   SetFactorySpecializer(CoreTypes coreTypes)
       : _linkedHashSetDefaultFactory = assertNotNull(
-          coreTypes.index.getMember(
+          coreTypes.index.getProcedure(
             'dart:collection',
             'LinkedHashSet',
             '',
           ),
         ),
         _compactLinkedHashSetConstructor = assertNotNull(
-          coreTypes.index.getMember(
+          coreTypes.index.getConstructor(
             'dart:collection',
             '_CompactLinkedHashSet',
             '',
