Version 1.23.0-dev.4.0

Merge 005453346eeb178d888cd858e1a5d5584c143642 into dev
diff --git a/pkg/analysis_server/lib/src/analysis_server.dart b/pkg/analysis_server/lib/src/analysis_server.dart
index 1ed2a48..7f6e898 100644
--- a/pkg/analysis_server/lib/src/analysis_server.dart
+++ b/pkg/analysis_server/lib/src/analysis_server.dart
@@ -1864,14 +1864,18 @@
       NotificationManager notificationManager =
           analysisServer.notificationManager;
       String path = result.path;
-      if (notificationManager != null) {
-        notificationManager.recordAnalysisErrors(
-            NotificationManager.serverId,
-            path,
-            server.doAnalysisError_listFromEngine(
-                result.driver.analysisOptions, result.lineInfo, result.errors));
-      } else {
-        new_sendErrorNotification(analysisServer, result);
+      if (analysisServer.shouldSendErrorsNotificationFor(path)) {
+        if (notificationManager != null) {
+          notificationManager.recordAnalysisErrors(
+              NotificationManager.serverId,
+              path,
+              server.doAnalysisError_listFromEngine(
+                  result.driver.analysisOptions,
+                  result.lineInfo,
+                  result.errors));
+        } else {
+          new_sendErrorNotification(analysisServer, result);
+        }
       }
       CompilationUnit unit = result.unit;
       if (unit != null) {
diff --git a/pkg/analyzer/lib/src/dart/ast/ast.dart b/pkg/analyzer/lib/src/dart/ast/ast.dart
index 0a364cf..398fa65 100644
--- a/pkg/analyzer/lib/src/dart/ast/ast.dart
+++ b/pkg/analyzer/lib/src/dart/ast/ast.dart
@@ -5831,8 +5831,9 @@
     ..add(_typeParameters)
     ..add(equals)
     ..add(_functionType);
+
   @override
-  Element get element => null;
+  Element get element => name.staticElement;
 
   @override
   GenericFunctionType get functionType => _functionType;
@@ -5855,7 +5856,6 @@
     return visitor.visitGenericTypeAlias(this);
   }
 
-  // TODO: implement element
   @override
   void visitChildren(AstVisitor visitor) {
     super.visitChildren(visitor);
@@ -9239,6 +9239,9 @@
    */
   TypeAnnotation _type;
 
+  @override
+  ParameterElement element;
+
   /**
    * Initialize a newly created formal parameter. Either or both of the
    * [comment] and [metadata] can be `null` if the parameter does not have the
@@ -9276,7 +9279,7 @@
       super._childEntities..add(keyword)..add(_type)..add(identifier);
 
   @override
-  Token get endToken => identifier.endToken;
+  Token get endToken => identifier?.endToken ?? type?.endToken;
 
   @override
   bool get isConst => keyword?.keyword == Keyword.CONST;
diff --git a/pkg/analyzer/lib/src/dart/ast/utilities.dart b/pkg/analyzer/lib/src/dart/ast/utilities.dart
index 920e585..8090044 100644
--- a/pkg/analyzer/lib/src/dart/ast/utilities.dart
+++ b/pkg/analyzer/lib/src/dart/ast/utilities.dart
@@ -6428,12 +6428,16 @@
   @override
   bool visitSimpleFormalParameter(SimpleFormalParameter node) {
     SimpleFormalParameter toNode = this._toNode as SimpleFormalParameter;
-    return _and(
+    if (_and(
         _isEqualNodes(node.documentationComment, toNode.documentationComment),
         _isEqualNodeLists(node.metadata, toNode.metadata),
         _isEqualTokens(node.keyword, toNode.keyword),
         _isEqualNodes(node.type, toNode.type),
-        _isEqualNodes(node.identifier, toNode.identifier));
+        _isEqualNodes(node.identifier, toNode.identifier))) {
+      (toNode as SimpleFormalParameterImpl).element = node.element;
+      return true;
+    }
+    return false;
   }
 
   @override
diff --git a/pkg/analyzer/lib/src/dart/element/builder.dart b/pkg/analyzer/lib/src/dart/element/builder.dart
index 3524404..cea4664 100644
--- a/pkg/analyzer/lib/src/dart/element/builder.dart
+++ b/pkg/analyzer/lib/src/dart/element/builder.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/error.dart';
 import 'package:analyzer/exception/exception.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
 import 'package:analyzer/src/error/codes.dart';
@@ -1405,6 +1406,9 @@
       parameter.hasImplicitType = true;
     }
     _currentHolder.addParameter(parameter);
+    if (normalParameter is SimpleFormalParameterImpl) {
+      normalParameter.element = parameter;
+    }
     parameterName.staticElement = parameter;
     normalParameter.accept(this);
     return null;
@@ -1441,10 +1445,10 @@
 
   @override
   Object visitSimpleFormalParameter(SimpleFormalParameter node) {
+    ParameterElementImpl parameter;
     if (node.parent is! DefaultFormalParameter) {
       SimpleIdentifier parameterName = node.identifier;
-      ParameterElementImpl parameter =
-          new ParameterElementImpl.forNode(parameterName);
+      parameter = new ParameterElementImpl.forNode(parameterName);
       _setCodeRange(parameter, node);
       parameter.isConst = node.isConst;
       parameter.isExplicitlyCovariant = node.covariantKeyword != null;
@@ -1455,11 +1459,12 @@
         parameter.hasImplicitType = true;
       }
       _currentHolder.addParameter(parameter);
-      parameterName.staticElement = parameter;
+      (node as SimpleFormalParameterImpl).element = parameter;
+      parameterName?.staticElement = parameter;
     }
     super.visitSimpleFormalParameter(node);
-    (node.element as ElementImpl).metadata =
-        _createElementAnnotations(node.metadata);
+    parameter ??= node.element;
+    parameter?.metadata = _createElementAnnotations(node.metadata);
     return null;
   }
 
diff --git a/pkg/analyzer/lib/src/generated/declaration_resolver.dart b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
index f87f5f6..333fdef 100644
--- a/pkg/analyzer/lib/src/generated/declaration_resolver.dart
+++ b/pkg/analyzer/lib/src/generated/declaration_resolver.dart
@@ -9,6 +9,7 @@
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/exception/exception.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/builder.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -122,8 +123,12 @@
 
   @override
   Object visitDefaultFormalParameter(DefaultFormalParameter node) {
+    NormalFormalParameter normalParameter = node.parameter;
     ParameterElement element =
-        _match(node.parameter.identifier, _walker.getParameter());
+        _match(normalParameter.identifier, _walker.getParameter());
+    if (normalParameter is SimpleFormalParameterImpl) {
+      normalParameter.element = node.identifier.staticElement;
+    }
     Expression defaultValue = node.defaultValue;
     if (defaultValue != null) {
       _walk(
@@ -133,7 +138,7 @@
       });
     }
     _walk(new ElementWalker.forParameter(element), () {
-      node.parameter.accept(this);
+      normalParameter.accept(this);
     });
     _resolveMetadata(node, node.metadata, element);
     return null;
@@ -365,6 +370,8 @@
     if (node.parent is! DefaultFormalParameter) {
       ParameterElement element =
           _match(node.identifier, _walker.getParameter());
+      (node as SimpleFormalParameterImpl).element =
+          node.identifier.staticElement;
       _walk(new ElementWalker.forParameter(element), () {
         super.visitSimpleFormalParameter(node);
       });
diff --git a/pkg/analyzer/lib/src/generated/resolver.dart b/pkg/analyzer/lib/src/generated/resolver.dart
index 291f075..95c01cb 100644
--- a/pkg/analyzer/lib/src/generated/resolver.dart
+++ b/pkg/analyzer/lib/src/generated/resolver.dart
@@ -10076,7 +10076,7 @@
     } else {
       declaredType = _typeNameResolver._getType(typeName);
     }
-    Element element = node.identifier.staticElement;
+    Element element = node.element;
     if (element is ParameterElementImpl) {
       element.declaredType = declaredType;
     } else {
diff --git a/pkg/analyzer/test/generated/resolver_test.dart b/pkg/analyzer/test/generated/resolver_test.dart
index 8d21db67..5ce754c 100644
--- a/pkg/analyzer/test/generated/resolver_test.dart
+++ b/pkg/analyzer/test/generated/resolver_test.dart
@@ -15,6 +15,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/file_system/memory_file_system.dart';
+import 'package:analyzer/src/dart/ast/ast.dart';
 import 'package:analyzer/src/dart/element/builder.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
@@ -3202,9 +3203,9 @@
     InterfaceType intType = _typeProvider.intType;
     TypeName intTypeName = AstTestFactory.typeName4("int");
     String innerParameterName = "a";
-    SimpleFormalParameter parameter =
+    SimpleFormalParameterImpl parameter =
         AstTestFactory.simpleFormalParameter3(innerParameterName);
-    parameter.identifier.staticElement =
+    parameter.element = parameter.identifier.staticElement =
         ElementFactory.requiredParameter(innerParameterName);
     String outerParameterName = "p";
     FormalParameter node = AstTestFactory.fieldFormalParameter(
@@ -3415,8 +3416,8 @@
 
   test_visitSimpleFormalParameter_noType() async {
     // p
-    FormalParameter node = AstTestFactory.simpleFormalParameter3("p");
-    node.identifier.staticElement =
+    SimpleFormalParameterImpl node = AstTestFactory.simpleFormalParameter3("p");
+    node.element = node.identifier.staticElement =
         new ParameterElementImpl.forNode(AstTestFactory.identifier3("p"));
     expect(_resolveFormalParameter(node), same(_typeProvider.dynamicType));
     _listener.assertNoErrors();
@@ -3426,11 +3427,11 @@
     // int p
     InterfaceType intType = _typeProvider.intType;
     ClassElement intElement = intType.element;
-    FormalParameter node = AstTestFactory.simpleFormalParameter4(
+    SimpleFormalParameterImpl node = AstTestFactory.simpleFormalParameter4(
         AstTestFactory.typeName(intElement), "p");
     SimpleIdentifier identifier = node.identifier;
     ParameterElementImpl element = new ParameterElementImpl.forNode(identifier);
-    identifier.staticElement = element;
+    node.element = identifier.staticElement = element;
     expect(_resolveFormalParameter(node, [intElement]), same(intType));
     _listener.assertNoErrors();
   }
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
new file mode 100644
index 0000000..f995195
--- /dev/null
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -0,0 +1,749 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// 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.
+
+import 'dart:io';
+
+import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/token.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/generated/source.dart';
+import 'package:analyzer/src/generated/utilities_dart.dart';
+import 'package:test/test.dart';
+
+/**
+ * Set this path to automatically replace expectations in invocations of
+ * [checkElementText] with the new actual texts.
+ */
+const String _testPath = null;
+
+/**
+ * The list of replacements that update expectations.
+ */
+final List<_Replacement> _replacements = [];
+
+/**
+ * The cached content of the file with the [_testPath].
+ */
+String _testCode;
+
+/**
+ * The cache line information for the [_testPath] file.
+ */
+LineInfo _testCodeLines;
+
+void applyCheckElementTextReplacements() {
+  if (_testPath != null && _replacements.isNotEmpty) {
+    _replacements.sort((a, b) => b.offset - a.offset);
+    String newCode = _testCode;
+    _replacements.forEach((r) {
+      newCode =
+          newCode.substring(0, r.offset) + r.text + newCode.substring(r.end);
+    });
+    new File(_testPath).writeAsStringSync(newCode);
+  }
+}
+
+/**
+ * Write the given [library] elements into the canonical text presentation
+ * taking into account the specified 'withX' options. Then compare the
+ * actual text with the given [expected] one.
+ */
+void checkElementText(LibraryElement library, String expected,
+    {bool withOffsets: false}) {
+  var writer = new _ElementWriter(withOffsets: withOffsets);
+  writer.writeLibraryElement(library);
+  String actualText = writer.buffer.toString();
+  if (_testPath != null && actualText != expected) {
+    if (_testCode == null) {
+      _testCode = new File(_testPath).readAsStringSync();
+      _testCodeLines = new LineInfo.fromContent(_testCode);
+    }
+
+    try {
+      throw 42;
+    } catch (e, trace) {
+      String traceString = trace.toString();
+
+      // Assuming traceString contains "$_testPath:$invocationLine:$column",
+      // figure out the value of invocationLine.
+
+      int testFilePathOffset = traceString.indexOf(_testPath);
+      expect(testFilePathOffset, isNonNegative);
+
+      // Sanity check: there must be ':' after the path.
+      expect(traceString[testFilePathOffset + _testPath.length], ':');
+
+      int lineOffset = testFilePathOffset + _testPath.length + ':'.length;
+      int invocationLine = int.parse(traceString.substring(
+          lineOffset, traceString.indexOf(':', lineOffset)));
+      int invocationOffset = _testCodeLines.getOffsetOfLine(invocationLine - 1);
+
+      const String rawStringPrefix = "r'''";
+      int expectationOffset =
+          _testCode.indexOf(rawStringPrefix, invocationOffset);
+
+      // Sanity check: there must be no other strings or blocks.
+      expect(_testCode.substring(invocationOffset, expectationOffset),
+          isNot(anyOf(contains("'"), contains('"'), contains('}'))));
+
+      expectationOffset += rawStringPrefix.length;
+      int expectationEnd = _testCode.indexOf("'''", expectationOffset);
+
+      _replacements.add(new _Replacement(
+          expectationOffset, expectationEnd, '\n' + actualText));
+    }
+  }
+
+  // Print the actual text to simplify copy/paste into the expectation.
+  if (actualText != expected) {
+    print('-------- Actual --------');
+    print(actualText + '------------------------');
+  }
+
+  expect(actualText, expected);
+}
+
+/**
+ * Writes the canonical text presentation of elements.
+ */
+class _ElementWriter {
+  final bool withOffsets;
+  final StringBuffer buffer = new StringBuffer();
+
+  _ElementWriter({this.withOffsets: false});
+
+  bool isDynamicType(DartType type) => type is DynamicTypeImpl;
+
+  bool isEnumElement(Element e) {
+    return e is ClassElement && e.isEnum;
+  }
+
+  void newLineIfNotEmpty() {
+    if (buffer.isNotEmpty) {
+      buffer.writeln();
+    }
+  }
+
+  void writeBodyModifiers(ExecutableElement e) {
+    if (e.isAsynchronous) {
+      expect(e.isSynchronous, isFalse);
+      buffer.write(' async');
+    }
+
+    if (e.isSynchronous && e.isGenerator) {
+      expect(e.isAsynchronous, isFalse);
+      buffer.write(' sync');
+    }
+
+    writeIf(e.isGenerator, '*');
+  }
+
+  void writeClassElement(ClassElement e) {
+    writeDocumentation(e);
+    writeMetadata(e, '', '\n');
+
+    writeIf(e.isAbstract, 'abstract ');
+
+    if (e.isEnum) {
+      buffer.write('enum ');
+    } else {
+      buffer.write('class ');
+    }
+
+    writeIf(e.isMixinApplication, 'alias ');
+
+    writeName(e);
+    writeTypeParameterElements(e.typeParameters);
+
+    if (e.supertype != null && e.supertype.displayName != 'Object' ||
+        e.mixins.isNotEmpty) {
+      buffer.write(' extends ');
+      writeType(e.supertype);
+    }
+
+    writeList(' with ', '', e.mixins, ', ', writeType);
+    writeList(' implements ', '', e.interfaces, ', ', writeType);
+
+    buffer.writeln(' {');
+
+    e.fields.forEach(writeFieldElement);
+    e.accessors.forEach(writePropertyAccessorElement);
+
+    if (e.isEnum) {
+      expect(e.constructors, isEmpty);
+    } else {
+      expect(e.constructors, isNotEmpty);
+    }
+
+    if (e.constructors.length == 1 &&
+        e.constructors[0].isSynthetic &&
+        e.mixins.isEmpty) {
+      expect(e.constructors[0].parameters, isEmpty);
+    } else {
+      e.constructors.forEach(writeConstructorElement);
+    }
+
+    e.methods.forEach(writeMethodElement);
+    buffer.writeln('}');
+  }
+
+  void writeConstructorElement(ConstructorElement e) {
+    writeDocumentation(e, '  ');
+    writeMetadata(e, '  ', '\n');
+
+    buffer.write('  ');
+
+    writeIf(e.isSynthetic, 'synthetic ');
+    writeIf(e.isExternal, 'external ');
+    writeIf(e.isConst, 'const ');
+    writeIf(e.isFactory, 'factory ');
+
+    buffer.write(e.enclosingElement.name);
+    if (e.name.isNotEmpty) {
+      buffer.write('.');
+      writeName(e);
+    }
+
+    writeParameterElements(e.parameters);
+
+    {
+      ConstructorElement redirected = e.redirectedConstructor;
+      if (redirected != null) {
+        buffer.write(' = ');
+        buffer.write(redirected.returnType);
+        if (redirected.name.isNotEmpty) {
+          buffer.write('.');
+          buffer.write(redirected.name);
+        }
+      }
+    }
+
+    if (e is ConstructorElementImpl) {
+      if (e.constantInitializers != null) {
+        writeList(' : ', '', e.constantInitializers, ', ', writeExpression);
+      }
+    }
+
+    expect(e.isAsynchronous, isFalse);
+    expect(e.isGenerator, isFalse);
+
+    buffer.writeln(';');
+  }
+
+  void writeDocumentation(Element e, [String prefix = '']) {
+    if (e.documentationComment != null) {
+      buffer.write(prefix);
+      buffer.writeln(e.documentationComment);
+    }
+  }
+
+  void writeExportElement(ExportElement e) {
+    writeMetadata(e, '', '\n');
+    buffer.write('export ');
+    writeUri(e, e.exportedLibrary.source);
+
+    e.combinators.forEach(writeNamespaceCombinator);
+
+    buffer.writeln(';');
+  }
+
+  void writeExpression(AstNode e) {
+    if (e is Annotation) {
+      buffer.write('@');
+      writeExpression(e.name);
+      if (e.constructorName != null) {
+        buffer.write('.');
+        writeExpression(e.constructorName);
+      }
+      if (e.arguments != null) {
+        writeList('(', ')', e.arguments.arguments, ', ', writeExpression,
+            includeEmpty: true);
+      }
+    } else if (e is AssertInitializer) {
+      buffer.write('assert(');
+      writeExpression(e.condition);
+      if (e.message != null) {
+        buffer.write(', ');
+        writeExpression(e.message);
+      }
+      buffer.write(')');
+    } else if (e is BinaryExpression) {
+      writeExpression(e.leftOperand);
+      buffer.write(' ');
+      buffer.write(e.operator.lexeme);
+      buffer.write(' ');
+      writeExpression(e.rightOperand);
+    } else if (e is BooleanLiteral) {
+      buffer.write(e.value);
+    } else if (e is ConditionalExpression) {
+      writeExpression(e.condition);
+      buffer.write(' ? ');
+      writeExpression(e.thenExpression);
+      buffer.write(' : ');
+      writeExpression(e.elseExpression);
+    } else if (e is ConstructorFieldInitializer) {
+      writeExpression(e.fieldName);
+      buffer.write(' = ');
+      writeExpression(e.expression);
+    } else if (e is ConstructorName) {
+      writeExpression(e.type);
+      if (e.name != null) {
+        buffer.write('.');
+        writeExpression(e.name);
+      }
+    } else if (e is DoubleLiteral) {
+      buffer.write(e.value);
+    } else if (e is InstanceCreationExpression) {
+      buffer.write(e.keyword.lexeme);
+      buffer.write(' ');
+      writeExpression(e.constructorName);
+      writeList('(', ')', e.argumentList.arguments, ', ', writeExpression,
+          includeEmpty: true);
+    } else if (e is IntegerLiteral) {
+      buffer.write(e.value);
+    } else if (e is InterpolationExpression) {
+      buffer.write(r'${');
+      writeExpression(e.expression);
+      buffer.write(r'}');
+    } else if (e is InterpolationString) {
+      buffer.write(e.value.replaceAll("'", r"\'"));
+    } else if (e is ListLiteral) {
+      if (e.constKeyword != null) {
+        buffer.write('const ');
+      }
+      if (e.typeArguments != null) {
+        writeList('<', '>', e.typeArguments.arguments, ', ', writeExpression);
+      }
+      writeList('[', ']', e.elements, ', ', writeExpression,
+          includeEmpty: true);
+    } else if (e is Label) {
+      writeExpression(e.label);
+      buffer.write(': ');
+    } else if (e is MapLiteral) {
+      if (e.constKeyword != null) {
+        buffer.write('const ');
+      }
+      if (e.typeArguments != null) {
+        writeList('<', '>', e.typeArguments.arguments, ', ', writeExpression);
+      }
+      writeList('{', '}', e.entries, ', ', writeExpression, includeEmpty: true);
+    } else if (e is MapLiteralEntry) {
+      writeExpression(e.key);
+      buffer.write(': ');
+      writeExpression(e.value);
+    } else if (e is NamedExpression) {
+      writeExpression(e.name);
+      buffer.write(e.expression);
+    } else if (e is NullLiteral) {
+      buffer.write('null');
+    } else if (e is PrefixExpression) {
+      buffer.write(e.operator.lexeme);
+      writeExpression(e.operand);
+    } else if (e is PrefixedIdentifier) {
+      writeExpression(e.prefix);
+      buffer.write('.');
+      writeExpression(e.identifier);
+    } else if (e is PropertyAccess) {
+      writeExpression(e.target);
+      buffer.write('.');
+      writeExpression(e.propertyName);
+    } else if (e is RedirectingConstructorInvocation) {
+      buffer.write('this');
+      if (e.constructorName != null) {
+        buffer.write('.');
+        writeExpression(e.constructorName);
+      }
+      writeList('(', ')', e.argumentList.arguments, ', ', writeExpression,
+          includeEmpty: true);
+    } else if (e is SimpleIdentifier) {
+      buffer.write(e.name);
+    } else if (e is SimpleStringLiteral) {
+      buffer.write("'");
+      buffer.write(e.value.replaceAll("'", r"\'"));
+      buffer.write("'");
+    } else if (e is StringInterpolation) {
+      buffer.write("'");
+      e.elements.forEach(writeExpression);
+      buffer.write("'");
+    } else if (e is SuperConstructorInvocation) {
+      buffer.write('super');
+      if (e.constructorName != null) {
+        buffer.write('.');
+        writeExpression(e.constructorName);
+      }
+      writeList('(', ')', e.argumentList.arguments, ', ', writeExpression,
+          includeEmpty: true);
+    } else if (e is SuperExpression) {
+      buffer.write('super');
+    } else if (e is SymbolLiteral) {
+      buffer.write('#');
+      writeList('', '', e.components, '.',
+          (Token token) => buffer.write(token.lexeme));
+    } else if (e is ThisExpression) {
+      buffer.write('this');
+    } else if (e is TypeName) {
+      writeExpression(e.name);
+      if (e.typeArguments != null) {
+        writeList('<', '>', e.typeArguments.arguments, ', ', writeExpression);
+      }
+    } else {
+      fail('Unsupported expression type: ${e.runtimeType}');
+    }
+  }
+
+  void writeFieldElement(FieldElement e) {
+    if (e.isSynthetic && !isEnumElement(e.enclosingElement)) {
+      return;
+    }
+
+    writeDocumentation(e, '  ');
+    writeMetadata(e, '  ', '\n');
+
+    buffer.write('  ');
+
+    writeIf(e.isStatic, 'static ');
+    writeIf(e is FieldElementImpl && e.isCovariant, 'covariant ');
+
+    writePropertyInducingElement(e);
+  }
+
+  void writeFunctionElement(FunctionElement e) {
+    writeIf(e.isExternal, 'external ');
+
+    writeType2(e.returnType);
+
+    writeName(e);
+
+    writeTypeParameterElements(e.typeParameters);
+    writeParameterElements(e.parameters);
+
+    writeBodyModifiers(e);
+
+    buffer.writeln(' {}');
+  }
+
+  void writeFunctionTypeAliasElement(FunctionTypeAliasElement e) {
+    writeDocumentation(e);
+    writeMetadata(e, '', '\n');
+
+    buffer.write('typedef ');
+    writeType2(e.returnType);
+
+    writeName(e);
+
+    writeTypeParameterElements(e.typeParameters);
+    writeParameterElements(e.parameters);
+
+    buffer.writeln(';');
+  }
+
+  void writeIf(bool flag, String str) {
+    if (flag) {
+      buffer.write(str);
+    }
+  }
+
+  void writeImportElement(ImportElement e) {
+    if (!e.isSynthetic) {
+      writeMetadata(e, '', '\n');
+      buffer.write('import ');
+      writeUri(e, e.importedLibrary.source);
+
+      writeIf(e.isDeferred, ' deferred');
+
+      if (e.prefix != null) {
+        buffer.write(' as ');
+        writeName(e.prefix);
+        if (withOffsets) {
+          buffer.write('(${e.prefixOffset})');
+        }
+      }
+
+      e.combinators.forEach(writeNamespaceCombinator);
+
+      buffer.writeln(';');
+    }
+  }
+
+  void writeLibraryElement(LibraryElement e) {
+    if (e.displayName != '') {
+      writeMetadata(e, '', '\n');
+      buffer.write('library ');
+      writeName(e);
+      buffer.writeln(';');
+    }
+
+    e.imports.forEach(writeImportElement);
+    e.exports.forEach(writeExportElement);
+    e.parts.forEach(writePartElement);
+
+    e.units.forEach(writeUnitElement);
+  }
+
+  void writeList<T>(String open, String close, List<T> items, String separator,
+      writeItem(T item),
+      {bool includeEmpty: false}) {
+    if (!includeEmpty && items.isEmpty) {
+      return;
+    }
+    buffer.write(open);
+    bool first = true;
+    for (T item in items) {
+      if (!first) {
+        buffer.write(separator);
+      }
+      writeItem(item);
+      first = false;
+    }
+    buffer.write(close);
+  }
+
+  void writeMetadata(Element e, String prefix, String separator) {
+    if (e.metadata.isNotEmpty) {
+      writeList(prefix, '', e.metadata, '$separator$prefix', (a) {
+        writeExpression((a as ElementAnnotationImpl).annotationAst);
+      });
+      buffer.write(separator);
+    }
+  }
+
+  void writeMethodElement(MethodElement e) {
+    writeDocumentation(e, '  ');
+    writeMetadata(e, '  ', '\n');
+
+    buffer.write('  ');
+
+    writeIf(e.isExternal, 'external ');
+    writeIf(e.isStatic, 'static ');
+
+    writeType2(e.returnType);
+
+    writeName(e);
+
+    writeTypeParameterElements(e.typeParameters);
+    writeParameterElements(e.parameters);
+
+    writeBodyModifiers(e);
+
+    if (e.isAbstract) {
+      buffer.writeln(';');
+    } else {
+      buffer.writeln(' {}');
+    }
+  }
+
+  void writeName(Element e) {
+    buffer.write(e.displayName);
+    if (withOffsets) {
+      buffer.write('@');
+      buffer.write(e.nameOffset);
+    }
+  }
+
+  void writeNamespaceCombinator(NamespaceCombinator e) {
+    if (e is ShowElementCombinator) {
+      buffer.write(' show ');
+      buffer.write(e.shownNames.join(', '));
+    } else if (e is HideElementCombinator) {
+      buffer.write(' hide ');
+      buffer.write(e.hiddenNames.join(', '));
+    }
+  }
+
+  void writeParameterElement(ParameterElement e) {
+    String defaultValueSeparator;
+    Expression defaultValue =
+        e is DefaultParameterElementImpl ? e.constantInitializer : null;
+    String closeString;
+    ParameterKind kind = e.parameterKind;
+    if (kind == ParameterKind.REQUIRED) {
+      closeString = '';
+    } else if (kind == ParameterKind.POSITIONAL) {
+      buffer.write('[');
+      defaultValueSeparator = ' = ';
+      closeString = ']';
+    } else if (kind == ParameterKind.NAMED) {
+      buffer.write('{');
+      defaultValueSeparator = ': ';
+      closeString = '}';
+    } else {
+      fail('Unknown parameter kind: $kind');
+    }
+
+    writeMetadata(e, '', ' ');
+
+    writeIf(e.isCovariant, 'covariant ');
+    writeIf(e.isFinal, 'final ');
+
+    writeType2(e.type);
+
+    if (e is FieldFormalParameterElement) {
+      buffer.write('this.');
+    }
+
+    writeName(e);
+
+    if (defaultValue != null) {
+      buffer.write(defaultValueSeparator);
+      writeExpression(defaultValue);
+    }
+
+    buffer.write(closeString);
+  }
+
+  void writeParameterElements(List<ParameterElement> elements) {
+    writeList('(', ')', elements, ', ', writeParameterElement,
+        includeEmpty: true);
+  }
+
+  void writePartElement(CompilationUnitElement e) {
+    writeMetadata(e, '', '\n');
+    buffer.write('part ');
+    writeUri(e, e.source);
+    buffer.writeln(';');
+  }
+
+  void writePropertyAccessorElement(PropertyAccessorElement e) {
+    if (e.isSynthetic) {
+      return;
+    }
+
+    if (e.enclosingElement is ClassElement) {
+      writeDocumentation(e, '  ');
+      writeMetadata(e, '  ', '\n');
+
+      buffer.write('  ');
+
+      writeIf(e.isStatic, 'static ');
+    } else {
+      writeDocumentation(e);
+      writeMetadata(e, '', '\n');
+    }
+
+    writeIf(e.isExternal, 'external ');
+
+    writeType2(e.returnType);
+
+    if (e.isGetter) {
+      buffer.write('get ');
+    } else {
+      buffer.write('set ');
+    }
+
+    writeName(e);
+
+    if (e.isSetter || e.parameters.isNotEmpty) {
+      writeParameterElements(e.parameters);
+    }
+
+    expect(e.typeParameters, isEmpty);
+
+    expect(e.isSynchronous, isTrue);
+    expect(e.isAsynchronous, isFalse);
+    expect(e.isGenerator, isFalse);
+
+    if (e.isAbstract) {
+      buffer.writeln(';');
+    } else {
+      buffer.writeln(' {}');
+    }
+  }
+
+  void writePropertyInducingElement(PropertyInducingElement e) {
+    DartType type = e.type;
+    expect(type, isNotNull);
+
+    writeIf(e.isFinal, 'final ');
+    writeIf(e.isConst, 'const ');
+    writeType2(type);
+
+    writeName(e);
+
+    if (e is ConstVariableElement) {
+      Expression initializer = (e as ConstVariableElement).constantInitializer;
+      if (initializer != null) {
+        buffer.write(' = ');
+        writeExpression(initializer);
+      }
+    }
+
+    // TODO(scheglov) Paul: One of the things that was hardest to get right
+    // when resynthesizing the element model was the synthetic function for the
+    // initializer.  Can we write that out (along with its return type)?
+
+    buffer.writeln(';');
+  }
+
+  void writeTopLevelVariableElement(TopLevelVariableElement e) {
+    if (e.isSynthetic) {
+      return;
+    }
+    writeDocumentation(e);
+    writeMetadata(e, '', '\n');
+    writePropertyInducingElement(e);
+  }
+
+  void writeType(DartType type) {
+    if (type is InterfaceType) {
+      buffer.write(type.element.name);
+      if (type.element.typeParameters.isNotEmpty) {
+        writeList('<', '>', type.typeArguments, ', ', writeType);
+      }
+    } else {
+      buffer.write(type.displayName);
+    }
+  }
+
+  void writeType2(DartType type) {
+    writeType(type);
+    buffer.write(' ');
+  }
+
+  void writeTypeParameterElement(TypeParameterElement e) {
+    writeName(e);
+    if (e.bound != null) {
+      buffer.write(' extends ');
+      writeType(e.bound);
+    }
+  }
+
+  void writeTypeParameterElements(List<TypeParameterElement> elements) {
+    writeList('<', '>', elements, ', ', writeTypeParameterElement);
+  }
+
+  void writeUnitElement(CompilationUnitElement e) {
+    if (e.library.definingCompilationUnit != e) {
+      buffer.writeln('-' * 20);
+      buffer.writeln('unit: ${e.source.shortName}');
+      buffer.writeln();
+    }
+    e.functionTypeAliases.forEach(writeFunctionTypeAliasElement);
+    e.enums.forEach(writeClassElement);
+    e.types.forEach(writeClassElement);
+    e.topLevelVariables.forEach(writeTopLevelVariableElement);
+    e.accessors.forEach(writePropertyAccessorElement);
+    e.functions.forEach(writeFunctionElement);
+  }
+
+  void writeUri(UriReferencedElement e, Source source) {
+    String uri = e.uri ?? source.uri.toString();
+    buffer.write('\'$uri\'');
+    if (withOffsets) {
+      buffer.write('(');
+      buffer.write('${e.uriOffset}, ');
+      buffer.write('${e.uriEnd})');
+      buffer.write(')');
+    }
+  }
+}
+
+class _Replacement {
+  final int offset;
+  final int end;
+  final String text;
+  _Replacement(this.offset, this.end, this.text);
+}
diff --git a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
index 5efc290..139a553 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_ast_test.dart
@@ -29,6 +29,7 @@
 
 import '../context/abstract_context.dart';
 import '../task/strong/inferred_type_test.dart';
+import 'element_text.dart';
 import 'resynthesize_common.dart';
 import 'summary_common.dart';
 
@@ -37,13 +38,24 @@
     defineReflectiveTests(ResynthesizeAstSpecTest);
     defineReflectiveTests(ResynthesizeAstStrongTest);
     defineReflectiveTests(AstInferredTypeTest);
+    defineReflectiveTests(ApplyCheckElementTextReplacements);
   });
 }
 
 @reflectiveTest
+class ApplyCheckElementTextReplacements {
+  test_applyReplacements() {
+    applyCheckElementTextReplacements();
+  }
+}
+
+@reflectiveTest
 class AstInferredTypeTest extends AbstractResynthesizeTest
     with _AstResynthesizeTestMixin, InferredTypeMixin {
   @override
+  bool get isStrongMode => true;
+
+  @override
   bool get mayCheckTypesOfLocals => false;
 
   @override
@@ -686,13 +698,15 @@
 @reflectiveTest
 class ResynthesizeAstSpecTest extends _ResynthesizeAstTest {
   @override
-  AnalysisOptionsImpl createOptions() =>
-      super.createOptions()..strongMode = false;
+  bool get isStrongMode => false;
 }
 
 @reflectiveTest
 class ResynthesizeAstStrongTest extends _ResynthesizeAstTest {
   @override
+  bool get isStrongMode => true;
+
+  @override
   AnalysisOptionsImpl createOptions() =>
       super.createOptions()..strongMode = true;
 
@@ -880,6 +894,8 @@
 
 abstract class _ResynthesizeAstTest extends ResynthesizeTest
     with _AstResynthesizeTestMixin {
+  bool get isStrongMode;
+
   @override
   LibraryElementImpl checkLibrary(String text,
       {bool allowErrors: false, bool dumpSummaries: false}) {
@@ -907,6 +923,10 @@
   DartSdk createDartSdk() => AbstractContextTest.SHARED_MOCK_SDK;
 
   @override
+  AnalysisOptionsImpl createOptions() =>
+      super.createOptions()..strongMode = isStrongMode;
+
+  @override
   TestSummaryResynthesizer encodeDecodeLibrarySource(Source source) {
     return _encodeLibrary(source);
   }
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index 51b77ed..c1d72d5 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -29,9 +29,12 @@
 import '../../generated/test_support.dart';
 import '../abstract_single_unit.dart';
 import '../context/abstract_context.dart';
+import 'element_text.dart';
 
 /**
  * Abstract base class for resynthesizing and comparing elements.
+ *
+ * The return type separator: →
  */
 abstract class AbstractResynthesizeTest extends AbstractSingleUnitTest {
   Set<Source> otherLibrarySources = new Set<Source>();
@@ -53,6 +56,11 @@
    */
   bool allowMissingFiles = false;
 
+  /**
+   * Return `true` if resynthesizing should be done is strong mode.
+   */
+  bool get isStrongMode;
+
   void addLibrary(String uri) {
     otherLibrarySources.add(context.sourceFactory.forUri(uri));
   }
@@ -1317,23 +1325,105 @@
   SummaryResynthesizer encodeDecodeLibrarySource(Source librarySource);
 
   fail_library_hasExtUri() {
-    checkLibrary('import "dart-ext:doesNotExist.dart";');
+    var library = checkLibrary('import "dart-ext:doesNotExist.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+''');
+    }
   }
 
   test_class_abstract() {
-    checkLibrary('abstract class C {}');
+    var library = checkLibrary('abstract class C {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+abstract class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+abstract class C {
+}
+''');
+    }
   }
 
   test_class_alias() {
-    checkLibrary('class C = D with E, F; class D {} class E {} class F {}');
+    var library =
+        checkLibrary('class C = D with E, F; class D {} class E {} class F {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class alias C extends D with E, F {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+}
+class F {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class alias C extends D with E, F {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+}
+class F {
+}
+''');
+    }
   }
 
   test_class_alias_abstract() {
-    checkLibrary('abstract class C = D with E; class D {} class E {}');
+    var library =
+        checkLibrary('abstract class C = D with E; class D {} class E {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+abstract class alias C extends D with E {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+abstract class alias C extends D with E {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+}
+''');
+    }
   }
 
   test_class_alias_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 // Extra comment so doc comment offset != 0
 /**
  * Docs
@@ -1342,6 +1432,37 @@
 
 class D {}
 class E {}''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+class alias C extends D with E {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+class alias C extends D with E {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+}
+''');
+    }
   }
 
   test_class_alias_with_forwarding_constructors() {
@@ -1359,35 +1480,122 @@
   factory Base.fact2() = Base.noArgs;
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import "a.dart";
 class M {}
 class MixinApp = Base with M;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+class M {
+}
+class alias MixinApp extends Base with M {
+  synthetic MixinApp._priv() = Base._priv;
+  synthetic MixinApp() = Base;
+  synthetic MixinApp.noArgs() = Base.noArgs;
+  synthetic MixinApp.requiredArg(dynamic x) = Base.requiredArg;
+  synthetic MixinApp.fact() = Base.fact;
+  synthetic MixinApp.fact2() = Base.fact2;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+class M {
+}
+class alias MixinApp extends Base with M {
+  synthetic MixinApp._priv() = Base._priv;
+  synthetic MixinApp() = Base;
+  synthetic MixinApp.noArgs() = Base.noArgs;
+  synthetic MixinApp.requiredArg(dynamic x) = Base.requiredArg;
+  synthetic MixinApp.fact() = Base.fact;
+  synthetic MixinApp.fact2() = Base.fact2;
+}
+''');
+    }
   }
 
   test_class_alias_with_forwarding_constructors_type_substitution() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class Base<T> {
   Base.ctor(T t, List<T> l);
 }
 class M {}
 class MixinApp = Base with M;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class Base<T> {
+  Base.ctor(T t, List<T> l);
+}
+class M {
+}
+class alias MixinApp extends Base<dynamic> with M {
+  synthetic MixinApp.ctor(dynamic t, List<dynamic> l) = Base<T>.ctor;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class Base<T> {
+  Base.ctor(T t, List<T> l);
+}
+class M {
+}
+class alias MixinApp extends Base<dynamic> with M {
+  synthetic MixinApp.ctor(dynamic t, List<dynamic> l) = Base<T>.ctor;
+}
+''');
+    }
   }
 
   test_class_alias_with_forwarding_constructors_type_substitution_complex() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class Base<T> {
   Base.ctor(T t, List<T> l);
 }
 class M {}
 class MixinApp<U> = Base<List<U>> with M;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class Base<T> {
+  Base.ctor(T t, List<T> l);
+}
+class M {
+}
+class alias MixinApp<U> extends Base<List<U>> with M {
+  synthetic MixinApp.ctor(List<U> t, List<List<U>> l) = Base<T>.ctor;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class Base<T> {
+  Base.ctor(T t, List<T> l);
+}
+class M {
+}
+class alias MixinApp<U> extends Base<List<U>> with M {
+  synthetic MixinApp.ctor(List<U> t, List<List<U>> l) = Base<T>.ctor;
+}
+''');
+    }
   }
 
   test_class_alias_with_mixin_members() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C = D with E;
 class D {}
 class E {
@@ -1396,133 +1604,680 @@
   void f() {}
   int x;
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class alias C extends D with E {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+  int x;
+  int get a {}
+  void set b(int i) {}
+  void f() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class alias C extends D with E {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+  int x;
+  int get a {}
+  void set b(int i) {}
+  void f() {}
+}
+''');
+    }
   }
 
   test_class_constructor_const() {
-    checkLibrary('class C { const C(); }');
+    var library = checkLibrary('class C { const C(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C();
+}
+''');
+    }
   }
 
   test_class_constructor_const_external() {
-    checkLibrary('class C { external const C(); }');
+    var library = checkLibrary('class C { external const C(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external const C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external const C();
+}
+''');
+    }
   }
 
   test_class_constructor_explicit_named() {
-    checkLibrary('class C { C.foo(); }');
+    var library = checkLibrary('class C { C.foo(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C.foo();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C.foo();
+}
+''');
+    }
   }
 
   test_class_constructor_explicit_type_params() {
-    checkLibrary('class C<T, U> { C(); }');
+    var library = checkLibrary('class C<T, U> { C(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  C();
+}
+''');
+    }
   }
 
   test_class_constructor_explicit_unnamed() {
-    checkLibrary('class C { C(); }');
+    var library = checkLibrary('class C { C(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C();
+}
+''');
+    }
   }
 
   test_class_constructor_external() {
-    checkLibrary('class C { external C(); }');
+    var library = checkLibrary('class C { external C(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external C();
+}
+''');
+    }
   }
 
   test_class_constructor_factory() {
-    checkLibrary('class C { factory C() => null; }');
+    var library = checkLibrary('class C { factory C() => null; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  factory C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  factory C();
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_dynamic_dynamic() {
-    checkLibrary('class C { dynamic x; C(dynamic this.x); }');
+    var library = checkLibrary('class C { dynamic x; C(dynamic this.x); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(dynamic this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(dynamic this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_dynamic_typed() {
-    checkLibrary('class C { dynamic x; C(int this.x); }');
+    var library = checkLibrary('class C { dynamic x; C(int this.x); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(int this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(int this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_dynamic_untyped() {
-    checkLibrary('class C { dynamic x; C(this.x); }');
+    var library = checkLibrary('class C { dynamic x; C(this.x); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(dynamic this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(dynamic this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_multiple_matching_fields() {
     // This is a compile-time error but it should still analyze consistently.
-    checkLibrary('class C { C(this.x); int x; String x; }', allowErrors: true);
+    var library = checkLibrary('class C { C(this.x); int x; String x; }',
+        allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+  String x;
+  C(int this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+  String x;
+  C(int this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_no_matching_field() {
     // This is a compile-time error but it should still analyze consistently.
-    checkLibrary('class C { C(this.x); }', allowErrors: true);
+    var library = checkLibrary('class C { C(this.x); }', allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C(dynamic this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C(dynamic this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_typed_dynamic() {
-    checkLibrary('class C { num x; C(dynamic this.x); }', allowErrors: true);
+    var library = checkLibrary('class C { num x; C(dynamic this.x); }',
+        allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  num x;
+  C(dynamic this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  num x;
+  C(dynamic this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_typed_typed() {
-    checkLibrary('class C { num x; C(int this.x); }');
+    var library = checkLibrary('class C { num x; C(int this.x); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  num x;
+  C(int this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  num x;
+  C(int this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_typed_untyped() {
-    checkLibrary('class C { num x; C(this.x); }');
+    var library = checkLibrary('class C { num x; C(this.x); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  num x;
+  C(num this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  num x;
+  C(num this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_untyped_dynamic() {
-    checkLibrary('class C { var x; C(dynamic this.x); }');
+    var library = checkLibrary('class C { var x; C(dynamic this.x); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(dynamic this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(dynamic this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_untyped_typed() {
-    checkLibrary('class C { var x; C(int this.x); }');
+    var library = checkLibrary('class C { var x; C(int this.x); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(int this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(int this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_field_formal_untyped_untyped() {
-    checkLibrary('class C { var x; C(this.x); }');
+    var library = checkLibrary('class C { var x; C(this.x); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(dynamic this.x);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(dynamic this.x);
+}
+''');
+    }
   }
 
   test_class_constructor_fieldFormal_named_noDefault() {
-    checkLibrary('class C { int x; C({this.x}); }');
+    var library = checkLibrary('class C { int x; C({this.x}); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+  C({int this.x});
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+  C({int this.x});
+}
+''');
+    }
   }
 
   test_class_constructor_fieldFormal_named_withDefault() {
-    checkLibrary('class C { int x; C({this.x: 42}); }');
+    var library = checkLibrary('class C { int x; C({this.x: 42}); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+  C({int this.x});
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+  C({int this.x});
+}
+''');
+    }
   }
 
   test_class_constructor_fieldFormal_optional_noDefault() {
-    checkLibrary('class C { int x; C([this.x]); }');
+    var library = checkLibrary('class C { int x; C([this.x]); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+  C([int this.x]);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+  C([int this.x]);
+}
+''');
+    }
   }
 
   test_class_constructor_fieldFormal_optional_withDefault() {
-    checkLibrary('class C { int x; C([this.x = 42]); }');
+    var library = checkLibrary('class C { int x; C([this.x = 42]); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+  C([int this.x]);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+  C([int this.x]);
+}
+''');
+    }
   }
 
   test_class_constructor_implicit() {
-    checkLibrary('class C {}');
+    var library = checkLibrary('class C {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+''');
+    }
   }
 
   test_class_constructor_implicit_type_params() {
-    checkLibrary('class C<T, U> {}');
+    var library = checkLibrary('class C<T, U> {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+}
+''');
+    }
   }
 
   test_class_constructor_params() {
-    checkLibrary('class C { C(x, y); }');
+    var library = checkLibrary('class C { C(x, int y); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C(dynamic x, int y);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C(dynamic x, int y);
+}
+''');
+    }
   }
 
   test_class_constructors() {
-    checkLibrary('class C { C.foo(); C.bar(); }');
+    var library = checkLibrary('class C { C.foo(); C.bar(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C.foo();
+  C.bar();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C.foo();
+  C.bar();
+}
+''');
+    }
   }
 
   test_class_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 // Extra comment so doc comment offset != 0
 /**
  * Docs
  */
 class C {}''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+class C {
+}
+''');
+    }
   }
 
   test_class_documented_tripleSlash() {
-    checkLibrary('''
+    var library = checkLibrary('''
 /// aaa
 /// bbbb
 /// cc
 class C {}''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+/// aaa
+/// bbbb
+/// cc
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+/// aaa
+/// bbbb
+/// cc
+class C {
+}
+''');
+    }
   }
 
   test_class_documented_with_references() {
-    checkLibrary('''
+    var library = checkLibrary('''
 /**
  * Docs referring to [D] and [E]
  */
@@ -1530,174 +2285,897 @@
 
 class D {}
 class E {}''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs referring to [D] and [E]
+ */
+class C {
+}
+class D {
+}
+class E {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs referring to [D] and [E]
+ */
+class C {
+}
+class D {
+}
+class E {
+}
+''');
+    }
   }
 
   test_class_documented_with_windows_line_endings() {
-    checkLibrary('/**\r\n * Docs\r\n */\r\nclass C {}');
+    var library = checkLibrary('/**\r\n * Docs\r\n */\r\nclass C {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+class C {
+}
+''');
+    }
   }
 
   test_class_field_const() {
-    checkLibrary('class C { static const int i = 0; }');
+    var library = checkLibrary('class C { static const int i = 0; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const int i = 0;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const int i = 0;
+}
+''');
+    }
   }
 
   test_class_field_implicit_type() {
-    checkLibrary('class C { var x; }');
+    var library = checkLibrary('class C { var x; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+}
+''');
+    }
   }
 
   test_class_field_static() {
-    checkLibrary('class C { static int i; }');
+    var library = checkLibrary('class C { static int i; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static int i;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static int i;
+}
+''');
+    }
   }
 
   test_class_fields() {
-    checkLibrary('class C { int i; int j; }');
+    var library = checkLibrary('class C { int i; int j; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int i;
+  int j;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int i;
+  int j;
+}
+''');
+    }
   }
 
   test_class_getter_abstract() {
-    checkLibrary('abstract class C { int get x; }');
+    var library = checkLibrary('abstract class C { int get x; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+abstract class C {
+  int get x;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+abstract class C {
+  int get x;
+}
+''');
+    }
   }
 
   test_class_getter_external() {
-    checkLibrary('class C { external int get x; }');
+    var library = checkLibrary('class C { external int get x; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external int get x {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external int get x {}
+}
+''');
+    }
   }
 
   test_class_getter_implicit_return_type() {
-    checkLibrary('class C { get x => null; }');
+    var library = checkLibrary('class C { get x => null; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic get x {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic get x {}
+}
+''');
+    }
   }
 
   test_class_getter_static() {
-    checkLibrary('class C { static int get x => null; }');
+    var library = checkLibrary('class C { static int get x => null; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static int get x {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static int get x {}
+}
+''');
+    }
   }
 
   test_class_getters() {
-    checkLibrary('class C { int get x => null; get y => null; }');
+    var library = checkLibrary('class C { int get x => null; get y => null; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int get x {}
+  dynamic get y {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int get x {}
+  dynamic get y {}
+}
+''');
+    }
   }
 
   test_class_implicitField_getterFirst() {
-    checkLibrary('class C { int get x => 0; void set x(int value) {} }');
+    var library =
+        checkLibrary('class C { int get x => 0; void set x(int value) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int get x {}
+  void set x(int value) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int get x {}
+  void set x(int value) {}
+}
+''');
+    }
   }
 
   test_class_implicitField_setterFirst() {
-    checkLibrary('class C { void set x(int value) {} int get x => 0; }');
+    var library =
+        checkLibrary('class C { void set x(int value) {} int get x => 0; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x(int value) {}
+  int get x {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x(int value) {}
+  int get x {}
+}
+''');
+    }
   }
 
   test_class_interfaces() {
-    checkLibrary('class C implements D, E {} class D {} class E {}');
+    var library =
+        checkLibrary('class C implements D, E {} class D {} class E {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C implements D, E {
+}
+class D {
+}
+class E {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C implements D, E {
+}
+class D {
+}
+class E {
+}
+''');
+    }
   }
 
   test_class_interfaces_unresolved() {
-    checkLibrary('class C implements X, Y, Z {} class X {} class Z {}',
+    var library = checkLibrary(
+        'class C implements X, Y, Z {} class X {} class Z {}',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C implements X, Z {
+}
+class X {
+}
+class Z {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C implements X, Z {
+}
+class X {
+}
+class Z {
+}
+''');
+    }
   }
 
   test_class_method_abstract() {
-    checkLibrary('abstract class C { f(); }');
+    var library = checkLibrary('abstract class C { f(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+abstract class C {
+  dynamic f();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+abstract class C {
+  dynamic f();
+}
+''');
+    }
   }
 
   test_class_method_external() {
-    checkLibrary('class C { external f(); }');
+    var library = checkLibrary('class C { external f(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external dynamic f() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external dynamic f() {}
+}
+''');
+    }
   }
 
   test_class_method_params() {
-    checkLibrary('class C { f(x, y) {} }');
+    var library = checkLibrary('class C { f(x, y) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic f(dynamic x, dynamic y) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic f(dynamic x, dynamic y) {}
+}
+''');
+    }
   }
 
   test_class_method_static() {
-    checkLibrary('class C { static f() {} }');
+    var library = checkLibrary('class C { static f() {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static dynamic f() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static dynamic f() {}
+}
+''');
+    }
   }
 
   test_class_methods() {
-    checkLibrary('class C { f() {} g() {} }');
+    var library = checkLibrary('class C { f() {} g() {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic f() {}
+  dynamic g() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic f() {}
+  dynamic g() {}
+}
+''');
+    }
   }
 
   test_class_mixins() {
-    checkLibrary('class C extends Object with D, E {} class D {} class E {}');
+    var library = checkLibrary(
+        'class C extends Object with D, E {} class D {} class E {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends Object with D, E {
+  synthetic C();
+}
+class D {
+}
+class E {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends Object with D, E {
+  synthetic C();
+}
+class D {
+}
+class E {
+}
+''');
+    }
   }
 
   test_class_mixins_unresolved() {
-    checkLibrary('class C extends Object with X, Y, Z; class X {} class Z {}',
+    var library = checkLibrary(
+        'class C extends Object with X, Y, Z; class X {} class Z {}',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends Object with X, Z {
+  synthetic C();
+}
+class X {
+}
+class Z {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends Object with X, Z {
+  synthetic C();
+}
+class X {
+}
+class Z {
+}
+''');
+    }
   }
 
   test_class_setter_abstract() {
-    checkLibrary('abstract class C { void set x(int value); }');
+    var library = checkLibrary('abstract class C { void set x(int value); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+abstract class C {
+  void set x(int value);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+abstract class C {
+  void set x(int value);
+}
+''');
+    }
   }
 
   test_class_setter_external() {
-    checkLibrary('class C { external void set x(int value); }');
+    var library = checkLibrary('class C { external void set x(int value); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external void set x(int value) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external void set x(int value) {}
+}
+''');
+    }
   }
 
   test_class_setter_implicit_param_type() {
-    checkLibrary('class C { void set x(value) {} }');
+    var library = checkLibrary('class C { void set x(value) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x(dynamic value) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x(dynamic value) {}
+}
+''');
+    }
   }
 
   test_class_setter_implicit_return_type() {
-    checkLibrary('class C { set x(int value) {} }');
+    var library = checkLibrary('class C { set x(int value) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x(int value) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic set x(int value) {}
+}
+''');
+    }
   }
 
   test_class_setter_invalid_no_parameter() {
-    checkLibrary('class C { void set x() {} }');
+    var library = checkLibrary('class C { void set x() {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x() {}
+}
+''');
+    }
   }
 
   test_class_setter_static() {
-    checkLibrary('class C { static void set x(int value) {} }');
+    var library = checkLibrary('class C { static void set x(int value) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static void set x(int value) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static void set x(int value) {}
+}
+''');
+    }
   }
 
   test_class_setters() {
-    checkLibrary('class C { void set x(int value) {} set y(value) {} }');
+    var library =
+        checkLibrary('class C { void set x(int value) {} set y(value) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x(int value) {}
+  void set y(dynamic value) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x(int value) {}
+  dynamic set y(dynamic value) {}
+}
+''');
+    }
   }
 
   test_class_supertype() {
-    checkLibrary('class C extends D {} class D {}');
+    var library = checkLibrary('class C extends D {} class D {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+}
+class D {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+}
+class D {
+}
+''');
+    }
   }
 
   test_class_supertype_unresolved() {
-    checkLibrary('class C extends D {}', allowErrors: true);
+    var library = checkLibrary('class C extends D {}', allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+''');
+    }
   }
 
   test_class_type_parameters() {
-    checkLibrary('class C<T, U> {}');
+    var library = checkLibrary('class C<T, U> {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+}
+''');
+    }
   }
 
   test_class_type_parameters_bound() {
-    checkLibrary('class C<T extends Object, U extends D> {} class D {}');
+    var library =
+        checkLibrary('class C<T extends Object, U extends D> {} class D {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T extends Object, U extends D> {
+}
+class D {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T extends Object, U extends D> {
+}
+class D {
+}
+''');
+    }
   }
 
   test_class_type_parameters_f_bound_complex() {
-    checkLibrary('class C<T extends List<U>, U> {}');
+    var library = checkLibrary('class C<T extends List<U>, U> {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T extends List<U>, U> {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T extends List<U>, U> {
+}
+''');
+    }
   }
 
   test_class_type_parameters_f_bound_simple() {
-    checkLibrary('class C<T extends U, U> {}');
+    var library = checkLibrary('class C<T extends U, U> {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T extends U, U> {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T extends U, U> {
+}
+''');
+    }
   }
 
   test_classes() {
-    checkLibrary('class C {} class D {}');
+    var library = checkLibrary('class C {} class D {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+class D {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+class D {
+}
+''');
+    }
   }
 
   test_closure_executable_with_return_type_from_closure() {
-    checkLibrary('''
+    var library = checkLibrary('''
 f() {
   print(() {});
   print(() => () => 0);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+''');
+    }
   }
 
   test_closure_generic() {
-    checkLibrary('final f = <U, V>(U x, V y) => y;');
+    var library = checkLibrary('final f = <U, V>(U x, V y) => y;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+final <U,V>(U, V) → V f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+final dynamic f;
+''');
+    }
   }
 
   test_closure_in_variable_declaration_in_part() {
     addSource('/a.dart', 'part of lib; final f = (int i) => i.toDouble();');
-    checkLibrary('''
+    var library = checkLibrary('''
 library lib;
 part "a.dart";
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library lib;
+part 'a.dart';
+--------------------
+unit: a.dart
+
+final (int) → double f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library lib;
+part 'a.dart';
+--------------------
+unit: a.dart
+
+final dynamic f;
+''');
+    }
   }
 
   test_const_invalid_field_const() {
     variablesWithNotConstInitializers.add('f');
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 class C {
   static const f = 1 + foo();
@@ -1705,11 +3183,30 @@
 int foo() => 42;
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const int f = $$invalidConstExpr$$;
+}
+int foo() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const dynamic f = $$invalidConstExpr$$;
+}
+int foo() {}
+''');
+    }
   }
 
   test_const_invalid_field_final() {
     variablesWithNotConstInitializers.add('f');
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 class C {
   final f = 1 + foo();
@@ -1717,25 +3214,78 @@
 int foo() => 42;
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final int f = $$invalidConstExpr$$;
+}
+int foo() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic f = $$invalidConstExpr$$;
+}
+int foo() {}
+''');
+    }
   }
 
   test_const_invalid_topLevel() {
     variablesWithNotConstInitializers.add('v');
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 const v = 1 + foo();
 int foo() => 42;
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const int v = $$invalidConstExpr$$;
+int foo() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic v = $$invalidConstExpr$$;
+int foo() {}
+''');
+    }
   }
 
   test_const_invokeConstructor_generic_named() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C<K, V> {
   const C.named(K k, V v);
 }
 const V = const C<int, String>.named(1, '222');
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<K, V> {
+  const C.named(K k, V v);
+}
+const C<int, String> V = const C<int, String>.named(1, '222');
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<K, V> {
+  const C.named(K k, V v);
+}
+const dynamic V = const C<int, String>.named(1, '222');
+''');
+    }
   }
 
   test_const_invokeConstructor_generic_named_imported() {
@@ -1746,10 +3296,25 @@
   const C.named(K k, V v);
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const V = const C<int, String>.named(1, '222');
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const C<int, String> V = const C<int, String>.named(1, '222');
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic V = const C<int, String>.named(1, '222');
+''');
+    }
   }
 
   test_const_invokeConstructor_generic_named_imported_withPrefix() {
@@ -1760,28 +3325,81 @@
   const C.named(K k, V v);
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const V = const p.C<int, String>.named(1, '222');
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const C<int, String> V = const C<int, String>.named(1, '222');
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = const C<int, String>.named(1, '222');
+''');
+    }
   }
 
   test_const_invokeConstructor_generic_noTypeArguments() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C<K, V> {
   const C();
 }
 const V = const C();
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<K, V> {
+  const C();
+}
+const C<dynamic, dynamic> V = const C();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<K, V> {
+  const C();
+}
+const dynamic V = const C();
+''');
+    }
   }
 
   test_const_invokeConstructor_generic_unnamed() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C<K, V> {
   const C();
 }
 const V = const C<int, String>();
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<K, V> {
+  const C();
+}
+const C<int, String> V = const C<int, String>();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<K, V> {
+  const C();
+}
+const dynamic V = const C<int, String>();
+''');
+    }
   }
 
   test_const_invokeConstructor_generic_unnamed_imported() {
@@ -1792,10 +3410,25 @@
   const C();
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const V = const C<int, String>();
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const C<int, String> V = const C<int, String>();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic V = const C<int, String>();
+''');
+    }
   }
 
   test_const_invokeConstructor_generic_unnamed_imported_withPrefix() {
@@ -1806,19 +3439,53 @@
   const C();
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const V = const p.C<int, String>();
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const C<int, String> V = const C<int, String>();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = const C<int, String>();
+''');
+    }
   }
 
   test_const_invokeConstructor_named() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   const C.named(bool a, int b, int c, {String d, double e});
 }
 const V = const C.named(true, 1, 2, d: 'ccc', e: 3.4);
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C.named(bool a, int b, int c, {String d}, {double e});
+}
+const C V = const C.named(true, 1, 2, d: 'ccc', e: 3.4);
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C.named(bool a, int b, int c, {String d}, {double e});
+}
+const dynamic V = const C.named(true, 1, 2, d: 'ccc', e: 3.4);
+''');
+    }
   }
 
   test_const_invokeConstructor_named_imported() {
@@ -1829,10 +3496,25 @@
   const C.named();
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const V = const C.named();
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const C V = const C.named();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic V = const C.named();
+''');
+    }
   }
 
   test_const_invokeConstructor_named_imported_withPrefix() {
@@ -1843,27 +3525,72 @@
   const C.named();
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const V = const p.C.named();
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const C V = const C.named();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = const C.named();
+''');
+    }
   }
 
   test_const_invokeConstructor_named_unresolved() {
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 class C {}
 const V = const C.named();
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+const C V = const C.named();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+const dynamic V = const C.named();
+''');
+    }
   }
 
   test_const_invokeConstructor_named_unresolved2() {
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 const V = const C.named();
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = const C.named();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = const C.named();
+''');
+    }
   }
 
   test_const_invokeConstructor_named_unresolved3() {
@@ -1873,39 +3600,101 @@
 class C {
 }
 ''');
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 import 'a.dart' as p;
 const V = const p.C.named();
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const C V = const p.C.named();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = const p.C.named();
+''');
+    }
   }
 
   test_const_invokeConstructor_named_unresolved4() {
     addLibrarySource('/a.dart', '');
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 import 'a.dart' as p;
 const V = const p.C.named();
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = const p.C.named();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = const p.C.named();
+''');
+    }
   }
 
   test_const_invokeConstructor_named_unresolved5() {
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 const V = const p.C.named();
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = const p.C.named();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = const p.C.named();
+''');
+    }
   }
 
   test_const_invokeConstructor_unnamed() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   const C();
 }
 const V = const C();
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C();
+}
+const C V = const C();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C();
+}
+const dynamic V = const C();
+''');
+    }
   }
 
   test_const_invokeConstructor_unnamed_imported() {
@@ -1916,10 +3705,25 @@
   const C();
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const V = const C();
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const C V = const C();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic V = const C();
+''');
+    }
   }
 
   test_const_invokeConstructor_unnamed_imported_withPrefix() {
@@ -1930,45 +3734,120 @@
   const C();
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const V = const p.C();
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const C V = const C();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = const C();
+''');
+    }
   }
 
   test_const_invokeConstructor_unnamed_unresolved() {
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 const V = const C();
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = const C();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = const C();
+''');
+    }
   }
 
   test_const_invokeConstructor_unnamed_unresolved2() {
     addLibrarySource('/a.dart', '');
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 import 'a.dart' as p;
 const V = const p.C();
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = const p.C();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = const p.C();
+''');
+    }
   }
 
   test_const_invokeConstructor_unnamed_unresolved3() {
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 const V = const p.C();
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = const p.C();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = const p.C();
+''');
+    }
   }
 
   test_const_length_ofClassConstField() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   static const String F = '';
 }
 const int v = C.F.length;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const String F = '';
+}
+const int v = C.F.length;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const String F = '';
+}
+const int v = C.F.length;
+''');
+    }
   }
 
   test_const_length_ofClassConstField_imported() {
@@ -1979,10 +3858,25 @@
   static const String F = '';
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const int v = C.F.length;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const int v = C.F.length;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const int v = C.F.length;
+''');
+    }
   }
 
   test_const_length_ofClassConstField_imported_withPrefix() {
@@ -1993,23 +3887,66 @@
   static const String F = '';
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const int v = p.C.F.length;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const int v = p.C.F.length;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const int v = p.C.F.length;
+''');
+    }
   }
 
   test_const_length_ofStringLiteral() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const v = 'abc'.length;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const int v = 'abc'.length;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic v = 'abc'.length;
+''');
+    }
   }
 
   test_const_length_ofTopLevelVariable() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const String S = 'abc';
 const v = S.length;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const String S = 'abc';
+const int v = S.length;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const String S = 'abc';
+const dynamic v = S.length;
+''');
+    }
   }
 
   test_const_length_ofTopLevelVariable_imported() {
@@ -2018,10 +3955,25 @@
         r'''
 const String S = 'abc';
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const v = S.length;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const int v = S.length;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic v = S.length;
+''');
+    }
   }
 
   test_const_length_ofTopLevelVariable_imported_withPrefix() {
@@ -2030,51 +3982,144 @@
         r'''
 const String S = 'abc';
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const v = p.S.length;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const int v = p.S.length;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic v = p.S.length;
+''');
+    }
   }
 
   test_const_length_staticMethod() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   static int length() => 42;
 }
 const v = C.length;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static int length() {}
+}
+const () → int v = C.length;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static int length() {}
+}
+const dynamic v = C.length;
+''');
+    }
   }
 
   test_const_parameterDefaultValue_initializingFormal_functionTyped() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   final x;
   const C({this.x: foo});
 }
 int foo() => 42;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C({dynamic this.x});
+}
+int foo() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C({dynamic this.x});
+}
+int foo() {}
+''');
+    }
   }
 
   test_const_parameterDefaultValue_initializingFormal_named() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   final x;
   const C({this.x: 1 + 2});
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C({dynamic this.x});
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C({dynamic this.x});
+}
+''');
+    }
   }
 
   test_const_parameterDefaultValue_initializingFormal_positional() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   final x;
   const C([this.x = 1 + 2]);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C([dynamic this.x]);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C([dynamic this.x]);
+}
+''');
+    }
   }
 
   test_const_parameterDefaultValue_normal() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   const C.positional([p = 1 + 2]);
   const C.named({p: 1 + 2});
@@ -2084,15 +4129,61 @@
   void methodNamedWithoutDefault({p}) {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C.positional([dynamic p = 1 + 2]);
+  const C.named({dynamic p: 1 + 2});
+  void methodPositional([dynamic p = 1 + 2]) {}
+  void methodPositionalWithoutDefault([dynamic p]) {}
+  void methodNamed({dynamic p: 1 + 2}) {}
+  void methodNamedWithoutDefault({dynamic p}) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C.positional([dynamic p = 1 + 2]);
+  const C.named({dynamic p: 1 + 2});
+  void methodPositional([dynamic p = 1 + 2]) {}
+  void methodPositionalWithoutDefault([dynamic p]) {}
+  void methodNamed({dynamic p: 1 + 2}) {}
+  void methodNamedWithoutDefault({dynamic p}) {}
+}
+''');
+    }
   }
 
   test_const_reference_staticField() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   static const int F = 42;
 }
 const V = C.F;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const int F = 42;
+}
+const int V = C.F;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const int F = 42;
+}
+const dynamic V = C.F;
+''');
+    }
   }
 
   test_const_reference_staticField_imported() {
@@ -2103,10 +4194,25 @@
   static const int F = 42;
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const V = C.F;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const int V = C.F;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic V = C.F;
+''');
+    }
   }
 
   test_const_reference_staticField_imported_withPrefix() {
@@ -2117,19 +4223,53 @@
   static const int F = 42;
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const V = p.C.F;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const int V = p.C.F;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = p.C.F;
+''');
+    }
   }
 
   test_const_reference_staticMethod() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   static int m(int a, String b) => 42;
 }
 const V = C.m;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static int m(int a, String b) {}
+}
+const (int, String) → int V = C.m;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static int m(int a, String b) {}
+}
+const dynamic V = C.m;
+''');
+    }
   }
 
   test_const_reference_staticMethod_imported() {
@@ -2140,10 +4280,25 @@
   static int m(int a, String b) => 42;
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const V = C.m;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const (int, String) → int V = C.m;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic V = C.m;
+''');
+    }
   }
 
   test_const_reference_staticMethod_imported_withPrefix() {
@@ -2154,17 +4309,47 @@
   static int m(int a, String b) => 42;
 }
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const V = p.C.m;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const (int, String) → int V = p.C.m;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = p.C.m;
+''');
+    }
   }
 
   test_const_reference_topLevelFunction() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 foo() {}
 const V = foo;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const () → dynamic V = foo;
+dynamic foo() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = foo;
+dynamic foo() {}
+''');
+    }
   }
 
   test_const_reference_topLevelFunction_imported() {
@@ -2173,10 +4358,25 @@
         r'''
 foo() {}
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const V = foo;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const () → dynamic V = foo;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic V = foo;
+''');
+    }
   }
 
   test_const_reference_topLevelFunction_imported_withPrefix() {
@@ -2185,17 +4385,47 @@
         r'''
 foo() {}
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const V = p.foo;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const () → dynamic V = p.foo;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic V = p.foo;
+''');
+    }
   }
 
   test_const_reference_topLevelVariable() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const A = 1;
 const B = A + 2;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const int A = 1;
+const int B = A + 2;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic A = 1;
+const dynamic B = A + 2;
+''');
+    }
   }
 
   test_const_reference_topLevelVariable_imported() {
@@ -2204,10 +4434,25 @@
         r'''
 const A = 1;
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const B = A + 2;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const int B = A + 2;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic B = A + 2;
+''');
+    }
   }
 
   test_const_reference_topLevelVariable_imported_withPrefix() {
@@ -2216,14 +4461,29 @@
         r'''
 const A = 1;
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const B = p.A + 2;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const int B = p.A + 2;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic B = p.A + 2;
+''');
+    }
   }
 
   test_const_reference_type() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {}
 class D<T> {}
 enum E {a, b, c}
@@ -2236,15 +4496,83 @@
 const vEnum = E;
 const vFunctionTypeAlias = F;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(int a, String b);
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E a;
+  static const E b;
+  static const E c;
+}
+class C {
+}
+class D<T> {
+}
+const Type vDynamic = dynamic;
+const Type vNull = Null;
+const Type vObject = Object;
+const Type vClass = C;
+const Type vGenericClass = D;
+const Type vEnum = E;
+const Type vFunctionTypeAlias = F;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(int a, String b);
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E a;
+  static const E b;
+  static const E c;
+}
+class C {
+}
+class D<T> {
+}
+const dynamic vDynamic = dynamic;
+const dynamic vNull = Null;
+const dynamic vObject = Object;
+const dynamic vClass = C;
+const dynamic vGenericClass = D;
+const dynamic vEnum = E;
+const dynamic vFunctionTypeAlias = F;
+''');
+    }
   }
 
   test_const_reference_type_functionType() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 typedef F();
 class C {
   final f = <F>[];
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F();
+class C {
+  final List<F> f = const <F>[];
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F();
+class C {
+  final dynamic f = const <F>[];
+}
+''');
+    }
   }
 
   test_const_reference_type_imported() {
@@ -2255,12 +4583,31 @@
 enum E {a, b, c}
 typedef F(int a, String b);
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const vClass = C;
 const vEnum = E;
 const vFunctionTypeAlias = F;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const Type vClass = C;
+const Type vEnum = E;
+const Type vFunctionTypeAlias = F;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic vClass = C;
+const dynamic vEnum = E;
+const dynamic vFunctionTypeAlias = F;
+''');
+    }
   }
 
   test_const_reference_type_imported_withPrefix() {
@@ -2271,37 +4618,103 @@
 enum E {a, b, c}
 typedef F(int a, String b);
 ''');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const vClass = p.C;
 const vEnum = p.E;
 const vFunctionTypeAlias = p.F;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const Type vClass = p.C;
+const Type vEnum = p.E;
+const Type vFunctionTypeAlias = p.F;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic vClass = p.C;
+const dynamic vEnum = p.E;
+const dynamic vFunctionTypeAlias = p.F;
+''');
+    }
   }
 
   test_const_reference_type_typeParameter() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C<T> {
   final f = <T>[];
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  final List<T> f = const <T>[];
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  final dynamic f = const <T>[];
+}
+''');
+    }
   }
 
   test_const_reference_unresolved_prefix0() {
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 const V = foo;
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = foo;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic V = foo;
+''');
+    }
   }
 
   test_const_reference_unresolved_prefix1() {
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 class C {}
 const v = C.foo;
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+const dynamic v = C.foo;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+const dynamic v = C.foo;
+''');
+    }
   }
 
   test_const_reference_unresolved_prefix2() {
@@ -2310,16 +4723,31 @@
         '''
 class C {}
 ''');
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 import 'foo.dart' as p;
 const v = p.C.foo;
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as p;
+const dynamic v = p.C.foo;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as p;
+const dynamic v = p.C.foo;
+''');
+    }
   }
 
   test_const_topLevel_binary() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const vEqual = 1 == 2;
 const vAnd = true && false;
 const vOr = false || true;
@@ -2339,28 +4767,114 @@
 const vLess = 1 < 2;
 const vLessEqual = 1 <= 2;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const bool vEqual = 1 == 2;
+const bool vAnd = true && false;
+const bool vOr = false || true;
+const int vBitXor = 1 ^ 2;
+const int vBitAnd = 1 & 2;
+const int vBitOr = 1 | 2;
+const int vBitShiftLeft = 1 << 2;
+const int vBitShiftRight = 1 >> 2;
+const int vAdd = 1 + 2;
+const int vSubtract = 1 - 2;
+const int vMiltiply = 1 * 2;
+const num vDivide = 1 / 2;
+const int vFloorDivide = 1 ~/ 2;
+const int vModulo = 1 % 2;
+const bool vGreater = 1 > 2;
+const bool vGreaterEqual = 1 >= 2;
+const bool vLess = 1 < 2;
+const bool vLessEqual = 1 <= 2;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic vEqual = 1 == 2;
+const dynamic vAnd = true && false;
+const dynamic vOr = false || true;
+const dynamic vBitXor = 1 ^ 2;
+const dynamic vBitAnd = 1 & 2;
+const dynamic vBitOr = 1 | 2;
+const dynamic vBitShiftLeft = 1 << 2;
+const dynamic vBitShiftRight = 1 >> 2;
+const dynamic vAdd = 1 + 2;
+const dynamic vSubtract = 1 - 2;
+const dynamic vMiltiply = 1 * 2;
+const dynamic vDivide = 1 / 2;
+const dynamic vFloorDivide = 1 ~/ 2;
+const dynamic vModulo = 1 % 2;
+const dynamic vGreater = 1 > 2;
+const dynamic vGreaterEqual = 1 >= 2;
+const dynamic vLess = 1 < 2;
+const dynamic vLessEqual = 1 <= 2;
+''');
+    }
   }
 
   test_const_topLevel_conditional() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const vConditional = (1 == 2) ? 11 : 22;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const int vConditional = 1 == 2 ? 11 : 22;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic vConditional = 1 == 2 ? 11 : 22;
+''');
+    }
   }
 
   test_const_topLevel_identical() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const vIdentical = (1 == 2) ? 11 : 22;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const int vIdentical = 1 == 2 ? 11 : 22;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic vIdentical = 1 == 2 ? 11 : 22;
+''');
+    }
   }
 
   test_const_topLevel_ifNull() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const vIfNull = 1 ?? 2.0;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const num vIfNull = 1 ?? 2.0;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic vIfNull = 1 ?? 2.0;
+''');
+    }
   }
 
   test_const_topLevel_literal() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const vNull = null;
 const vBoolFalse = false;
 const vBoolTrue = true;
@@ -2372,31 +4886,107 @@
 const vStringInterpolation = 'aaa ${true} ${42} bbb';
 const vSymbol = #aaa.bbb.ccc;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic vNull = null;
+const bool vBoolFalse = false;
+const bool vBoolTrue = true;
+const int vInt = 1;
+const int vIntLong = 44998905507923676709665;
+const double vDouble = 2.3;
+const String vString = 'abc';
+const String vStringConcat = 'aaabbb';
+const String vStringInterpolation = 'aaa ${true} ${42} bbb';
+const Symbol vSymbol = #aaa.bbb.ccc;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic vNull = null;
+const dynamic vBoolFalse = false;
+const dynamic vBoolTrue = true;
+const dynamic vInt = 1;
+const dynamic vIntLong = 44998905507923676709665;
+const dynamic vDouble = 2.3;
+const dynamic vString = 'abc';
+const dynamic vStringConcat = 'aaabbb';
+const dynamic vStringInterpolation = 'aaa ${true} ${42} bbb';
+const dynamic vSymbol = #aaa.bbb.ccc;
+''');
+    }
   }
 
   test_const_topLevel_prefix() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const vNotEqual = 1 != 2;
 const vNot = !true;
 const vNegate = -1;
 const vComplement = ~1;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const bool vNotEqual = 1 != 2;
+const bool vNot = !true;
+const int vNegate = -1;
+const int vComplement = ~1;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic vNotEqual = 1 != 2;
+const dynamic vNot = !true;
+const dynamic vNegate = -1;
+const dynamic vComplement = ~1;
+''');
+    }
   }
 
   test_const_topLevel_super() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const vSuper = super;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic vSuper = super;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic vSuper = super;
+''');
+    }
   }
 
   test_const_topLevel_this() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const vThis = this;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic vThis = this;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic vThis = this;
+''');
+    }
   }
 
   test_const_topLevel_typedList() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const vNull = const <Null>[];
 const vDynamic = const <dynamic>[1, 2, 3];
 const vInterfaceNoTypeParameters = const <int>[1, 2, 3];
@@ -2404,101 +4994,313 @@
 const vInterfaceWithTypeArguments = const <List<String>>[];
 const vInterfaceWithTypeArguments2 = const <Map<int, List<String>>>[];
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const List<Null> vNull = const <Null>[];
+const List<dynamic> vDynamic = const <dynamic>[1, 2, 3];
+const List<int> vInterfaceNoTypeParameters = const <int>[1, 2, 3];
+const List<List<dynamic>> vInterfaceNoTypeArguments = const <List>[];
+const List<List<String>> vInterfaceWithTypeArguments = const <List<String>>[];
+const List<Map<int, List<String>>> vInterfaceWithTypeArguments2 = const <Map<int, List<String>>>[];
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic vNull = const <Null>[];
+const dynamic vDynamic = const <dynamic>[1, 2, 3];
+const dynamic vInterfaceNoTypeParameters = const <int>[1, 2, 3];
+const dynamic vInterfaceNoTypeArguments = const <List>[];
+const dynamic vInterfaceWithTypeArguments = const <List<String>>[];
+const dynamic vInterfaceWithTypeArguments2 = const <Map<int, List<String>>>[];
+''');
+    }
   }
 
   test_const_topLevel_typedList_imported() {
     addLibrarySource('/a.dart', 'class C {}');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart';
 const v = const <C>[];
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const List<C> v = const <C>[];
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+const dynamic v = const <C>[];
+''');
+    }
   }
 
   test_const_topLevel_typedList_importedWithPrefix() {
     addLibrarySource('/a.dart', 'class C {}');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'a.dart' as p;
 const v = const <p.C>[];
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const List<C> v = const <C>[];
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as p;
+const dynamic v = const <C>[];
+''');
+    }
   }
 
   test_const_topLevel_typedMap() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const vDynamic1 = const <dynamic, int>{};
 const vDynamic2 = const <int, dynamic>{};
 const vInterface = const <int, String>{};
 const vInterfaceWithTypeArguments = const <int, List<String>>{};
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const Map<dynamic, int> vDynamic1 = const <dynamic, int>{};
+const Map<int, dynamic> vDynamic2 = const <int, dynamic>{};
+const Map<int, String> vInterface = const <int, String>{};
+const Map<int, List<String>> vInterfaceWithTypeArguments = const <int, List<String>>{};
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic vDynamic1 = const <dynamic, int>{};
+const dynamic vDynamic2 = const <int, dynamic>{};
+const dynamic vInterface = const <int, String>{};
+const dynamic vInterfaceWithTypeArguments = const <int, List<String>>{};
+''');
+    }
   }
 
   test_const_topLevel_untypedList() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const v = const [1, 2, 3];
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const List<int> v = const [1, 2, 3];
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic v = const [1, 2, 3];
+''');
+    }
   }
 
   test_const_topLevel_untypedMap() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 const v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const Map<int, String> v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic v = const {0: 'aaa', 1: 'bbb', 2: 'ccc'};
+''');
+    }
   }
 
   test_constExpr_pushReference_field_simpleIdentifier() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   static const a = b;
   static const b = null;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const dynamic a = C.b;
+  static const dynamic b = null;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const dynamic a = C.b;
+  static const dynamic b = null;
+}
+''');
+    }
   }
 
   test_constExpr_pushReference_staticMethod_simpleIdentifier() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   static const a = m;
   static m() {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const () → dynamic a = C.m;
+  static dynamic m() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const dynamic a = C.m;
+  static dynamic m() {}
+}
+''');
+    }
   }
 
   test_constructor_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   /**
    * Docs
    */
   C();
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  /**
+   * Docs
+   */
+  C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  /**
+   * Docs
+   */
+  C();
+}
+''');
+    }
   }
 
   test_constructor_initializers_assertInvocation() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   const C(int x) : assert(x >= 42);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C(int x) : assert(x >= 42);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C(int x) : assert(x >= 42);
+}
+''');
+    }
   }
 
   test_constructor_initializers_assertInvocation_message() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   const C(int x) : assert(x >= 42, 'foo');
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C(int x) : assert(x >= 42, 'foo');
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C(int x) : assert(x >= 42, 'foo');
+}
+''');
+    }
   }
 
   test_constructor_initializers_field() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   final x;
   const C() : x = 42;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C() : x = 42;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C() : x = 42;
+}
+''');
+    }
   }
 
   test_constructor_initializers_field_notConst() {
     variablesWithNotConstInitializers.add('x');
-    checkLibrary(
+    var library = checkLibrary(
         '''
 class C {
   final x;
@@ -2507,19 +5309,59 @@
 int foo() => 42;
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C() : x = $$invalidConstExpr$$;
+}
+int foo() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C() : x = $$invalidConstExpr$$;
+}
+int foo() {}
+''');
+    }
   }
 
   test_constructor_initializers_field_withParameter() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   final x;
   const C(int p) : x = 1 + p;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C(int p) : x = 1 + p;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C(int p) : x = 1 + p;
+}
+''');
+    }
   }
 
   test_constructor_initializers_superInvocation_named() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class A {
   const A.aaa(int p);
 }
@@ -2527,10 +5369,33 @@
   const C() : super.aaa(42);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A.aaa(int p);
+}
+class C extends A {
+  const C() : super.aaa(42);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A.aaa(int p);
+}
+class C extends A {
+  const C() : super.aaa(42);
+}
+''');
+    }
   }
 
   test_constructor_initializers_superInvocation_namedExpression() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class A {
   const A.aaa(a, {int b});
 }
@@ -2538,10 +5403,33 @@
   const C() : super.aaa(1, b: 2);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A.aaa(dynamic a, {int b});
+}
+class C extends A {
+  const C() : super.aaa(1, b: 2);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A.aaa(dynamic a, {int b});
+}
+class C extends A {
+  const C() : super.aaa(1, b: 2);
+}
+''');
+    }
   }
 
   test_constructor_initializers_superInvocation_unnamed() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class A {
   const A(int p);
 }
@@ -2549,37 +5437,117 @@
   const C.ccc() : super(42);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A(int p);
+}
+class C extends A {
+  const C.ccc() : super(42);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A(int p);
+}
+class C extends A {
+  const C.ccc() : super(42);
+}
+''');
+    }
   }
 
   test_constructor_initializers_thisInvocation_named() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   const C() : this.named(1, 'bbb');
   const C.named(int a, String b);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C() = C.named : this.named(1, 'bbb');
+  const C.named(int a, String b);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C() = C.named : this.named(1, 'bbb');
+  const C.named(int a, String b);
+}
+''');
+    }
   }
 
   test_constructor_initializers_thisInvocation_namedExpression() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   const C() : this.named(1, b: 2);
   const C.named(a, {int b});
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C() = C.named : this.named(1, b: 2);
+  const C.named(dynamic a, {int b});
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C() = C.named : this.named(1, b: 2);
+  const C.named(dynamic a, {int b});
+}
+''');
+    }
   }
 
   test_constructor_initializers_thisInvocation_unnamed() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   const C.named() : this(1, 'bbb');
   const C(int a, String b);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C.named() = C : this(1, 'bbb');
+  const C(int a, String b);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  const C.named() = C : this(1, 'bbb');
+  const C(int a, String b);
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_named() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   factory C() = D.named;
   C._();
@@ -2588,10 +5556,35 @@
   D.named() : super._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  factory C() = D.named;
+  C._();
+}
+class D extends C {
+  D.named();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  factory C() = D.named;
+  C._();
+}
+class D extends C {
+  D.named();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_named_generic() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T, U> {
   factory C() = D<U, T>.named;
   C._();
@@ -2600,6 +5593,31 @@
   D.named() : super._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  factory C() = D<U, T>.named;
+  C._();
+}
+class D<T, U> extends C<U, T> {
+  D.named();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  factory C() = D<U, T>.named;
+  C._();
+}
+class D<T, U> extends C<U, T> {
+  D.named();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_named_imported() {
@@ -2611,13 +5629,34 @@
   D.named() : super._();
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'foo.dart';
 class C {
   factory C() = D.named;
   C._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+class C {
+  factory C() = D.named;
+  C._();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+class C {
+  factory C() = D.named;
+  C._();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_named_imported_generic() {
@@ -2629,13 +5668,34 @@
   D.named() : super._();
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'foo.dart';
 class C<T, U> {
   factory C() = D<U, T>.named;
   C._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+class C<T, U> {
+  factory C() = D<U, T>.named;
+  C._();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+class C<T, U> {
+  factory C() = D<U, T>.named;
+  C._();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_named_prefixed() {
@@ -2647,13 +5707,34 @@
   D.named() : super._();
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'foo.dart' as foo;
 class C {
   factory C() = foo.D.named;
   C._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+class C {
+  factory C() = D.named;
+  C._();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+class C {
+  factory C() = D.named;
+  C._();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_named_prefixed_generic() {
@@ -2665,27 +5746,65 @@
   D.named() : super._();
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'foo.dart' as foo;
 class C<T, U> {
   factory C() = foo.D<U, T>.named;
   C._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+class C<T, U> {
+  factory C() = D<U, T>.named;
+  C._();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+class C<T, U> {
+  factory C() = D<U, T>.named;
+  C._();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_named_unresolved_class() {
-    checkLibrary(
+    var library = checkLibrary(
         '''
 class C<E> {
   factory C() = D.named<E>;
 }
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<E> {
+  factory C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<E> {
+  factory C();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_named_unresolved_constructor() {
-    checkLibrary(
+    var library = checkLibrary(
         '''
 class D {}
 class C<E> {
@@ -2693,10 +5812,31 @@
 }
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class D {
+}
+class C<E> {
+  factory C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class D {
+}
+class C<E> {
+  factory C();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_unnamed() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   factory C() = D;
   C._();
@@ -2705,10 +5845,35 @@
   D() : super._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  factory C() = D;
+  C._();
+}
+class D extends C {
+  D();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  factory C() = D;
+  C._();
+}
+class D extends C {
+  D();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_unnamed_generic() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T, U> {
   factory C() = D<U, T>;
   C._();
@@ -2717,6 +5882,31 @@
   D() : super._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  factory C() = D<U, T>;
+  C._();
+}
+class D<T, U> extends C<U, T> {
+  D();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  factory C() = D<U, T>;
+  C._();
+}
+class D<T, U> extends C<U, T> {
+  D();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_unnamed_imported() {
@@ -2728,13 +5918,34 @@
   D() : super._();
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'foo.dart';
 class C {
   factory C() = D;
   C._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+class C {
+  factory C() = D;
+  C._();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+class C {
+  factory C() = D;
+  C._();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_unnamed_imported_generic() {
@@ -2746,13 +5957,34 @@
   D() : super._();
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'foo.dart';
 class C<T, U> {
   factory C() = D<U, T>;
   C._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+class C<T, U> {
+  factory C() = D<U, T>;
+  C._();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+class C<T, U> {
+  factory C() = D<U, T>;
+  C._();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_unnamed_prefixed() {
@@ -2764,13 +5996,34 @@
   D() : super._();
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'foo.dart' as foo;
 class C {
   factory C() = foo.D;
   C._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+class C {
+  factory C() = D;
+  C._();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+class C {
+  factory C() = D;
+  C._();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_unnamed_prefixed_generic() {
@@ -2782,63 +6035,177 @@
   D() : super._();
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'foo.dart' as foo;
 class C<T, U> {
   factory C() = foo.D<U, T>;
   C._();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+class C<T, U> {
+  factory C() = D<U, T>;
+  C._();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+class C<T, U> {
+  factory C() = D<U, T>;
+  C._();
+}
+''');
+    }
   }
 
   test_constructor_redirected_factory_unnamed_unresolved() {
-    checkLibrary(
+    var library = checkLibrary(
         '''
 class C<E> {
   factory C() = D<E>;
 }
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<E> {
+  factory C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<E> {
+  factory C();
+}
+''');
+    }
   }
 
   test_constructor_redirected_thisInvocation_named() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   C.named();
   C() : this.named();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C.named();
+  C() = C.named;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C.named();
+  C() = C.named;
+}
+''');
+    }
   }
 
   test_constructor_redirected_thisInvocation_named_generic() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T> {
   C.named();
   C() : this.named();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  C.named();
+  C() = C<T>.named;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  C.named();
+  C() = C<T>.named;
+}
+''');
+    }
   }
 
   test_constructor_redirected_thisInvocation_unnamed() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   C();
   C.named() : this();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C();
+  C.named() = C;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C();
+  C.named() = C;
+}
+''');
+    }
   }
 
   test_constructor_redirected_thisInvocation_unnamed_generic() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T> {
   C();
   C.named() : this();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  C();
+  C.named() = C<T>;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  C();
+  C.named() = C<T>;
+}
+''');
+    }
   }
 
   test_constructor_withCycles_const() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   final x;
   const C() : x = const D();
@@ -2848,10 +6215,37 @@
   const D() : x = const C();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C() : x = const D();
+}
+class D {
+  final dynamic x;
+  const D() : x = const C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  const C() : x = const D();
+}
+class D {
+  final dynamic x;
+  const D() : x = const C();
+}
+''');
+    }
   }
 
   test_constructor_withCycles_nonConst() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   final x;
   C() : x = new D();
@@ -2861,10 +6255,37 @@
   D() : x = new C();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  C();
+}
+class D {
+  final dynamic x;
+  D();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x;
+  C();
+}
+class D {
+  final dynamic x;
+  D();
+}
+''');
+    }
   }
 
   test_defaultValue_refersToGenericClass_constructor() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class B<T> {
   const B();
 }
@@ -2872,10 +6293,33 @@
   const C([B<T> b = const B()]);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class B<T> {
+  const B();
+}
+class C<T> {
+  const C([B<T> b = const B()]);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class B<T> {
+  const B();
+}
+class C<T> {
+  const C([B<T> b = const B()]);
+}
+''');
+    }
   }
 
   test_defaultValue_refersToGenericClass_constructor2() {
-    checkLibrary('''
+    var library = checkLibrary('''
 abstract class A<T> {}
 class B<T> implements A<T> {
   const B();
@@ -2884,19 +6328,65 @@
   const C([A<T> a = const B()]);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+abstract class A<T> {
+}
+class B<T> implements A<T> {
+  const B();
+}
+class C<T> implements A<Iterable<T>> {
+  const C([A<T> a = const B()]);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+abstract class A<T> {
+}
+class B<T> implements A<T> {
+  const B();
+}
+class C<T> implements A<Iterable<T>> {
+  const C([A<T> a = const B()]);
+}
+''');
+    }
   }
 
   test_defaultValue_refersToGenericClass_functionG() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class B<T> {
   const B();
 }
 void foo<T>([B<T> b = const B()]) {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class B<T> {
+  const B();
+}
+void foo<T>([B<T> b = const B()]) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class B<T> {
+  const B();
+}
+void foo<T>([B<T> b = const B()]) {}
+''');
+    }
   }
 
   test_defaultValue_refersToGenericClass_methodG() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class B<T> {
   const B();
 }
@@ -2904,10 +6394,33 @@
   void foo<T>([B<T> b = const B()]) {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class B<T> {
+  const B();
+}
+class C {
+  void foo<T>([B<T> b = const B()]) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class B<T> {
+  const B();
+}
+class C {
+  void foo<T>([B<T> b = const B()]) {}
+}
+''');
+    }
   }
 
   test_defaultValue_refersToGenericClass_methodG_classG() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class B<T1, T2> {
   const B();
 }
@@ -2915,10 +6428,33 @@
   void foo<E2>([B<E1, E2> b = const B()]) {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class B<T1, T2> {
+  const B();
+}
+class C<E1> {
+  void foo<E2>([B<E1, E2> b = const B()]) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class B<T1, T2> {
+  const B();
+}
+class C<E1> {
+  void foo<E2>([B<E1, E2> b = const B()]) {}
+}
+''');
+    }
   }
 
   test_defaultValue_refersToGenericClass_methodNG() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class B<T> {
   const B();
 }
@@ -2926,37 +6462,168 @@
   void foo([B<T> b = const B()]) {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class B<T> {
+  const B();
+}
+class C<T> {
+  void foo([B<T> b = const B()]) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class B<T> {
+  const B();
+}
+class C<T> {
+  void foo([B<T> b = const B()]) {}
+}
+''');
+    }
   }
 
   test_enum_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 // Extra comment so doc comment offset != 0
 /**
  * Docs
  */
 enum E { v }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+''');
+    }
   }
 
   test_enum_value_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 enum E {
   /**
    * Docs
    */
   v
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+enum E {
+  final int index;
+  static const List<E> values;
+  /**
+   * Docs
+   */
+  static const E v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+enum E {
+  final int index;
+  static const List<E> values;
+  /**
+   * Docs
+   */
+  static const E v;
+}
+''');
+    }
   }
 
   test_enum_values() {
-    checkLibrary('enum E { v1, v2 }');
+    var library = checkLibrary('enum E { v1, v2 }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v1;
+  static const E v2;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v1;
+  static const E v2;
+}
+''');
+    }
   }
 
   test_enums() {
-    checkLibrary('enum E1 { v1 } enum E2 { v2 }');
+    var library = checkLibrary('enum E1 { v1 } enum E2 { v2 }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+enum E1 {
+  final int index;
+  static const List<E1> values;
+  static const E1 v1;
+}
+enum E2 {
+  final int index;
+  static const List<E2> values;
+  static const E2 v2;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+enum E1 {
+  final int index;
+  static const List<E1> values;
+  static const E1 v1;
+}
+enum E2 {
+  final int index;
+  static const List<E2> values;
+  static const E2 v2;
+}
+''');
+    }
   }
 
   test_error_extendsEnum() {
-    checkLibrary('''
+    var library = checkLibrary('''
 enum E {a, b, c}
 
 class M {}
@@ -2975,24 +6642,120 @@
 
 class D = Object with M, E;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E a;
+  static const E b;
+  static const E c;
+}
+class M {
+}
+class A {
+  dynamic foo() {}
+}
+class B implements M {
+  dynamic foo() {}
+}
+class C extends Object with M {
+  synthetic C();
+  dynamic foo() {}
+}
+class alias D extends Object with M {
+  synthetic D() = Object;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E a;
+  static const E b;
+  static const E c;
+}
+class M {
+}
+class A {
+  dynamic foo() {}
+}
+class B implements M {
+  dynamic foo() {}
+}
+class C extends Object with M {
+  synthetic C();
+  dynamic foo() {}
+}
+class alias D extends Object with M {
+  synthetic D() = Object;
+}
+''');
+    }
   }
 
   test_executable_parameter_type_typedef() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 typedef F(int p);
 main(F f) {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(int p);
+dynamic main(F f) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(int p);
+dynamic main(F f) {}
+''');
+    }
   }
 
   test_export_class() {
     addLibrarySource('/a.dart', 'class C {}');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_export_class_type_alias() {
     addLibrarySource(
         '/a.dart', 'class C {} exends _D with _E; class _D {} class _E {}');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_export_configurations_useDefault() {
@@ -3005,6 +6768,19 @@
   if (dart.library.io) 'foo_io.dart'
   if (dart.library.html) 'foo_html.dart';
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'foo.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'foo.dart';
+''');
+    }
     expect(library.exports[0].uri, 'foo.dart');
     expect(library.exports[0].exportedLibrary.source.shortName, 'foo.dart');
   }
@@ -3020,6 +6796,19 @@
   if (dart.library.io) 'foo_io.dart'
   if (dart.library.html) 'foo_html.dart';
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'foo_io.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'foo_io.dart';
+''');
+    }
     expect(library.exports[0].uri, 'foo_io.dart');
     expect(library.exports[0].exportedLibrary.source.shortName, 'foo_io.dart');
   }
@@ -3035,6 +6824,19 @@
   if (dart.library.io) 'foo_io.dart'
   if (dart.library.html) 'foo_html.dart';
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'foo_html.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'foo_html.dart';
+''');
+    }
     ExportElement export = library.exports[0];
     expect(export.uri, 'foo_html.dart');
     expect(export.exportedLibrary.source.shortName, 'foo_html.dart');
@@ -3042,52 +6844,182 @@
 
   test_export_function() {
     addLibrarySource('/a.dart', 'f() {}');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_export_getter() {
     addLibrarySource('/a.dart', 'get f() => null;');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_export_hide() {
     addLibrary('dart:async');
-    checkLibrary('export "dart:async" hide Stream, Future;');
+    var library = checkLibrary('export "dart:async" hide Stream, Future;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'dart:async' hide Stream, Future;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'dart:async' hide Stream, Future;
+''');
+    }
   }
 
   test_export_multiple_combinators() {
     addLibrary('dart:async');
-    checkLibrary('export "dart:async" hide Stream show Future;');
+    var library = checkLibrary('export "dart:async" hide Stream show Future;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'dart:async' hide Stream show Future;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'dart:async' hide Stream show Future;
+''');
+    }
   }
 
   test_export_setter() {
     addLibrarySource('/a.dart', 'void set f(value) {}');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_export_show() {
     addLibrary('dart:async');
-    checkLibrary('export "dart:async" show Future, Stream;');
+    var library = checkLibrary('export "dart:async" show Future, Stream;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'dart:async' show Future, Stream;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'dart:async' show Future, Stream;
+''');
+    }
   }
 
   test_export_typedef() {
     addLibrarySource('/a.dart', 'typedef F();');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_export_variable() {
     addLibrarySource('/a.dart', 'var x;');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_export_variable_const() {
     addLibrarySource('/a.dart', 'const x = 0;');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_export_variable_final() {
     addLibrarySource('/a.dart', 'final x = 0;');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_exportImport_configurations_useDefault() {
@@ -3106,6 +7038,23 @@
 import 'bar.dart';
 class B extends A {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'bar.dart';
+class B extends A {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'bar.dart';
+class B extends A {
+}
+''');
+    }
     var typeA = library.definingCompilationUnit.getType('B').supertype;
     expect(typeA.element.source.shortName, 'foo.dart');
   }
@@ -3127,6 +7076,23 @@
 import 'bar.dart';
 class B extends A {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'bar.dart';
+class B extends A {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'bar.dart';
+class B extends A {
+}
+''');
+    }
     var typeA = library.definingCompilationUnit.getType('B').supertype;
     expect(typeA.element.source.shortName, 'foo_io.dart');
   }
@@ -3134,215 +7100,849 @@
   test_exports() {
     addLibrarySource('/a.dart', 'library a;');
     addLibrarySource('/b.dart', 'library b;');
-    checkLibrary('export "a.dart"; export "b.dart";');
+    var library = checkLibrary('export "a.dart"; export "b.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+export 'b.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+export 'b.dart';
+''');
+    }
   }
 
   test_expr_invalid_typeParameter_asPrefix() {
     variablesWithNotConstInitializers.add('f');
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T> {
   final f = T.k;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  final dynamic f = $$invalidConstExpr$$;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  final dynamic f = $$invalidConstExpr$$;
+}
+''');
+    }
   }
 
   test_field_covariant() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   covariant int x;
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  covariant int x;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  covariant int x;
+}
+''');
+    }
   }
 
   test_field_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   /**
    * Docs
    */
   var x;
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  /**
+   * Docs
+   */
+  dynamic x;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  /**
+   * Docs
+   */
+  dynamic x;
+}
+''');
+    }
   }
 
   test_field_formal_param_inferred_type_implicit() {
-    checkLibrary('class C extends D { var v; C(this.v); }'
+    var library = checkLibrary('class C extends D { var v; C(this.v); }'
         ' abstract class D { int get v; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  int v;
+  C(int this.v);
+}
+abstract class D {
+  int get v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  dynamic v;
+  C(dynamic this.v);
+}
+abstract class D {
+  int get v;
+}
+''');
+    }
   }
 
   test_field_inferred_type_nonStatic_explicit_initialized() {
-    checkLibrary('class C { num v = 0; }');
+    var library = checkLibrary('class C { num v = 0; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  num v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  num v;
+}
+''');
+    }
   }
 
   test_field_inferred_type_nonStatic_implicit_initialized() {
-    checkLibrary('class C { var v = 0; }');
+    var library = checkLibrary('class C { var v = 0; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic v;
+}
+''');
+    }
   }
 
   test_field_inferred_type_nonStatic_implicit_uninitialized() {
-    checkLibrary(
+    var library = checkLibrary(
         'class C extends D { var v; } abstract class D { int get v; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  int v;
+}
+abstract class D {
+  int get v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  dynamic v;
+}
+abstract class D {
+  int get v;
+}
+''');
+    }
   }
 
   test_field_inferred_type_static_implicit_initialized() {
-    checkLibrary('class C { static var v = 0; }');
+    var library = checkLibrary('class C { static var v = 0; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static int v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static dynamic v;
+}
+''');
+    }
   }
 
   test_field_propagatedType_const_noDep() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   static const x = 0;
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const int x = 0;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static const dynamic x = 0;
+}
+''');
+    }
   }
 
   test_field_propagatedType_final_dep_inLib() {
     addLibrarySource('/a.dart', 'final a = 1;');
-    checkLibrary('''
+    var library = checkLibrary('''
 import "a.dart";
 class C {
   final b = a / 2;
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+class C {
+  final num b = a / 2;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+class C {
+  final dynamic b = a / 2;
+}
+''');
+    }
   }
 
   test_field_propagatedType_final_dep_inPart() {
     addSource('/a.dart', 'part of lib; final a = 1;');
-    checkLibrary('''
+    var library = checkLibrary('''
 library lib;
 part "a.dart";
 class C {
   final b = a / 2;
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library lib;
+part 'a.dart';
+class C {
+  final num b = a / 2;
+}
+--------------------
+unit: a.dart
+
+final int a;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library lib;
+part 'a.dart';
+class C {
+  final dynamic b = a / 2;
+}
+--------------------
+unit: a.dart
+
+final dynamic a;
+''');
+    }
   }
 
   test_field_propagatedType_final_noDep_instance() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   final x = 0;
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final int x = 0;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  final dynamic x = 0;
+}
+''');
+    }
   }
 
   test_field_propagatedType_final_noDep_static() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   static final x = 0;
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static final int x;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static final dynamic x;
+}
+''');
+    }
   }
 
   test_field_static_final_untyped() {
-    checkLibrary('class C { static final x = 0; }');
+    var library = checkLibrary('class C { static final x = 0; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static final int x;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static final dynamic x;
+}
+''');
+    }
   }
 
   test_field_untyped() {
-    checkLibrary('class C { var x = 0; }');
+    var library = checkLibrary('class C { var x = 0; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int x;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+}
+''');
+    }
   }
 
   test_function_async() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'dart:async';
 Future f() async {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+Future<dynamic> f() async {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+Future<dynamic> f() async {}
+''');
+    }
   }
 
   test_function_asyncStar() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'dart:async';
 Stream f() async* {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+Stream<dynamic> f() async* {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+Stream<dynamic> f() async* {}
+''');
+    }
   }
 
   test_function_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 // Extra comment so doc comment offset != 0
 /**
  * Docs
  */
 f() {}''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+''');
+    }
   }
 
   test_function_entry_point() {
-    checkLibrary('main() {}');
+    var library = checkLibrary('main() {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic main() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic main() {}
+''');
+    }
   }
 
   test_function_entry_point_in_export() {
     addLibrarySource('/a.dart', 'library a; main() {}');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_function_entry_point_in_export_hidden() {
     addLibrarySource('/a.dart', 'library a; main() {}');
-    checkLibrary('export "a.dart" hide main;');
+    var library = checkLibrary('export "a.dart" hide main;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart' hide main;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart' hide main;
+''');
+    }
   }
 
   test_function_entry_point_in_part() {
     addSource('/a.dart', 'part of my.lib; main() {}');
-    checkLibrary('library my.lib; part "a.dart";');
+    var library = checkLibrary('library my.lib; part "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+--------------------
+unit: a.dart
+
+dynamic main() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+--------------------
+unit: a.dart
+
+dynamic main() {}
+''');
+    }
   }
 
   test_function_external() {
-    checkLibrary('external f();');
+    var library = checkLibrary('external f();');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+external dynamic f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+external dynamic f() {}
+''');
+    }
   }
 
   test_function_parameter_final() {
-    checkLibrary('f(final x) {}');
+    var library = checkLibrary('f(final x) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f(final dynamic x) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f(final dynamic x) {}
+''');
+    }
   }
 
   test_function_parameter_kind_named() {
-    checkLibrary('f({x}) {}');
+    var library = checkLibrary('f({x}) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f({dynamic x}) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f({dynamic x}) {}
+''');
+    }
   }
 
   test_function_parameter_kind_positional() {
-    checkLibrary('f([x]) {}');
+    var library = checkLibrary('f([x]) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f([dynamic x]) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f([dynamic x]) {}
+''');
+    }
   }
 
   test_function_parameter_kind_required() {
-    checkLibrary('f(x) {}');
+    var library = checkLibrary('f(x) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f(dynamic x) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f(dynamic x) {}
+''');
+    }
   }
 
   test_function_parameter_parameters() {
-    checkLibrary('f(g(x, y)) {}');
+    var library = checkLibrary('f(g(x, y)) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f((dynamic, dynamic) → dynamic g) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f((dynamic, dynamic) → dynamic g) {}
+''');
+    }
   }
 
   test_function_parameter_return_type() {
-    checkLibrary('f(int g()) {}');
+    var library = checkLibrary('f(int g()) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f(() → int g) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f(() → int g) {}
+''');
+    }
   }
 
   test_function_parameter_return_type_void() {
-    checkLibrary('f(void g()) {}');
+    var library = checkLibrary('f(void g()) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f(() → void g) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f(() → void g) {}
+''');
+    }
   }
 
   test_function_parameter_type() {
-    checkLibrary('f(int i) {}');
+    var library = checkLibrary('f(int i) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f(int i) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f(int i) {}
+''');
+    }
   }
 
   test_function_parameters() {
-    checkLibrary('f(x, y) {}');
+    var library = checkLibrary('f(x, y) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f(dynamic x, dynamic y) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f(dynamic x, dynamic y) {}
+''');
+    }
   }
 
   test_function_return_type() {
-    checkLibrary('int f() => null;');
+    var library = checkLibrary('int f() => null;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+int f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+int f() {}
+''');
+    }
   }
 
   test_function_return_type_implicit() {
-    checkLibrary('f() => null;');
+    var library = checkLibrary('f() => null;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+''');
+    }
   }
 
   test_function_return_type_void() {
-    checkLibrary('void f() {}');
+    var library = checkLibrary('void f() {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+void f() {}
+''');
+    }
   }
 
   test_function_type_parameter() {
     prepareAnalysisContext(createOptions());
-    checkLibrary('T f<T, U>(U u) => null;');
+    var library = checkLibrary('T f<T, U>(U u) => null;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+T f<T, U>(U u) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+T f<T, U>(U u) {}
+''');
+    }
   }
 
   test_function_type_parameter_with_function_typed_parameter() {
     prepareAnalysisContext(createOptions());
-    checkLibrary('void f<T, U>(T x(U u)) {}');
+    var library = checkLibrary('void f<T, U>(T x(U u)) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void f<T, U>((U) → T x) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+void f<T, U>((U) → T x) {}
+''');
+    }
   }
 
   test_functions() {
-    checkLibrary('f() {} g() {}');
+    var library = checkLibrary('f() {} g() {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+dynamic g() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+dynamic g() {}
+''');
+    }
   }
 
   test_futureOr() {
     var library = checkLibrary('import "dart:async"; FutureOr<int> x;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+FutureOr<int> x;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+dynamic x;
+''');
+    }
     var variables = library.definingCompilationUnit.topLevelVariables;
     expect(variables, hasLength(1));
     if (createOptions().strongMode) {
@@ -3354,6 +7954,21 @@
 
   test_futureOr_const() {
     var library = checkLibrary('import "dart:async"; const x = FutureOr;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+const Type x = FutureOr;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+const dynamic x = FutureOr;
+''');
+    }
     var variables = library.definingCompilationUnit.topLevelVariables;
     expect(variables, hasLength(1));
     var x = variables[0] as ConstTopLevelVariableElementImpl;
@@ -3372,6 +7987,25 @@
 var x = f();
 var y = x.then((z) => z.asDouble());
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+FutureOr<int> x;
+dynamic y;
+FutureOr<int> f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+dynamic x;
+dynamic y;
+dynamic f() {}
+''');
+    }
     var variables = library.definingCompilationUnit.topLevelVariables;
     expect(variables, hasLength(2));
     var x = variables[0];
@@ -3389,7 +8023,7 @@
 
   test_generic_gClass_gMethodStatic() {
     prepareAnalysisContext(createOptions());
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T, U> {
   static void m<V, W>(V v, W w) {
     void f<X, Y>(V v, W w, X x, Y y) {
@@ -3397,6 +8031,23 @@
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  static void m<V, W>(V v, W w) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  static void m<V, W>(V v, W w) {}
+}
+''');
+    }
   }
 
   test_getElement_constructor_named() {
@@ -3482,33 +8133,133 @@
   }
 
   test_getter_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 // Extra comment so doc comment offset != 0
 /**
  * Docs
  */
 get x => null;''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+dynamic get x {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+dynamic get x {}
+''');
+    }
   }
 
   test_getter_external() {
-    checkLibrary('external int get x;');
+    var library = checkLibrary('external int get x;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+external int get x {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+external int get x {}
+''');
+    }
   }
 
   test_getter_inferred_type_nonStatic_implicit_return() {
-    checkLibrary(
+    var library = checkLibrary(
         'class C extends D { get f => null; } abstract class D { int get f; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  int get f {}
+}
+abstract class D {
+  int get f;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  dynamic get f {}
+}
+abstract class D {
+  int get f;
+}
+''');
+    }
   }
 
   test_getters() {
-    checkLibrary('int get x => null; get y => null;');
+    var library = checkLibrary('int get x => null; get y => null;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+int get x {}
+dynamic get y {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+int get x {}
+dynamic get y {}
+''');
+    }
   }
 
   test_implicitTopLevelVariable_getterFirst() {
-    checkLibrary('int get x => 0; void set x(int value) {}');
+    var library = checkLibrary('int get x => 0; void set x(int value) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+int get x {}
+void set x(int value) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+int get x {}
+void set x(int value) {}
+''');
+    }
   }
 
   test_implicitTopLevelVariable_setterFirst() {
-    checkLibrary('void set x(int value) {} int get x => 0;');
+    var library = checkLibrary('void set x(int value) {} int get x => 0;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void set x(int value) {}
+int get x {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+void set x(int value) {}
+int get x {}
+''');
+    }
   }
 
   test_import_configurations_useDefault() {
@@ -3523,6 +8274,23 @@
 
 class B extends A {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+class B extends A {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+class B extends A {
+}
+''');
+    }
     var typeA = library.definingCompilationUnit.getType('B').supertype;
     expect(typeA.element.source.shortName, 'foo.dart');
   }
@@ -3540,28 +8308,108 @@
 
 class B extends A {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo_io.dart';
+class B extends A {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo_io.dart';
+class B extends A {
+}
+''');
+    }
     var typeA = library.definingCompilationUnit.getType('B').supertype;
     expect(typeA.element.source.shortName, 'foo_io.dart');
   }
 
   test_import_deferred() {
     addLibrarySource('/a.dart', 'f() {}');
-    checkLibrary('import "a.dart" deferred as p; main() { p.f(); }');
+    var library =
+        checkLibrary('import "a.dart" deferred as p; main() { p.f(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' deferred as p;
+dynamic main() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' deferred as p;
+dynamic main() {}
+''');
+    }
   }
 
   test_import_hide() {
     addLibrary('dart:async');
-    checkLibrary('import "dart:async" hide Stream, Completer; Future f;');
+    var library =
+        checkLibrary('import "dart:async" hide Stream, Completer; Future f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' hide Stream, Completer;
+Future<dynamic> f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' hide Stream, Completer;
+Future<dynamic> f;
+''');
+    }
   }
 
   test_import_multiple_combinators() {
     addLibrary('dart:async');
-    checkLibrary('import "dart:async" hide Stream show Future; Future f;');
+    var library =
+        checkLibrary('import "dart:async" hide Stream show Future; Future f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' hide Stream show Future;
+Future<dynamic> f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' hide Stream show Future;
+Future<dynamic> f;
+''');
+    }
   }
 
   test_import_prefixed() {
     addLibrarySource('/a.dart', 'library a; class C {}');
-    checkLibrary('import "a.dart" as a; a.C c;');
+    var library = checkLibrary('import "a.dart" as a; a.C c;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as a;
+C c;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as a;
+C c;
+''');
+    }
   }
 
   test_import_self() {
@@ -3574,6 +8422,27 @@
     expect(resynthesized.imports[0].importedLibrary.location,
         resynthesized.location);
     expect(resynthesized.imports[1].importedLibrary.isDartCore, true);
+    if (isStrongMode) {
+      checkElementText(
+          resynthesized,
+          r'''
+import 'test.dart' as p;
+class C {
+}
+class D extends C {
+}
+''');
+    } else {
+      checkElementText(
+          resynthesized,
+          r'''
+import 'test.dart' as p;
+class C {
+}
+class D extends C {
+}
+''');
+    }
   }
 
   test_import_short_absolute() {
@@ -3582,78 +8451,212 @@
     var destinationPath =
         resourceProvider.pathContext.fromUri(Uri.parse('/a.dart'));
     addLibrarySource(destinationPath, 'class C {}');
-    checkLibrary('import "/a.dart"; C c;');
+    var library = checkLibrary('import "/a.dart"; C c;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import '/a.dart';
+C c;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import '/a.dart';
+C c;
+''');
+    }
   }
 
   test_import_show() {
     addLibrary('dart:async');
-    checkLibrary('''
+    var library = checkLibrary('''
 import "dart:async" show Future, Stream;
 Future f;
 Stream s;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' show Future, Stream;
+Future<dynamic> f;
+Stream<dynamic> s;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' show Future, Stream;
+Future<dynamic> f;
+Stream<dynamic> s;
+''');
+    }
   }
 
   test_imports() {
     addLibrarySource('/a.dart', 'library a; class C {}');
     addLibrarySource('/b.dart', 'library b; class D {}');
-    checkLibrary('import "a.dart"; import "b.dart"; C c; D d;');
+    var library = checkLibrary('import "a.dart"; import "b.dart"; C c; D d;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+import 'b.dart';
+C c;
+D d;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+import 'b.dart';
+C c;
+D d;
+''');
+    }
   }
 
   test_inferred_function_type_for_variable_in_generic_function() {
     // In the code below, `x` has an inferred type of `() => int`, with 2
     // (unused) type parameters from the enclosing top level function.
-    checkLibrary('''
+    var library = checkLibrary('''
 f<U, V>() {
   var x = () => 0;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f<U, V>() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f<U, V>() {}
+''');
+    }
   }
 
   test_inferred_function_type_in_generic_class_constructor() {
     // In the code below, `() => () => 0` has an inferred return type of
     // `() => int`, with 2 (unused) type parameters from the enclosing class.
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<U, V> {
   final x;
   C() : x = (() => () => 0);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<U, V> {
+  final dynamic x;
+  C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<U, V> {
+  final dynamic x;
+  C();
+}
+''');
+    }
   }
 
   test_inferred_function_type_in_generic_class_getter() {
     // In the code below, `() => () => 0` has an inferred return type of
     // `() => int`, with 2 (unused) type parameters from the enclosing class.
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<U, V> {
   get x => () => () => 0;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<U, V> {
+  dynamic get x {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<U, V> {
+  dynamic get x {}
+}
+''');
+    }
   }
 
   test_inferred_function_type_in_generic_class_in_generic_method() {
     // In the code below, `() => () => 0` has an inferred return type of
     // `() => int`, with 3 (unused) type parameters from the enclosing class
     // and method.
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T> {
   f<U, V>() {
     print(() => () => 0);
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  dynamic f<U, V>() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  dynamic f<U, V>() {}
+}
+''');
+    }
   }
 
   test_inferred_function_type_in_generic_class_setter() {
     // In the code below, `() => () => 0` has an inferred return type of
     // `() => int`, with 2 (unused) type parameters from the enclosing class.
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<U, V> {
   void set x(value) {
     print(() => () => 0);
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<U, V> {
+  void set x(dynamic value) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<U, V> {
+  void set x(dynamic value) {}
+}
+''');
+    }
   }
 
   test_inferred_function_type_in_generic_closure() {
@@ -3668,11 +8671,23 @@
     }
     // In the code below, `<U, V>() => () => 0` has an inferred return type of
     // `() => int`, with 3 (unused) type parameters.
-    checkLibrary('''
+    var library = checkLibrary('''
 f<T>() {
   print(/*<U, V>*/() => () => 0);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f<T>() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+''');
+    }
   }
 
   test_inferred_generic_function_type_in_generic_closure() {
@@ -3687,35 +8702,136 @@
     }
     // In the code below, `<U, V>() => <W, X, Y, Z>() => 0` has an inferred
     // return type of `() => int`, with 7 (unused) type parameters.
-    checkLibrary('''
+    var library = checkLibrary('''
 f<T>() {
   print(/*<U, V>*/() => /*<W, X, Y, Z>*/() => 0);
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f<T>() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+''');
+    }
   }
 
   test_inferred_type_is_typedef() {
-    checkLibrary('typedef int F(String s);'
+    var library = checkLibrary('typedef int F(String s);'
         ' class C extends D { var v; }'
         ' abstract class D { F get v; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef int F(String s);
+class C extends D {
+  F v;
+}
+abstract class D {
+  F get v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef int F(String s);
+class C extends D {
+  dynamic v;
+}
+abstract class D {
+  F get v;
+}
+''');
+    }
   }
 
   test_inferred_type_refers_to_bound_type_param() {
-    checkLibrary('class C<T> extends D<int, T> { var v; }'
+    var library = checkLibrary('class C<T> extends D<int, T> { var v; }'
         ' abstract class D<U, V> { Map<V, U> get v; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T> extends D<int, T> {
+  Map<T, int> v;
+}
+abstract class D<U, V> {
+  Map<V, U> get v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T> extends D<int, T> {
+  dynamic v;
+}
+abstract class D<U, V> {
+  Map<V, U> get v;
+}
+''');
+    }
   }
 
   void test_inferred_type_refers_to_function_typed_param_of_typedef() {
-    checkLibrary('''
+    var library = checkLibrary('''
 typedef void F(int g(String s));
 h(F f) => null;
 var v = h(/*info:INFERRED_TYPE_CLOSURE*/(y) {});
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef void F((String) → int g);
+dynamic v;
+dynamic h(F f) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef void F((String) → int g);
+dynamic v;
+dynamic h(F f) {}
+''');
+    }
   }
 
   test_inferred_type_refers_to_function_typed_parameter_type_generic_class() {
-    checkLibrary('class C<T, U> extends D<U, int> { void f(int x, g) {} }'
-        ' abstract class D<V, W> { void f(int x, W g(V s)); }');
+    var library =
+        checkLibrary('class C<T, U> extends D<U, int> { void f(int x, g) {} }'
+            ' abstract class D<V, W> { void f(int x, W g(V s)); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> extends D<U, int> {
+  void f(int x, (U) → int g) {}
+}
+abstract class D<V, W> {
+  void f(int x, (V) → W g);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> extends D<U, int> {
+  void f(int x, dynamic g) {}
+}
+abstract class D<V, W> {
+  void f(int x, (V) → W g);
+}
+''');
+    }
   }
 
   test_inferred_type_refers_to_function_typed_parameter_type_other_lib() {
@@ -3723,31 +8839,127 @@
         '/a.dart', 'import "b.dart"; abstract class D extends E {}');
     addLibrarySource(
         '/b.dart', 'abstract class E { void f(int x, int g(String s)); }');
-    checkLibrary('import "a.dart"; class C extends D { void f(int x, g) {} }');
+    var library = checkLibrary(
+        'import "a.dart"; class C extends D { void f(int x, g) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+class C extends D {
+  void f(int x, (String) → int g) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+class C extends D {
+  void f(int x, dynamic g) {}
+}
+''');
+    }
   }
 
   test_inferred_type_refers_to_method_function_typed_parameter_type() {
-    checkLibrary('class C extends D { void f(int x, g) {} }'
+    var library = checkLibrary('class C extends D { void f(int x, g) {} }'
         ' abstract class D { void f(int x, int g(String s)); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  void f(int x, (String) → int g) {}
+}
+abstract class D {
+  void f(int x, (String) → int g);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  void f(int x, dynamic g) {}
+}
+abstract class D {
+  void f(int x, (String) → int g);
+}
+''');
+    }
   }
 
   test_inferred_type_refers_to_nested_function_typed_param() {
-    checkLibrary('''
+    var library = checkLibrary('''
 f(void g(int x, void h())) => null;
 var v = f((x, y) {});
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic v;
+dynamic f((int, () → void) → void g) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic v;
+dynamic f((int, () → void) → void g) {}
+''');
+    }
   }
 
   test_inferred_type_refers_to_nested_function_typed_param_named() {
-    checkLibrary('''
+    var library = checkLibrary('''
 f({void g(int x, void h())}) => null;
 var v = f(g: (x, y) {});
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic v;
+dynamic f({(int, () → void) → void g}) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic v;
+dynamic f({(int, () → void) → void g}) {}
+''');
+    }
   }
 
   test_inferred_type_refers_to_setter_function_typed_parameter_type() {
-    checkLibrary('class C extends D { void set f(g) {} }'
+    var library = checkLibrary('class C extends D { void set f(g) {} }'
         ' abstract class D { void set f(int g(String s)); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  void set f((String) → int g) {}
+}
+abstract class D {
+  void set f((String) → int g);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  void set f(dynamic g) {}
+}
+abstract class D {
+  void set f((String) → int g);
+}
+''');
+    }
   }
 
   void test_inferredType_definedInSdkLibraryPart() {
@@ -3765,6 +8977,25 @@
   m(p) {}
 }
   ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+class B extends A {
+  dynamic m(Stream<dynamic> p) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+class B extends A {
+  dynamic m(dynamic p) {}
+}
+''');
+    }
     ClassElement b = library.definingCompilationUnit.types[0];
     ParameterElement p = b.methods[0].parameters[0];
     // This test should verify that we correctly record inferred types,
@@ -3777,15 +9008,32 @@
   }
 
   void test_inferredType_usesSyntheticFunctionType_functionTypedParam() {
-    checkLibrary('''
+    var library = checkLibrary('''
 int f(int x(String y)) => null;
 String g(int x(String y)) => null;
 var v = [f, g];
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+List<((String) → int) → Object> v;
+int f((String) → int x) {}
+String g((String) → int x) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic v;
+int f((String) → int x) {}
+String g((String) → int x) {}
+''');
+    }
   }
 
   test_inheritance_errors() {
-    checkLibrary('''
+    var library = checkLibrary('''
 abstract class A {
   int m();
 }
@@ -3800,63 +9048,214 @@
   var f;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+abstract class A {
+  int m();
+}
+abstract class B {
+  String m();
+}
+abstract class C implements A, B {
+}
+abstract class D extends C {
+  dynamic f;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+abstract class A {
+  int m();
+}
+abstract class B {
+  String m();
+}
+abstract class C implements A, B {
+}
+abstract class D extends C {
+  dynamic f;
+}
+''');
+    }
   }
 
   test_initializer_executable_with_return_type_from_closure() {
-    checkLibrary('var v = () => 0;');
+    var library = checkLibrary('var v = () => 0;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+() → int v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic v;
+''');
+    }
   }
 
   test_initializer_executable_with_return_type_from_closure_await_dynamic() {
-    checkLibrary('var v = (f) async => await f;');
+    var library = checkLibrary('var v = (f) async => await f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+(dynamic) → Future<dynamic> v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic v;
+''');
+    }
   }
 
   test_initializer_executable_with_return_type_from_closure_await_future3_int() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'dart:async';
 var v = (Future<Future<Future<int>>> f) async => await f;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+(Future<Future<Future<int>>>) → Future<int> v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+dynamic v;
+''');
+    }
   }
 
   test_initializer_executable_with_return_type_from_closure_await_future_int() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'dart:async';
 var v = (Future<int> f) async => await f;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+(Future<int>) → Future<int> v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+dynamic v;
+''');
+    }
   }
 
   test_initializer_executable_with_return_type_from_closure_await_future_noArg() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'dart:async';
 var v = (Future f) async => await f;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+(Future<dynamic>) → Future<dynamic> v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+dynamic v;
+''');
+    }
   }
 
   test_initializer_executable_with_return_type_from_closure_field() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   var v = () => 0;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  () → int v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic v;
+}
+''');
+    }
   }
 
   test_initializer_executable_with_return_type_from_closure_local() {
-    checkLibrary('''
+    var library = checkLibrary('''
 void f() {
   int u = 0;
   var v = () => 0;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+void f() {}
+''');
+    }
   }
 
   test_instantiateToBounds_boundRefersToEarlierTypeArgument() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<S extends num, T extends C<S, T>> {}
 C c;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<S extends num, T extends C<S, T>> {
+}
+C<num, C<num, dynamic>> c;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<S extends num, T extends C<S, T>> {
+}
+C<dynamic, dynamic> c;
+''');
+    }
   }
 
   test_instantiateToBounds_boundRefersToItself() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T extends C<T>> {}
 C c;
 var c2 = new C();
@@ -3864,27 +9263,101 @@
   var c3 = new C();
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T extends C<T>> {
+}
+class B {
+  C<C<dynamic>> c3;
+}
+C<C<dynamic>> c;
+C<C<dynamic>> c2;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T extends C<T>> {
+}
+class B {
+  dynamic c3;
+}
+C<dynamic> c;
+dynamic c2;
+''');
+    }
   }
 
   test_instantiateToBounds_boundRefersToLaterTypeArgument() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T extends C<T, U>, U extends num> {}
 C c;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T extends C<T, U>, U extends num> {
+}
+C<C<dynamic, num>, num> c;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T extends C<T, U>, U extends num> {
+}
+C<dynamic, dynamic> c;
+''');
+    }
   }
 
   test_instantiateToBounds_functionTypeAlias_simple() {
-    checkLibrary('''
+    var library = checkLibrary('''
 typedef F<T extends num>(T p);
 F f;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F<T extends num>(T p);
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F<T extends num>(T p);
+F f;
+''');
+    }
   }
 
   test_instantiateToBounds_simple() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T extends num> {}
 C c;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T extends num> {
+}
+C<num> c;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T extends num> {
+}
+C<dynamic> c;
+''');
+    }
   }
 
   test_invalid_annotation_prefixed_constructor() {
@@ -3895,11 +9368,30 @@
   const C.named();
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import "a.dart" as a;
 @a.C.named
 class D {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as a;
+@a.C.named
+class D {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as a;
+@a.C.named
+class D {
+}
+''');
+    }
   }
 
   test_invalid_annotation_unprefixed_constructor() {
@@ -3910,31 +9402,86 @@
   const C.named();
 }
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import "a.dart";
 @C.named
 class D {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+@C.named
+class D {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+@C.named
+class D {
+}
+''');
+    }
   }
 
   test_invalid_importPrefix_asTypeArgument() {
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'dart:async' as ppp;
 class C {
   List<ppp> v;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' as ppp;
+class C {
+  List<dynamic> v;
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' as ppp;
+class C {
+  List<dynamic> v;
+}
+''');
+    }
   }
 
   test_invalid_nameConflict_imported() {
     namesThatCannotBeResolved.add('V');
     addLibrarySource('/a.dart', 'V() {}');
     addLibrarySource('/b.dart', 'V() {}');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'a.dart';
 import 'b.dart';
 foo([p = V]) {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+import 'b.dart';
+dynamic foo([dynamic p = V]) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+import 'b.dart';
+dynamic foo([dynamic p = V]) {}
+''');
+    }
   }
 
   test_invalid_nameConflict_imported_exported() {
@@ -3947,41 +9494,109 @@
 export 'a.dart';
 export 'b.dart';
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'c.dart';
 foo([p = V]) {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'c.dart';
+dynamic foo([dynamic p = V]) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'c.dart';
+dynamic foo([dynamic p = V]) {}
+''');
+    }
   }
 
   test_invalid_nameConflict_local() {
     namesThatCannotBeResolved.add('V');
-    checkLibrary('''
+    var library = checkLibrary('''
 foo([p = V]) {}
 V() {}
 var V;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic V;
+dynamic foo([dynamic p = V]) {}
+dynamic V() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic V;
+dynamic foo([dynamic p = V]) {}
+dynamic V() {}
+''');
+    }
   }
 
   test_invalid_setterParameter_fieldFormalParameter() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   int foo;
   void set bar(this.foo) {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int foo;
+  void set bar(dynamic this.foo) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  int foo;
+  void set bar(dynamic this.foo) {}
+}
+''');
+    }
   }
 
   test_invalid_setterParameter_fieldFormalParameter_self() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   set x(this.x) {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x(dynamic this.x) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic set x(dynamic this.x) {}
+}
+''');
+    }
   }
 
   test_invalidUris() {
     allowMissingFiles = true;
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import '[invalid uri]';
 import '[invalid uri]:foo.dart';
 import 'a1.dart';
@@ -3998,31 +9613,104 @@
 part 'a3.dart';
 part '[invalid uri]';
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a1.dart';
+export 'a2.dart';
+part 'a3.dart';
+--------------------
+unit: a3.dart
+
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a1.dart';
+export 'a2.dart';
+part 'a3.dart';
+--------------------
+unit: a3.dart
+
+''');
+    }
   }
 
   test_library() {
-    checkLibrary('');
+    var library = checkLibrary('');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+''');
+    }
   }
 
   test_library_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 // Extra comment so doc comment offset != 0
 /**
  * Docs
  */
 library foo;''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library foo;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library foo;
+''');
+    }
   }
 
   test_library_name_with_spaces() {
-    checkLibrary('library foo . bar ;');
+    var library = checkLibrary('library foo . bar ;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library foo.bar;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library foo.bar;
+''');
+    }
   }
 
   test_library_named() {
-    checkLibrary('library foo.bar;');
+    var library = checkLibrary('library foo.bar;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library foo.bar;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library foo.bar;
+''');
+    }
   }
 
   test_localFunctions() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 f() {
   f1() {}
   {
@@ -4030,38 +9718,98 @@
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+''');
+    }
   }
 
   test_localFunctions_inConstructor() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   C() {
     f() {}
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C();
+}
+''');
+    }
   }
 
   test_localFunctions_inMethod() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   m() {
     f() {}
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic m() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic m() {}
+}
+''');
+    }
   }
 
   test_localFunctions_inTopLevelGetter() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 get g {
   f() {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic get g {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic get g {}
+''');
+    }
   }
 
   test_localLabels_inConstructor() {
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 class C {
   C() {
@@ -4074,10 +9822,27 @@
 }
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C();
+}
+''');
+    }
   }
 
   test_localLabels_inMethod() {
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 class C {
   m() {
@@ -4090,10 +9855,27 @@
 }
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic m() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic m() {}
+}
+''');
+    }
   }
 
   test_localLabels_inTopLevelFunction() {
-    checkLibrary(
+    var library = checkLibrary(
         r'''
 main() {
   aaa: while (true) {}
@@ -4104,10 +9886,23 @@
 }
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic main() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic main() {}
+''');
+    }
   }
 
   test_localVariables_inConstructor() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   C() {
     int v;
@@ -4115,10 +9910,27 @@
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C();
+}
+''');
+    }
   }
 
   test_localVariables_inLocalFunction() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 f() {
   f1() {
     int v1 = 1;
@@ -4131,20 +9943,50 @@
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+''');
+    }
   }
 
   test_localVariables_inMethod() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class C {
   m() {
     int v;
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic m() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic m() {}
+}
+''');
+    }
   }
 
   test_localVariables_inTopLevelFunction() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 main() {
   int v1 = 1;
   {
@@ -4153,260 +9995,1295 @@
   Map<int, List<double>> v3;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic main() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic main() {}
+''');
+    }
   }
 
   test_localVariables_inTopLevelGetter() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 get g {
   int v;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic get g {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic get g {}
+''');
+    }
   }
 
   test_main_class() {
-    checkLibrary('class main {}');
+    var library = checkLibrary('class main {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class main {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class main {
+}
+''');
+    }
   }
 
   test_main_class_alias() {
-    checkLibrary('class main = C with D; class C {} class D {}');
+    var library = checkLibrary('class main = C with D; class C {} class D {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class alias main extends C with D {
+  synthetic main() = C;
+}
+class C {
+}
+class D {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class alias main extends C with D {
+  synthetic main() = C;
+}
+class C {
+}
+class D {
+}
+''');
+    }
   }
 
   test_main_class_alias_via_export() {
     addLibrarySource('/a.dart', 'class main = C with D; class C {} class D {}');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_main_class_via_export() {
     addLibrarySource('/a.dart', 'class main {}');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_main_getter() {
-    checkLibrary('get main => null;');
+    var library = checkLibrary('get main => null;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic get main {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic get main {}
+''');
+    }
   }
 
   test_main_getter_via_export() {
     addLibrarySource('/a.dart', 'get main => null;');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_main_typedef() {
-    checkLibrary('typedef main();');
+    var library = checkLibrary('typedef main();');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic main();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic main();
+''');
+    }
   }
 
   test_main_typedef_via_export() {
     addLibrarySource('/a.dart', 'typedef main();');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_main_variable() {
-    checkLibrary('var main;');
+    var library = checkLibrary('var main;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic main;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic main;
+''');
+    }
   }
 
   test_main_variable_via_export() {
     addLibrarySource('/a.dart', 'var main;');
-    checkLibrary('export "a.dart";');
+    var library = checkLibrary('export "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'a.dart';
+''');
+    }
   }
 
   test_member_function_async() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'dart:async';
 class C {
   Future f() async {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+class C {
+  Future<dynamic> f() async {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+class C {
+  Future<dynamic> f() async {}
+}
+''');
+    }
   }
 
   test_member_function_asyncStar() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 import 'dart:async';
 class C {
   Stream f() async* {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+class C {
+  Stream<dynamic> f() async* {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async';
+class C {
+  Stream<dynamic> f() async* {}
+}
+''');
+    }
   }
 
   test_metadata_classDeclaration() {
-    checkLibrary('const a = null; @a class C {}');
+    var library = checkLibrary(r'''
+const a = null;
+const b = null;
+@a
+@b
+class C {}''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@a
+@b
+class C {
+}
+const dynamic a = null;
+const dynamic b = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@a
+@b
+class C {
+}
+const dynamic a = null;
+const dynamic b = null;
+''');
+    }
   }
 
   test_metadata_classTypeAlias() {
-    checkLibrary(
+    var library = checkLibrary(
         'const a = null; @a class C = D with E; class D {} class E {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@a
+class alias C extends D with E {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@a
+class alias C extends D with E {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_constructor_call_named() {
-    checkLibrary('class A { const A.named(); } @A.named() class C {}');
+    var library =
+        checkLibrary('class A { const A.named(); } @A.named() class C {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A.named();
+}
+@A.named()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A.named();
+}
+@A.named()
+class C {
+}
+''');
+    }
   }
 
   test_metadata_constructor_call_named_prefixed() {
     addLibrarySource('/foo.dart', 'class A { const A.named(); }');
-    checkLibrary('import "foo.dart" as foo; @foo.A.named() class C {}');
+    var library =
+        checkLibrary('import "foo.dart" as foo; @foo.A.named() class C {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+@A.named()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+@A.named()
+class C {
+}
+''');
+    }
   }
 
   test_metadata_constructor_call_unnamed() {
-    checkLibrary('class A { const A(); } @A() class C {}');
+    var library = checkLibrary('class A { const A(); } @A() class C {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A();
+}
+@A()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A();
+}
+@A()
+class C {
+}
+''');
+    }
   }
 
   test_metadata_constructor_call_unnamed_prefixed() {
     addLibrarySource('/foo.dart', 'class A { const A(); }');
-    checkLibrary('import "foo.dart" as foo; @foo.A() class C {}');
+    var library = checkLibrary('import "foo.dart" as foo; @foo.A() class C {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+@A()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart' as foo;
+@A()
+class C {
+}
+''');
+    }
   }
 
   test_metadata_constructor_call_with_args() {
-    checkLibrary('class A { const A(x); } @A(null) class C {}');
+    var library = checkLibrary('class A { const A(x); } @A(null) class C {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A(dynamic x);
+}
+@A(null)
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A(dynamic x);
+}
+@A(null)
+class C {
+}
+''');
+    }
   }
 
   test_metadata_constructorDeclaration_named() {
-    checkLibrary('const a = null; class C { @a C.named(); }');
+    var library = checkLibrary('const a = null; class C { @a C.named(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  C.named();
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  C.named();
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_constructorDeclaration_unnamed() {
-    checkLibrary('const a = null; class C { @a C(); }');
+    var library = checkLibrary('const a = null; class C { @a C(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  C();
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  C();
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_enumDeclaration() {
-    checkLibrary('const a = null; @a enum E { v }');
+    var library = checkLibrary('const a = null; @a enum E { v }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@a
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@a
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_exportDirective() {
     addLibrarySource('/foo.dart', '');
-    checkLibrary('@a export "foo.dart"; const a = null;');
+    var library = checkLibrary('@a export "foo.dart"; const a = null;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@a
+export 'foo.dart';
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@a
+export 'foo.dart';
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_fieldDeclaration() {
-    checkLibrary('const a = null; class C { @a int x; }');
+    var library = checkLibrary('const a = null; class C { @a int x; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  int x;
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  int x;
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_fieldFormalParameter() {
-    checkLibrary('const a = null; class C { var x; C(@a this.x); }');
+    var library =
+        checkLibrary('const a = null; class C { var x; C(@a this.x); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(@a dynamic this.x);
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C(@a dynamic this.x);
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_fieldFormalParameter_withDefault() {
-    checkLibrary('const a = null; class C { var x; C([@a this.x = null]); }');
+    var library = checkLibrary(
+        'const a = null; class C { var x; C([@a this.x = null]); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C([@a dynamic this.x]);
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C([@a dynamic this.x]);
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_functionDeclaration_function() {
-    checkLibrary('const a = null; @a f() {}');
+    var library = checkLibrary('const a = null; @a f() {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f() {}
+''');
+    }
   }
 
   test_metadata_functionDeclaration_getter() {
-    checkLibrary('const a = null; @a get f => null;');
+    var library = checkLibrary('const a = null; @a get f => null;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+@a
+dynamic get f {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+@a
+dynamic get f {}
+''');
+    }
   }
 
   test_metadata_functionDeclaration_setter() {
-    checkLibrary('const a = null; @a set f(value) {}');
+    var library = checkLibrary('const a = null; @a set f(value) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+@a
+void set f(dynamic value) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+@a
+dynamic set f(dynamic value) {}
+''');
+    }
   }
 
   test_metadata_functionTypeAlias() {
-    checkLibrary('const a = null; @a typedef F();');
+    var library = checkLibrary('const a = null; @a typedef F();');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@a
+typedef dynamic F();
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@a
+typedef dynamic F();
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_functionTypedFormalParameter() {
-    checkLibrary('const a = null; f(@a g()) {}');
+    var library = checkLibrary('const a = null; f(@a g()) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f(@a () → dynamic g) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f(@a () → dynamic g) {}
+''');
+    }
   }
 
   test_metadata_functionTypedFormalParameter_withDefault() {
-    checkLibrary('const a = null; f([@a g() = null]) {}');
+    var library = checkLibrary('const a = null; f([@a g() = null]) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f([@a () → dynamic g = null]) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f([@a () → dynamic g = null]) {}
+''');
+    }
   }
 
   test_metadata_importDirective() {
     addLibrarySource('/foo.dart', 'const b = null;');
-    checkLibrary('@a import "foo.dart"; const a = b;');
+    var library = checkLibrary('@a import "foo.dart"; const a = b;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@a
+import 'foo.dart';
+const dynamic a = b;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@a
+import 'foo.dart';
+const dynamic a = b;
+''');
+    }
   }
 
   test_metadata_invalid_classDeclaration() {
-    checkLibrary('f(_) {} @f(42) class C {}');
+    var library = checkLibrary('f(_) {} @f(42) class C {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@f(42)
+class C {
+}
+dynamic f(dynamic _) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@f(42)
+class C {
+}
+dynamic f(dynamic _) {}
+''');
+    }
   }
 
   test_metadata_libraryDirective() {
-    checkLibrary('@a library L; const a = null;');
+    var library = checkLibrary('@a library L; const a = null;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@a
+library L;
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@a
+library L;
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_methodDeclaration_getter() {
-    checkLibrary('const a = null; class C { @a get m => null; }');
+    var library = checkLibrary('const a = null; class C { @a get m => null; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  dynamic get m {}
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  dynamic get m {}
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_methodDeclaration_method() {
-    checkLibrary('const a = null; class C { @a m() {} }');
+    var library = checkLibrary(r'''
+const a = null;
+const b = null;
+class C {
+  @a
+  @b
+  m() {}
+}
+''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  @b
+  dynamic m() {}
+}
+const dynamic a = null;
+const dynamic b = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  @b
+  dynamic m() {}
+}
+const dynamic a = null;
+const dynamic b = null;
+''');
+    }
   }
 
   test_metadata_methodDeclaration_setter() {
-    checkLibrary('const a = null; class C { @a set m(value) {} }');
+    var library =
+        checkLibrary('const a = null; class C { @a set m(value) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  void set m(dynamic value) {}
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  @a
+  dynamic set m(dynamic value) {}
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_partDirective() {
     addSource('/foo.dart', 'part of L;');
-    checkLibrary('library L; @a part "foo.dart"; const a = null;');
+    var library =
+        checkLibrary('library L; @a part "foo.dart"; const a = null;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library L;
+@a
+part 'foo.dart';
+const dynamic a = null;
+--------------------
+unit: foo.dart
+
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library L;
+@a
+part 'foo.dart';
+const dynamic a = null;
+--------------------
+unit: foo.dart
+
+''');
+    }
   }
 
   test_metadata_prefixed_variable() {
     addLibrarySource('/a.dart', 'const b = null;');
-    checkLibrary('import "a.dart" as a; @a.b class C {}');
+    var library = checkLibrary('import "a.dart" as a; @a.b class C {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as a;
+@a.b
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart' as a;
+@a.b
+class C {
+}
+''');
+    }
   }
 
   test_metadata_simpleFormalParameter() {
-    checkLibrary('const a = null; f(@a x) {}');
+    var library = checkLibrary('const a = null; f(@a x) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f(@a dynamic x) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f(@a dynamic x) {}
+''');
+    }
   }
 
   test_metadata_simpleFormalParameter_withDefault() {
-    checkLibrary('const a = null; f([@a x = null]) {}');
+    var library = checkLibrary('const a = null; f([@a x = null]) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f([@a dynamic x = null]) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f([@a dynamic x = null]) {}
+''');
+    }
   }
 
   test_metadata_topLevelVariableDeclaration() {
-    checkLibrary('const a = null; @a int v;');
+    var library = checkLibrary('const a = null; @a int v;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+@a
+int v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+@a
+int v;
+''');
+    }
   }
 
   test_metadata_typeParameter_ofClass() {
-    checkLibrary('const a = null; class C<@a T> {}');
+    var library = checkLibrary('const a = null; class C<@a T> {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_typeParameter_ofClassTypeAlias() {
-    checkLibrary(
+    var library = checkLibrary(
         'const a = null; class C<@a T> = D with E; class D {} class E {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class alias C<T> extends D with E {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+}
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class alias C<T> extends D with E {
+  synthetic C() = D;
+}
+class D {
+}
+class E {
+}
+const dynamic a = null;
+''');
+    }
   }
 
   test_metadata_typeParameter_ofFunction() {
-    checkLibrary('const a = null; f<@a T>() {}');
+    var library = checkLibrary('const a = null; f<@a T>() {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f<T>() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic a = null;
+dynamic f<T>() {}
+''');
+    }
   }
 
   test_metadata_typeParameter_ofTypedef() {
-    checkLibrary('const a = null; typedef F<@a T>();');
+    var library = checkLibrary('const a = null; typedef F<@a T>();');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F<T>();
+const dynamic a = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F<T>();
+const dynamic a = null;
+''');
+    }
   }
 
   test_method_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   /**
    * Docs
    */
   f() {}
 }''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  /**
+   * Docs
+   */
+  dynamic f() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  /**
+   * Docs
+   */
+  dynamic f() {}
+}
+''');
+    }
   }
 
   test_method_inferred_type_nonStatic_implicit_param() {
-    checkLibrary('class C extends D { void f(value) {} }'
+    var library = checkLibrary('class C extends D { void f(value) {} }'
         ' abstract class D { void f(int value); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  void f(int value) {}
+}
+abstract class D {
+  void f(int value);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  void f(dynamic value) {}
+}
+abstract class D {
+  void f(int value);
+}
+''');
+    }
   }
 
   test_method_inferred_type_nonStatic_implicit_return() {
-    checkLibrary(
+    var library = checkLibrary(
         'class C extends D { f() => null; } abstract class D { int f(); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  int f() {}
+}
+abstract class D {
+  int f();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  dynamic f() {}
+}
+abstract class D {
+  int f();
+}
+''');
+    }
   }
 
   test_method_type_parameter() {
     prepareAnalysisContext(createOptions());
-    checkLibrary('class C { T f<T, U>(U u) => null; }');
+    var library = checkLibrary('class C { T f<T, U>(U u) => null; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  T f<T, U>(U u) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  T f<T, U>(U u) {}
+}
+''');
+    }
   }
 
   test_method_type_parameter_in_generic_class() {
     prepareAnalysisContext(createOptions());
-    checkLibrary('class C<T, U> { V f<V, W>(T t, U u, W w) => null; }');
+    var library =
+        checkLibrary('class C<T, U> { V f<V, W>(T t, U u, W w) => null; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  V f<V, W>(T t, U u, W w) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  V f<V, W>(T t, U u, W w) {}
+}
+''');
+    }
   }
 
   test_method_type_parameter_with_function_typed_parameter() {
     prepareAnalysisContext(createOptions());
-    checkLibrary('class C { void f<T, U>(T x(U u)) {} }');
+    var library = checkLibrary('class C { void f<T, U>(T x(U u)) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void f<T, U>((U) → T x) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void f<T, U>((U) → T x) {}
+}
+''');
+    }
   }
 
   test_nameConflict_exportedAndLocal() {
@@ -4418,10 +11295,25 @@
 export 'a.dart';
 class C {}
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'c.dart';
 C v = null;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'c.dart';
+C v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'c.dart';
+C v;
+''');
+    }
   }
 
   test_nameConflict_exportedAndLocal_exported() {
@@ -4434,10 +11326,25 @@
 class C {}
 ''');
     addLibrarySource('/d.dart', 'export "c.dart";');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'd.dart';
 C v = null;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'd.dart';
+C v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'd.dart';
+C v;
+''');
+    }
   }
 
   test_nameConflict_exportedAndParted() {
@@ -4456,10 +11363,25 @@
 export 'a.dart';
 part 'b.dart';
 ''');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'c.dart';
 C v = null;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'c.dart';
+C v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'c.dart';
+C v;
+''');
+    }
   }
 
   test_nameConflict_importWithRelativeUri_exportWithAbsolute() {
@@ -4469,15 +11391,32 @@
 
     addLibrarySource('/a.dart', 'class A {}');
     addLibrarySource('/b.dart', 'export "/a.dart";');
-    checkLibrary('''
+    var library = checkLibrary('''
 import 'a.dart';
 import 'b.dart';
 A v = null;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+import 'b.dart';
+A v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+import 'b.dart';
+A v;
+''');
+    }
   }
 
   test_nested_generic_functions_in_generic_class_with_function_typed_params() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T, U> {
   void g<V, W>() {
     void h<X, Y>(void p(T t, U u, V v, W w, X x, Y y)) {
@@ -4485,10 +11424,27 @@
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  void g<V, W>() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  void g<V, W>() {}
+}
+''');
+    }
   }
 
   test_nested_generic_functions_in_generic_class_with_local_variables() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T, U> {
   void g<V, W>() {
     void h<X, Y>() {
@@ -4502,10 +11458,27 @@
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  void g<V, W>() {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  void g<V, W>() {}
+}
+''');
+    }
   }
 
   test_nested_generic_functions_with_function_typed_param() {
-    checkLibrary('''
+    var library = checkLibrary('''
 void f<T, U>() {
   void g<V, W>() {
     void h<X, Y>(void p(T t, U u, V v, W w, X x, Y y)) {
@@ -4513,10 +11486,23 @@
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void f<T, U>() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+void f<T, U>() {}
+''');
+    }
   }
 
   test_nested_generic_functions_with_local_variables() {
-    checkLibrary('''
+    var library = checkLibrary('''
 void f<T, U>() {
   void g<V, W>() {
     void h<X, Y>() {
@@ -4530,54 +11516,211 @@
   }
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void f<T, U>() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+void f<T, U>() {}
+''');
+    }
   }
 
   test_operator() {
-    checkLibrary('class C { C operator+(C other) => null; }');
+    var library = checkLibrary('class C { C operator+(C other) => null; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C +(C other) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C +(C other) {}
+}
+''');
+    }
   }
 
   test_operator_equal() {
-    checkLibrary('class C { bool operator==(Object other) => false; }');
+    var library =
+        checkLibrary('class C { bool operator==(Object other) => false; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  bool ==(Object other) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  bool ==(Object other) {}
+}
+''');
+    }
   }
 
   test_operator_external() {
-    checkLibrary('class C { external C operator+(C other); }');
+    var library = checkLibrary('class C { external C operator+(C other); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external C +(C other) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  external C +(C other) {}
+}
+''');
+    }
   }
 
   test_operator_greater_equal() {
-    checkLibrary('class C { bool operator>=(C other) => false; }');
+    var library =
+        checkLibrary('class C { bool operator>=(C other) => false; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  bool >=(C other) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  bool >=(C other) {}
+}
+''');
+    }
   }
 
   test_operator_index() {
-    checkLibrary('class C { bool operator[](int i) => null; }');
+    var library = checkLibrary('class C { bool operator[](int i) => null; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  bool [](int i) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  bool [](int i) {}
+}
+''');
+    }
   }
 
   test_operator_index_set() {
-    checkLibrary('class C { void operator[]=(int i, bool v) {} }');
+    var library =
+        checkLibrary('class C { void operator[]=(int i, bool v) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void []=(int i, bool v) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void []=(int i, bool v) {}
+}
+''');
+    }
   }
 
   test_operator_less_equal() {
-    checkLibrary('class C { bool operator<=(C other) => false; }');
+    var library =
+        checkLibrary('class C { bool operator<=(C other) => false; }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  bool <=(C other) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  bool <=(C other) {}
+}
+''');
+    }
   }
 
   void test_parameter_checked() {
     // Note: due to dartbug.com/27393, the keyword "checked" is identified by
     // its presence in a library called "meta".  If that bug is fixed, this test
     // my need to be changed.
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 library meta;
 const checked = null;
 class A<T> {
   void f(@checked T t) {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library meta;
+class A<T> {
+  void f(@checked covariant T t) {}
+}
+const dynamic checked = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library meta;
+class A<T> {
+  void f(@checked covariant T t) {}
+}
+const dynamic checked = null;
+''');
+    }
   }
 
   void test_parameter_checked_inherited() {
     // Note: due to dartbug.com/27393, the keyword "checked" is identified by
     // its presence in a library called "meta".  If that bug is fixed, this test
     // my need to be changed.
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 library meta;
 const checked = null;
 class A<T> {
@@ -4587,15 +11730,59 @@
   void f(T t) {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library meta;
+class A<T> {
+  void f(@checked covariant T t) {}
+}
+class B<T> extends A<T> {
+  void f(covariant T t) {}
+}
+const dynamic checked = null;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library meta;
+class A<T> {
+  void f(@checked covariant T t) {}
+}
+class B<T> extends A<T> {
+  void f(T t) {}
+}
+const dynamic checked = null;
+''');
+    }
   }
 
   test_parameter_covariant() {
     prepareAnalysisContext(createOptions());
-    checkLibrary('class C { void m(covariant C c) {} }');
+    var library = checkLibrary('class C { void m(covariant C c) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void m(covariant C c) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void m(covariant C c) {}
+}
+''');
+    }
   }
 
   void test_parameter_covariant_inherited() {
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 class A<T> {
   void f(covariant T t) {}
 }
@@ -4603,130 +11790,480 @@
   void f(T t) {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class A<T> {
+  void f(covariant T t) {}
+}
+class B<T> extends A<T> {
+  void f(covariant T t) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class A<T> {
+  void f(covariant T t) {}
+}
+class B<T> extends A<T> {
+  void f(T t) {}
+}
+''');
+    }
   }
 
   test_parameter_parameters() {
-    checkLibrary('class C { f(g(x, y)) {} }');
+    var library = checkLibrary('class C { f(g(x, y)) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic f((dynamic, dynamic) → dynamic g) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic f((dynamic, dynamic) → dynamic g) {}
+}
+''');
+    }
   }
 
   test_parameter_parameters_in_generic_class() {
-    checkLibrary('class C<A, B> { f(A g(B x)) {} }');
+    var library = checkLibrary('class C<A, B> { f(A g(B x)) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<A, B> {
+  dynamic f((B) → A g) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<A, B> {
+  dynamic f((B) → A g) {}
+}
+''');
+    }
   }
 
   test_parameter_return_type() {
-    checkLibrary('class C { f(int g()) {} }');
+    var library = checkLibrary('class C { f(int g()) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic f(() → int g) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic f(() → int g) {}
+}
+''');
+    }
   }
 
   test_parameter_return_type_void() {
-    checkLibrary('class C { f(void g()) {} }');
+    var library = checkLibrary('class C { f(void g()) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic f(() → void g) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic f(() → void g) {}
+}
+''');
+    }
   }
 
   test_parameterTypeNotInferred_constructor() {
     // Strong mode doesn't do type inference on constructor parameters, so it's
     // ok that we don't store inferred type info for them in summaries.
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   C.positional([x = 1]);
   C.named({x: 1});
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C.positional([dynamic x = 1]);
+  C.named({dynamic x: 1});
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  C.positional([dynamic x = 1]);
+  C.named({dynamic x: 1});
+}
+''');
+    }
   }
 
   test_parameterTypeNotInferred_initializingFormal() {
     // Strong mode doesn't do type inference on initializing formals, so it's
     // ok that we don't store inferred type info for them in summaries.
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   var x;
   C.positional([this.x = 1]);
   C.named({this.x: 1});
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C.positional([dynamic this.x]);
+  C.named({dynamic this.x});
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  dynamic x;
+  C.positional([dynamic this.x]);
+  C.named({dynamic this.x});
+}
+''');
+    }
   }
 
   test_parameterTypeNotInferred_staticMethod() {
     // Strong mode doesn't do type inference on parameters of static methods,
     // so it's ok that we don't store inferred type info for them in summaries.
-    checkLibrary('''
+    var library = checkLibrary('''
 class C {
   static void positional([x = 1]) {}
   static void named({x: 1}) {}
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static void positional([dynamic x = 1]) {}
+  static void named({dynamic x: 1}) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static void positional([dynamic x = 1]) {}
+  static void named({dynamic x: 1}) {}
+}
+''');
+    }
   }
 
   test_parameterTypeNotInferred_topLevelFunction() {
     // Strong mode doesn't do type inference on parameters of top level
     // functions, so it's ok that we don't store inferred type info for them in
     // summaries.
-    checkLibrary('''
+    var library = checkLibrary('''
 void positional([x = 1]) {}
 void named({x: 1}) {}
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void positional([dynamic x = 1]) {}
+void named({dynamic x: 1}) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+void positional([dynamic x = 1]) {}
+void named({dynamic x: 1}) {}
+''');
+    }
   }
 
   test_parts() {
     addSource('/a.dart', 'part of my.lib;');
     addSource('/b.dart', 'part of my.lib;');
-    checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    var library = checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+part 'b.dart';
+--------------------
+unit: a.dart
+
+--------------------
+unit: b.dart
+
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+part 'b.dart';
+--------------------
+unit: a.dart
+
+--------------------
+unit: b.dart
+
+''');
+    }
   }
 
   test_parts_invalidUri() {
     allowMissingFiles = true;
     addSource('/foo/bar.dart', 'part of my.lib;');
-    checkLibrary('library my.lib; part "foo/";');
+    var library = checkLibrary('library my.lib; part "foo/";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+''');
+    }
   }
 
   test_parts_invalidUri_nullStringValue() {
     allowMissingFiles = true;
     addSource('/foo/bar.dart', 'part of my.lib;');
-    checkLibrary(r'''
+    var library = checkLibrary(r'''
 library my.lib;
 part "${foo}/bar.dart";
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+''');
+    }
   }
 
   test_propagated_type_refers_to_closure() {
-    checkLibrary('''
+    var library = checkLibrary('''
 void f() {
   var x = () => 0;
   var y = x;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void f() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+void f() {}
+''');
+    }
   }
 
   test_setter_covariant() {
-    checkLibrary('class C { void set x(covariant int value); }');
+    var library = checkLibrary('class C { void set x(covariant int value); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x(covariant int value);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  void set x(covariant int value);
+}
+''');
+    }
   }
 
   test_setter_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 // Extra comment so doc comment offset != 0
 /**
  * Docs
  */
 void set x(value) {}''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+void set x(dynamic value) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+void set x(dynamic value) {}
+''');
+    }
   }
 
   test_setter_external() {
-    checkLibrary('external void set x(int value);');
+    var library = checkLibrary('external void set x(int value);');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+external void set x(int value) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+external void set x(int value) {}
+''');
+    }
   }
 
   test_setter_inferred_type_nonStatic_implicit_param() {
-    checkLibrary('class C extends D { void set f(value) {} }'
+    var library = checkLibrary('class C extends D { void set f(value) {} }'
         ' abstract class D { void set f(int value); }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  void set f(int value) {}
+}
+abstract class D {
+  void set f(int value);
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C extends D {
+  void set f(dynamic value) {}
+}
+abstract class D {
+  void set f(int value);
+}
+''');
+    }
   }
 
   test_setter_inferred_type_static_implicit_return() {
-    checkLibrary('class C { static set f(int value) {} }');
+    var library = checkLibrary('class C { static set f(int value) {} }');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static void set f(int value) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+  static dynamic set f(int value) {}
+}
+''');
+    }
   }
 
   test_setter_inferred_type_top_level_implicit_return() {
-    checkLibrary('set f(int value) {}');
+    var library = checkLibrary('set f(int value) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void set f(int value) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic set f(int value) {}
+''');
+    }
   }
 
   test_setters() {
-    checkLibrary('void set x(int value) {} set y(value) {}');
+    var library = checkLibrary('void set x(int value) {} set y(value) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void set x(int value) {}
+void set y(dynamic value) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+void set x(int value) {}
+dynamic set y(dynamic value) {}
+''');
+    }
   }
 
   test_syntheticFunctionType_genericClosure() {
@@ -4739,10 +12276,21 @@
       // and remove this hack.  See dartbug.com/25819
       return;
     }
-    checkLibrary('''
+    var library = checkLibrary('''
 final v = f() ? /*<T>*/(T t) => 0 : /*<T>*/(T t) => 1;
 bool f() => true;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+''');
+    }
   }
 
   test_syntheticFunctionType_genericClosure_inGenericFunction() {
@@ -4755,70 +12303,217 @@
       // and remove this hack.  See dartbug.com/25819
       return;
     }
-    checkLibrary('''
+    var library = checkLibrary('''
 void f<T, U>(bool b) {
   final v = b ? /*<V>*/(T t, U u, V v) => 0 : /*<V>*/(T t, U u, V v) => 1;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void f<T, U>(bool b) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+''');
+    }
   }
 
   test_syntheticFunctionType_inGenericClass() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T, U> {
   var v = f() ? (T t, U u) => 0 : (T t, U u) => 1;
 }
 bool f() => false;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+  synthetic C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+  dynamic v;
+}
+bool f() {}
+''');
+    }
   }
 
   test_syntheticFunctionType_inGenericFunction() {
-    checkLibrary('''
+    var library = checkLibrary('''
 void f<T, U>(bool b) {
   var v = b ? (T t, U u) => 0 : (T t, U u) => 1;
 }
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+void f<T, U>(bool b) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+void f<T, U>(bool b) {}
+''');
+    }
   }
 
   test_syntheticFunctionType_noArguments() {
-    checkLibrary('''
+    var library = checkLibrary('''
 final v = f() ? () => 0 : () => 1;
 bool f() => true;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+final dynamic v;
+bool f() {}
+''');
+    }
   }
 
   test_syntheticFunctionType_withArguments() {
-    checkLibrary('''
+    var library = checkLibrary('''
 final v = f() ? (int x, String y) => 0 : (int x, String y) => 1;
 bool f() => true;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+final dynamic v;
+bool f() {}
+''');
+    }
   }
 
   test_type_arguments_explicit_dynamic_dynamic() {
-    checkLibrary('Map<dynamic, dynamic> m;');
+    var library = checkLibrary('Map<dynamic, dynamic> m;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+Map<dynamic, dynamic> m;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+Map<dynamic, dynamic> m;
+''');
+    }
   }
 
   test_type_arguments_explicit_dynamic_int() {
-    checkLibrary('Map<dynamic, int> m;');
+    var library = checkLibrary('Map<dynamic, int> m;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+Map<dynamic, int> m;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+Map<dynamic, int> m;
+''');
+    }
   }
 
   test_type_arguments_explicit_String_dynamic() {
-    checkLibrary('Map<String, dynamic> m;');
+    var library = checkLibrary('Map<String, dynamic> m;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+Map<String, dynamic> m;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+Map<String, dynamic> m;
+''');
+    }
   }
 
   test_type_arguments_explicit_String_int() {
-    checkLibrary('Map<String, int> m;');
+    var library = checkLibrary('Map<String, int> m;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+Map<String, int> m;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+Map<String, int> m;
+''');
+    }
   }
 
   test_type_arguments_implicit() {
-    checkLibrary('Map m;');
+    var library = checkLibrary('Map m;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+Map<dynamic, dynamic> m;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+Map<dynamic, dynamic> m;
+''');
+    }
   }
 
   test_type_dynamic() {
-    checkLibrary('dynamic d;');
+    var library = checkLibrary('dynamic d;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic d;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic d;
+''');
+    }
   }
 
   test_type_invalid_topLevelVariableElement_asType() {
-    checkLibrary(
+    var library = checkLibrary(
         '''
 class C<T extends V> {}
 typedef V F(V p);
@@ -4827,218 +12522,1025 @@
 int V = 0;
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(dynamic p);
+class C<T extends dynamic> {
+}
+dynamic V2;
+int V;
+dynamic f(dynamic p) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(dynamic p);
+class C<T extends dynamic> {
+}
+dynamic V2;
+int V;
+dynamic f(dynamic p) {}
+''');
+    }
   }
 
   test_type_invalid_topLevelVariableElement_asTypeArgument() {
-    checkLibrary(
+    var library = checkLibrary(
         '''
 var V;
 static List<V> V2;
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic V;
+List<dynamic> V2;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic V;
+List<dynamic> V2;
+''');
+    }
   }
 
   test_type_invalid_typeParameter_asPrefix() {
-    checkLibrary(
+    var library = checkLibrary(
         '''
 class C<T> {
   m(T.K p) {}
 }
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  dynamic m(dynamic p) {}
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  dynamic m(dynamic p) {}
+}
+''');
+    }
   }
 
   test_type_reference_lib_to_lib() {
-    checkLibrary('class C {} enum E { v } typedef F(); C c; E e; F f;');
+    var library =
+        checkLibrary('class C {} enum E { v } typedef F(); C c; E e; F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F();
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+class C {
+}
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F();
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+class C {
+}
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_lib_to_part() {
     addSource('/a.dart', 'part of l; class C {} enum E { v } typedef F();');
-    checkLibrary('library l; part "a.dart"; C c; E e; F f;');
+    var library = checkLibrary('library l; part "a.dart"; C c; E e; F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library l;
+part 'a.dart';
+C c;
+E e;
+F f;
+--------------------
+unit: a.dart
+
+typedef dynamic F();
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library l;
+part 'a.dart';
+C c;
+E e;
+F f;
+--------------------
+unit: a.dart
+
+typedef dynamic F();
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+class C {
+}
+''');
+    }
   }
 
   test_type_reference_part_to_lib() {
     addSource('/a.dart', 'part of l; C c; E e; F f;');
-    checkLibrary(
+    var library = checkLibrary(
         'library l; part "a.dart"; class C {} enum E { v } typedef F();');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library l;
+part 'a.dart';
+typedef dynamic F();
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+class C {
+}
+--------------------
+unit: a.dart
+
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library l;
+part 'a.dart';
+typedef dynamic F();
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+class C {
+}
+--------------------
+unit: a.dart
+
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_part_to_other_part() {
     addSource('/a.dart', 'part of l; class C {} enum E { v } typedef F();');
     addSource('/b.dart', 'part of l; C c; E e; F f;');
-    checkLibrary('library l; part "a.dart"; part "b.dart";');
+    var library = checkLibrary('library l; part "a.dart"; part "b.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library l;
+part 'a.dart';
+part 'b.dart';
+--------------------
+unit: a.dart
+
+typedef dynamic F();
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+class C {
+}
+--------------------
+unit: b.dart
+
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library l;
+part 'a.dart';
+part 'b.dart';
+--------------------
+unit: a.dart
+
+typedef dynamic F();
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+class C {
+}
+--------------------
+unit: b.dart
+
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_part_to_part() {
     addSource('/a.dart',
         'part of l; class C {} enum E { v } typedef F(); C c; E e; F f;');
-    checkLibrary('library l; part "a.dart";');
+    var library = checkLibrary('library l; part "a.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library l;
+part 'a.dart';
+--------------------
+unit: a.dart
+
+typedef dynamic F();
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+class C {
+}
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library l;
+part 'a.dart';
+--------------------
+unit: a.dart
+
+typedef dynamic F();
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+class C {
+}
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_to_class() {
-    checkLibrary('class C {} C c;');
+    var library = checkLibrary('class C {} C c;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+C c;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C {
+}
+C c;
+''');
+    }
   }
 
   test_type_reference_to_class_with_type_arguments() {
-    checkLibrary('class C<T, U> {} C<int, String> c;');
+    var library = checkLibrary('class C<T, U> {} C<int, String> c;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+}
+C<int, String> c;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+}
+C<int, String> c;
+''');
+    }
   }
 
   test_type_reference_to_class_with_type_arguments_implicit() {
-    checkLibrary('class C<T, U> {} C c;');
+    var library = checkLibrary('class C<T, U> {} C c;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+}
+C<dynamic, dynamic> c;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T, U> {
+}
+C<dynamic, dynamic> c;
+''');
+    }
   }
 
   test_type_reference_to_enum() {
-    checkLibrary('enum E { v } E e;');
+    var library = checkLibrary('enum E { v } E e;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+E e;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+enum E {
+  final int index;
+  static const List<E> values;
+  static const E v;
+}
+E e;
+''');
+    }
   }
 
   test_type_reference_to_import() {
     addLibrarySource('/a.dart', 'class C {} enum E { v }; typedef F();');
-    checkLibrary('import "a.dart"; C c; E e; F f;');
+    var library = checkLibrary('import "a.dart"; C c; E e; F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_to_import_export() {
     addLibrarySource('/a.dart', 'export "b.dart";');
     addLibrarySource('/b.dart', 'class C {} enum E { v } typedef F();');
-    checkLibrary('import "a.dart"; C c; E e; F f;');
+    var library = checkLibrary('import "a.dart"; C c; E e; F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_to_import_export_export() {
     addLibrarySource('/a.dart', 'export "b.dart";');
     addLibrarySource('/b.dart', 'export "c.dart";');
     addLibrarySource('/c.dart', 'class C {} enum E { v } typedef F();');
-    checkLibrary('import "a.dart"; C c; E e; F f;');
+    var library = checkLibrary('import "a.dart"; C c; E e; F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_to_import_export_export_in_subdirs() {
     addLibrarySource('/a/a.dart', 'export "b/b.dart";');
     addLibrarySource('/a/b/b.dart', 'export "../c/c.dart";');
     addLibrarySource('/a/c/c.dart', 'class C {} enum E { v } typedef F();');
-    checkLibrary('import "a/a.dart"; C c; E e; F f;');
+    var library = checkLibrary('import "a/a.dart"; C c; E e; F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a/a.dart';
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a/a.dart';
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_to_import_export_in_subdirs() {
     addLibrarySource('/a/a.dart', 'export "b/b.dart";');
     addLibrarySource('/a/b/b.dart', 'class C {} enum E { v } typedef F();');
-    checkLibrary('import "a/a.dart"; C c; E e; F f;');
+    var library = checkLibrary('import "a/a.dart"; C c; E e; F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a/a.dart';
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a/a.dart';
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_to_import_part() {
     addLibrarySource('/a.dart', 'library l; part "b.dart";');
     addSource('/b.dart', 'part of l; class C {} enum E { v } typedef F();');
-    checkLibrary('import "a.dart"; C c; E e; F f;');
+    var library = checkLibrary('import "a.dart"; C c; E e; F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_to_import_part2() {
     addLibrarySource('/a.dart', 'library l; part "p1.dart"; part "p2.dart";');
     addSource('/p1.dart', 'part of l; class C1 {}');
     addSource('/p2.dart', 'part of l; class C2 {}');
-    checkLibrary('import "a.dart"; C1 c1; C2 c2;');
+    var library = checkLibrary('import "a.dart"; C1 c1; C2 c2;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C1 c1;
+C2 c2;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C1 c1;
+C2 c2;
+''');
+    }
   }
 
   test_type_reference_to_import_part_in_subdir() {
     addLibrarySource('/a/b.dart', 'library l; part "c.dart";');
     addSource('/a/c.dart', 'part of l; class C {} enum E { v } typedef F();');
-    checkLibrary('import "a/b.dart"; C c; E e; F f;');
+    var library = checkLibrary('import "a/b.dart"; C c; E e; F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a/b.dart';
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a/b.dart';
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_to_import_relative() {
     addLibrarySource('/a.dart', 'class C {} enum E { v } typedef F();');
-    checkLibrary('import "a.dart"; C c; E e; F f;');
+    var library = checkLibrary('import "a.dart"; C c; E e; F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C c;
+E e;
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+C c;
+E e;
+F f;
+''');
+    }
   }
 
   test_type_reference_to_typedef() {
-    checkLibrary('typedef F(); F f;');
+    var library = checkLibrary('typedef F(); F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F();
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F();
+F f;
+''');
+    }
   }
 
   test_type_reference_to_typedef_with_type_arguments() {
-    checkLibrary('typedef U F<T, U>(T t); F<int, String> f;');
+    var library = checkLibrary('typedef U F<T, U>(T t); F<int, String> f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T, U>(T t);
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T, U>(T t);
+F f;
+''');
+    }
   }
 
   test_type_reference_to_typedef_with_type_arguments_implicit() {
-    checkLibrary('typedef U F<T, U>(T t); F f;');
+    var library = checkLibrary('typedef U F<T, U>(T t); F f;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T, U>(T t);
+F f;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T, U>(T t);
+F f;
+''');
+    }
   }
 
   test_type_unresolved() {
-    checkLibrary('C c;', allowErrors: true);
+    var library = checkLibrary('C c;', allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic c;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic c;
+''');
+    }
   }
 
   test_type_unresolved_prefixed() {
-    checkLibrary('import "dart:core" as core; core.C c;', allowErrors: true);
+    var library = checkLibrary('import "dart:core" as core; core.C c;',
+        allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:core' as core;
+dynamic c;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:core' as core;
+dynamic c;
+''');
+    }
   }
 
   test_typedef_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 // Extra comment so doc comment offset != 0
 /**
  * Docs
  */
 typedef F();''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+typedef dynamic F();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+typedef dynamic F();
+''');
+    }
   }
 
   test_typedef_parameter_parameters() {
-    checkLibrary('typedef F(g(x, y));');
+    var library = checkLibrary('typedef F(g(x, y));');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F((dynamic, dynamic) → dynamic g);
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F((dynamic, dynamic) → dynamic g);
+''');
+    }
   }
 
   test_typedef_parameter_parameters_in_generic_class() {
-    checkLibrary('typedef F<A, B>(A g(B x));');
+    var library = checkLibrary('typedef F<A, B>(A g(B x));');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F<A, B>((B) → A g);
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F<A, B>((B) → A g);
+''');
+    }
   }
 
   test_typedef_parameter_return_type() {
-    checkLibrary('typedef F(int g());');
+    var library = checkLibrary('typedef F(int g());');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(() → int g);
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(() → int g);
+''');
+    }
   }
 
   test_typedef_parameter_type() {
-    checkLibrary('typedef F(int i);');
+    var library = checkLibrary('typedef F(int i);');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(int i);
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(int i);
+''');
+    }
   }
 
   test_typedef_parameter_type_generic() {
-    checkLibrary('typedef F<T>(T t);');
+    var library = checkLibrary('typedef F<T>(T t);');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F<T>(T t);
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F<T>(T t);
+''');
+    }
   }
 
   test_typedef_parameters() {
-    checkLibrary('typedef F(x, y);');
+    var library = checkLibrary('typedef F(x, y);');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(dynamic x, dynamic y);
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F(dynamic x, dynamic y);
+''');
+    }
   }
 
   test_typedef_return_type() {
-    checkLibrary('typedef int F();');
+    var library = checkLibrary('typedef int F();');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef int F();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef int F();
+''');
+    }
   }
 
   test_typedef_return_type_generic() {
-    checkLibrary('typedef T F<T>();');
+    var library = checkLibrary('typedef T F<T>();');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef T F<T>();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef T F<T>();
+''');
+    }
   }
 
   test_typedef_return_type_implicit() {
-    checkLibrary('typedef F();');
+    var library = checkLibrary('typedef F();');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef dynamic F();
+''');
+    }
   }
 
   test_typedef_return_type_void() {
-    checkLibrary('typedef void F();');
+    var library = checkLibrary('typedef void F();');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef void F();
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef void F();
+''');
+    }
   }
 
   test_typedef_type_parameters() {
-    checkLibrary('typedef U F<T, U>(T t);');
+    var library = checkLibrary('typedef U F<T, U>(T t);');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T, U>(T t);
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T, U>(T t);
+''');
+    }
   }
 
   test_typedef_type_parameters_bound() {
-    checkLibrary('typedef U F<T extends Object, U extends D>(T t); class D {}');
+    var library = checkLibrary(
+        'typedef U F<T extends Object, U extends D>(T t); class D {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T extends Object, U extends D>(T t);
+class D {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T extends Object, U extends D>(T t);
+class D {
+}
+''');
+    }
   }
 
   test_typedef_type_parameters_f_bound_complex() {
-    checkLibrary('typedef U F<T extends List<U>, U>(T t);');
+    var library = checkLibrary('typedef U F<T extends List<U>, U>(T t);');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T extends List<U>, U>(T t);
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T extends List<U>, U>(T t);
+''');
+    }
   }
 
   test_typedef_type_parameters_f_bound_simple() {
-    checkLibrary('typedef U F<T extends U, U>(T t);');
+    var library = checkLibrary('typedef U F<T extends U, U>(T t);');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T extends U, U>(T t);
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+typedef U F<T extends U, U>(T t);
+''');
+    }
   }
 
   test_typedefs() {
-    checkLibrary('f() {} g() {}');
+    var library = checkLibrary('f() {} g() {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+dynamic g() {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic f() {}
+dynamic g() {}
+''');
+    }
   }
 
   @failingTest
   test_unresolved_annotation_instanceCreation_argument_super() {
     // TODO(scheglov) fix https://github.com/dart-lang/sdk/issues/28553
-    checkLibrary(
+    var library = checkLibrary(
         '''
 class A {
   const A(_);
@@ -5048,10 +13550,35 @@
 class C {}
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class A {
+  A(_);
+}
+
+class C {
+  synthetic C();
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class A {
+  A(_);
+}
+
+class C {
+  synthetic C();
+}
+''');
+    }
   }
 
   test_unresolved_annotation_instanceCreation_argument_this() {
-    checkLibrary(
+    var library = checkLibrary(
         '''
 class A {
   const A(_);
@@ -5061,59 +13588,294 @@
 class C {}
 ''',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A(dynamic _);
+}
+@A(this)
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class A {
+  const A(dynamic _);
+}
+@A(this)
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_namedConstructorCall_noClass() {
-    checkLibrary('@foo.bar() class C {}', allowErrors: true);
+    var library = checkLibrary('@foo.bar() class C {}', allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@foo.bar()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@foo.bar()
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_namedConstructorCall_noConstructor() {
-    checkLibrary('@String.foo() class C {}', allowErrors: true);
+    var library = checkLibrary('@String.foo() class C {}', allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@String.foo()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@String.foo()
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_prefixedIdentifier_badPrefix() {
-    checkLibrary('@foo.bar class C {}', allowErrors: true);
+    var library = checkLibrary('@foo.bar class C {}', allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@foo.bar
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@foo.bar
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_prefixedIdentifier_noDeclaration() {
-    checkLibrary('import "dart:async" as foo; @foo.bar class C {}',
+    var library = checkLibrary(
+        'import "dart:async" as foo; @foo.bar class C {}',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' as foo;
+@foo.bar
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' as foo;
+@foo.bar
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_prefixedNamedConstructorCall_badPrefix() {
-    checkLibrary('@foo.bar.baz() class C {}', allowErrors: true);
+    var library = checkLibrary('@foo.bar.baz() class C {}', allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@foo.bar.baz()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@foo.bar.baz()
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_prefixedNamedConstructorCall_noClass() {
-    checkLibrary('import "dart:async" as foo; @foo.bar.baz() class C {}',
+    var library = checkLibrary(
+        'import "dart:async" as foo; @foo.bar.baz() class C {}',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' as foo;
+@foo.bar.baz()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' as foo;
+@foo.bar.baz()
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_prefixedNamedConstructorCall_noConstructor() {
-    checkLibrary('import "dart:async" as foo; @foo.Future.bar() class C {}',
+    var library = checkLibrary(
+        'import "dart:async" as foo; @foo.Future.bar() class C {}',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' as foo;
+@foo.Future.bar()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' as foo;
+@foo.Future.bar()
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_prefixedUnnamedConstructorCall_badPrefix() {
-    checkLibrary('@foo.bar() class C {}', allowErrors: true);
+    var library = checkLibrary('@foo.bar() class C {}', allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@foo.bar()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@foo.bar()
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_prefixedUnnamedConstructorCall_noClass() {
-    checkLibrary('import "dart:async" as foo; @foo.bar() class C {}',
+    var library = checkLibrary(
+        'import "dart:async" as foo; @foo.bar() class C {}',
         allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' as foo;
+@foo.bar()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'dart:async' as foo;
+@foo.bar()
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_simpleIdentifier() {
-    checkLibrary('@foo class C {}', allowErrors: true);
+    var library = checkLibrary('@foo class C {}', allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@foo
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@foo
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_annotation_unnamedConstructorCall_noClass() {
-    checkLibrary('@foo() class C {}', allowErrors: true);
+    var library = checkLibrary('@foo() class C {}', allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+@foo()
+class C {
+}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+@foo()
+class C {
+}
+''');
+    }
   }
 
   test_unresolved_export() {
     allowMissingFiles = true;
-    checkLibrary("export 'foo.dart';", allowErrors: true);
+    var library = checkLibrary("export 'foo.dart';", allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+export 'foo.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+export 'foo.dart';
+''');
+    }
   }
 
   test_unresolved_import() {
@@ -5124,101 +13886,452 @@
     expect(importedLibrary.loadLibraryFunction, isNotNull);
     expect(importedLibrary.publicNamespace, isNotNull);
     expect(importedLibrary.exportNamespace, isNotNull);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'foo.dart';
+''');
+    }
   }
 
   test_unresolved_part() {
     allowMissingFiles = true;
-    checkLibrary("part 'foo.dart';", allowErrors: true);
+    var library = checkLibrary("part 'foo.dart';", allowErrors: true);
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+part 'foo.dart';
+--------------------
+unit: foo.dart
+
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+part 'foo.dart';
+--------------------
+unit: foo.dart
+
+''');
+    }
   }
 
   test_unused_type_parameter() {
-    checkLibrary('''
+    var library = checkLibrary('''
 class C<T> {
   void f() {}
 }
 C<int> c;
 var v = c.f;
 ''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  void f() {}
+}
+C<int> c;
+() → void v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+class C<T> {
+  void f() {}
+}
+C<int> c;
+dynamic v;
+''');
+    }
   }
 
   test_variable_const() {
-    checkLibrary('const int i = 0;');
+    var library = checkLibrary('const int i = 0;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const int i = 0;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const int i = 0;
+''');
+    }
   }
 
   test_variable_documented() {
-    checkLibrary('''
+    var library = checkLibrary('''
 // Extra comment so doc comment offset != 0
 /**
  * Docs
  */
 var x;''');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+dynamic x;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+/**
+ * Docs
+ */
+dynamic x;
+''');
+    }
   }
 
   test_variable_final() {
-    checkLibrary('final int x = 0;');
+    var library = checkLibrary('final int x = 0;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+final int x;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+final int x;
+''');
+    }
   }
 
   test_variable_final_top_level_untyped() {
-    checkLibrary('final v = 0;');
+    var library = checkLibrary('final v = 0;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+final int v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+final dynamic v;
+''');
+    }
   }
 
   test_variable_getterInLib_setterInPart() {
     addSource('/a.dart', 'part of my.lib; void set x(int _) {}');
-    checkLibrary('library my.lib; part "a.dart"; int get x => 42;');
+    var library =
+        checkLibrary('library my.lib; part "a.dart"; int get x => 42;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+int get x {}
+--------------------
+unit: a.dart
+
+void set x(int _) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+int get x {}
+--------------------
+unit: a.dart
+
+void set x(int _) {}
+''');
+    }
   }
 
   test_variable_getterInPart_setterInLib() {
     addSource('/a.dart', 'part of my.lib; int get x => 42;');
-    checkLibrary('library my.lib; part "a.dart"; void set x(int _) {}');
+    var library =
+        checkLibrary('library my.lib; part "a.dart"; void set x(int _) {}');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+void set x(int _) {}
+--------------------
+unit: a.dart
+
+int get x {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+void set x(int _) {}
+--------------------
+unit: a.dart
+
+int get x {}
+''');
+    }
   }
 
   test_variable_getterInPart_setterInPart() {
     addSource('/a.dart', 'part of my.lib; int get x => 42;');
     addSource('/b.dart', 'part of my.lib; void set x(int _) {}');
-    checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    var library = checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+part 'b.dart';
+--------------------
+unit: a.dart
+
+int get x {}
+--------------------
+unit: b.dart
+
+void set x(int _) {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+part 'b.dart';
+--------------------
+unit: a.dart
+
+int get x {}
+--------------------
+unit: b.dart
+
+void set x(int _) {}
+''');
+    }
   }
 
   test_variable_implicit_type() {
-    checkLibrary('var x;');
+    var library = checkLibrary('var x;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+dynamic x;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic x;
+''');
+    }
   }
 
   test_variable_inferred_type_implicit_initialized() {
-    checkLibrary('var v = 0;');
+    var library = checkLibrary('var v = 0;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+int v;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+dynamic v;
+''');
+    }
   }
 
   test_variable_propagatedType_const_noDep() {
-    checkLibrary('const i = 0;');
+    var library = checkLibrary('const i = 0;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+const int i = 0;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+const dynamic i = 0;
+''');
+    }
   }
 
   test_variable_propagatedType_final_dep_inLib() {
     addLibrarySource('/a.dart', 'final a = 1;');
-    checkLibrary('import "a.dart"; final b = a / 2;');
+    var library = checkLibrary('import "a.dart"; final b = a / 2;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+final num b;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'a.dart';
+final dynamic b;
+''');
+    }
   }
 
   test_variable_propagatedType_final_dep_inPart() {
     addSource('/a.dart', 'part of lib; final a = 1;');
-    checkLibrary('library lib; part "a.dart"; final b = a / 2;');
+    var library = checkLibrary('library lib; part "a.dart"; final b = a / 2;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library lib;
+part 'a.dart';
+final num b;
+--------------------
+unit: a.dart
+
+final int a;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library lib;
+part 'a.dart';
+final dynamic b;
+--------------------
+unit: a.dart
+
+final dynamic a;
+''');
+    }
   }
 
   test_variable_propagatedType_final_noDep() {
-    checkLibrary('final i = 0;');
+    var library = checkLibrary('final i = 0;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+final int i;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+final dynamic i;
+''');
+    }
   }
 
   test_variable_propagatedType_implicit_dep() {
     // The propagated type is defined in a library that is not imported.
     addLibrarySource('/a.dart', 'class C {}');
     addLibrarySource('/b.dart', 'import "a.dart"; C f() => null;');
-    checkLibrary('import "b.dart"; final x = f();');
+    var library = checkLibrary('import "b.dart"; final x = f();');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+import 'b.dart';
+final C x;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+import 'b.dart';
+final dynamic x;
+''');
+    }
   }
 
   test_variable_setterInPart_getterInPart() {
     addSource('/a.dart', 'part of my.lib; void set x(int _) {}');
     addSource('/b.dart', 'part of my.lib; int get x => 42;');
-    checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    var library = checkLibrary('library my.lib; part "a.dart"; part "b.dart";');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+part 'b.dart';
+--------------------
+unit: a.dart
+
+void set x(int _) {}
+--------------------
+unit: b.dart
+
+int get x {}
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+library my.lib;
+part 'a.dart';
+part 'b.dart';
+--------------------
+unit: a.dart
+
+void set x(int _) {}
+--------------------
+unit: b.dart
+
+int get x {}
+''');
+    }
   }
 
   test_variables() {
-    checkLibrary('int i; int j;');
+    var library = checkLibrary('int i; int j;');
+    if (isStrongMode) {
+      checkElementText(
+          library,
+          r'''
+int i;
+int j;
+''');
+    } else {
+      checkElementText(
+          library,
+          r'''
+int i;
+int j;
+''');
+    }
   }
 
   /**
diff --git a/pkg/analyzer_cli/analyzer_cli.iml b/pkg/analyzer_cli/analyzer_cli.iml
index 4a27243..8eaae91 100644
--- a/pkg/analyzer_cli/analyzer_cli.iml
+++ b/pkg/analyzer_cli/analyzer_cli.iml
@@ -7,7 +7,18 @@
       <excludeFolder url="file://$MODULE_DIR$/bin/packages" />
       <excludeFolder url="file://$MODULE_DIR$/build" />
       <excludeFolder url="file://$MODULE_DIR$/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/bazel/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/bazel/proj/lib/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/bazel/proj/packages" />
       <excludeFolder url="file://$MODULE_DIR$/test/data/embedder_client/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/errors_reported_once/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/flutter_analysis_options/lib/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/flutter_analysis_options/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/flutter_analysis_options/somepkgs/flutter/lib/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/flutter_analysis_options/somepkgs/flutter/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/flutter_analysis_options/somepkgs/meta/lib/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/flutter_analysis_options/somepkgs/meta/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/data/flutter_analysis_options/somepkgs/packages" />
       <excludeFolder url="file://$MODULE_DIR$/test/data/library_and_parts/packages" />
       <excludeFolder url="file://$MODULE_DIR$/test/data/linter_project/packages" />
       <excludeFolder url="file://$MODULE_DIR$/test/data/no_lints_project/packages" />
diff --git a/pkg/front_end/front_end.iml b/pkg/front_end/front_end.iml
index 8b2c80f..7f7c017 100644
--- a/pkg/front_end/front_end.iml
+++ b/pkg/front_end/front_end.iml
@@ -2,7 +2,20 @@
 <module type="WEB_MODULE" version="4">
   <component name="NewModuleRootManager" inherit-compiler-output="true">
     <exclude-output />
-    <content url="file://$MODULE_DIR$" />
+    <content url="file://$MODULE_DIR$">
+      <excludeFolder url="file://$MODULE_DIR$/.pub" />
+      <excludeFolder url="file://$MODULE_DIR$/build" />
+      <excludeFolder url="file://$MODULE_DIR$/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/fasta/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/fasta/parser/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/fasta/rasta/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/fasta/scanner/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/src/base/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/test/src/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/tool/fasta/packages" />
+      <excludeFolder url="file://$MODULE_DIR$/tool/packages" />
+    </content>
     <orderEntry type="inheritedJdk" />
     <orderEntry type="sourceFolder" forTests="false" />
     <orderEntry type="library" name="Dart SDK" level="application" />
diff --git a/pkg/front_end/lib/src/fasta/builder/dynamic_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/dynamic_type_builder.dart
index 5a74165..3933e7c 100644
--- a/pkg/front_end/lib/src/fasta/builder/dynamic_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/dynamic_type_builder.dart
@@ -13,7 +13,9 @@
   DynamicTypeBuilder(this.type, LibraryBuilder compilationUnit, int charOffset)
       : super(null, 0, "dynamic", compilationUnit, charOffset);
 
-  R buildType(List<T> arguments) => type;
+  R buildType(LibraryBuilder library, List<T> arguments) => type;
 
-  R buildTypesWithBuiltArguments(List<R> arguments) => type;
+  R buildTypesWithBuiltArguments(LibraryBuilder library, List<R> arguments) {
+    return type;
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/type_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
index 4a91321..8f0065e 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_builder.dart
@@ -4,7 +4,8 @@
 
 library fasta.type_builder;
 
-import 'builder.dart' show Builder, TypeDeclarationBuilder, TypeVariableBuilder;
+import 'builder.dart'
+    show Builder, LibraryBuilder, TypeDeclarationBuilder, TypeVariableBuilder;
 
 import 'scope.dart' show Scope;
 
@@ -27,5 +28,5 @@
 
   TypeBuilder subst(Map<TypeVariableBuilder, TypeBuilder> substitution) => this;
 
-  build();
+  build(LibraryBuilder library);
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
index e0cc771..0053c44 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_declaration_builder.dart
@@ -5,7 +5,7 @@
 library fasta.type_declaration_builder;
 
 import 'builder.dart'
-    show Builder, MetadataBuilder, ModifierBuilder, TypeBuilder;
+    show Builder, LibraryBuilder, MetadataBuilder, ModifierBuilder, TypeBuilder;
 
 import '../util/relativize.dart' show relativizeUri;
 
@@ -32,8 +32,10 @@
 
   bool get isTypeDeclaration => true;
 
-  R buildType(List<T> arguments);
+  bool get isTypeVariable => false;
+
+  R buildType(LibraryBuilder library, List<T> arguments);
 
   /// [arguments] have already been built.
-  R buildTypesWithBuiltArguments(List<R> arguments);
+  R buildTypesWithBuiltArguments(LibraryBuilder library, List<R> arguments);
 }
diff --git a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
index ee94d2c..a7b5df7 100644
--- a/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/type_variable_builder.dart
@@ -14,6 +14,8 @@
       String name, this.bound, LibraryBuilder compilationUnit, int charOffset)
       : super(null, null, name, compilationUnit, charOffset);
 
+  bool get isTypeVariable => true;
+
   String get debugName => "TypeVariableBuilder";
 
   StringBuffer printOn(StringBuffer buffer) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index e906a19..532feca 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -175,7 +175,7 @@
     } else if (node is BuilderAccessor) {
       return node.buildSimpleRead();
     } else if (node is TypeVariableBuilder) {
-      TypeParameterType type = node.buildTypesWithBuiltArguments(null);
+      TypeParameterType type = node.buildTypesWithBuiltArguments(library, null);
       if (!isInstanceContext && type.parameter.parent is Class) {
         return buildCompileTimeError(
             "Type variables can only be used in instance methods.");
@@ -183,9 +183,9 @@
         return new TypeLiteral(type);
       }
     } else if (node is TypeDeclarationBuilder) {
-      return new TypeLiteral(node.buildTypesWithBuiltArguments(null));
+      return new TypeLiteral(node.buildTypesWithBuiltArguments(library, null));
     } else if (node is KernelTypeBuilder) {
-      return new TypeLiteral(node.build());
+      return new TypeLiteral(node.build(library));
     } else if (node is Expression) {
       return node;
     } else if (node is PrefixBuilder) {
@@ -949,8 +949,8 @@
     Expression value = popForValue();
     var accessor = pop();
     if (accessor is TypeDeclarationBuilder) {
-      push(wrapInvalid(
-          new TypeLiteral(accessor.buildTypesWithBuiltArguments(null))));
+      push(wrapInvalid(new TypeLiteral(
+          accessor.buildTypesWithBuiltArguments(library, null))));
     } else if (accessor is! BuilderAccessor) {
       push(buildCompileTimeError("Can't assign to this.", token.charOffset));
     } else {
@@ -1148,7 +1148,7 @@
     if (identical(name, "dynamic")) return const DynamicType();
     Builder builder = scope.lookup(name, charOffset, uri);
     if (builder is TypeDeclarationBuilder) {
-      return builder.buildTypesWithBuiltArguments(arguments);
+      return builder.buildTypesWithBuiltArguments(library, arguments);
     }
     if (builder == null) {
       warning("Type not found: '$name'.", charOffset);
@@ -1202,11 +1202,11 @@
       warning("'${name.name}' isn't a type.", beginToken.charOffset);
       push(const DynamicType());
     } else if (name is TypeVariableBuilder) {
-      push(name.buildTypesWithBuiltArguments(arguments));
+      push(name.buildTypesWithBuiltArguments(library, arguments));
     } else if (name is TypeDeclarationBuilder) {
-      push(name.buildTypesWithBuiltArguments(arguments));
+      push(name.buildTypesWithBuiltArguments(library, arguments));
     } else if (name is TypeBuilder) {
-      push(name.build());
+      push(name.build(library));
     } else {
       push(toKernelType(name, arguments, beginToken.charOffset));
     }
@@ -1293,7 +1293,7 @@
           thisKeyword = null;
         }
       } else if (thisKeyword == null) {
-        variable = builder.build();
+        variable = builder.build(library);
         variable.initializer = name.initializer;
       } else if (builder.isField && builder.parent == classBuilder) {
         FieldBuilder field = builder;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
index a6a7025..185e1d5 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_class_builder.dart
@@ -62,7 +62,8 @@
   Class get target => cls;
 
   /// [arguments] have already been built.
-  InterfaceType buildTypesWithBuiltArguments(List<DartType> arguments) {
+  InterfaceType buildTypesWithBuiltArguments(
+      LibraryBuilder library, List<DartType> arguments) {
     return arguments == null
         ? cls.rawType
         : new InterfaceType(
@@ -72,27 +73,29 @@
             computeDefaultTypeArguments(cls.typeParameters, arguments));
   }
 
-  InterfaceType buildType(List<KernelTypeBuilder> arguments) {
+  InterfaceType buildType(
+      LibraryBuilder library, List<KernelTypeBuilder> arguments) {
     List<DartType> typeArguments;
     if (arguments != null) {
       typeArguments = <DartType>[];
       for (KernelTypeBuilder builder in arguments) {
-        DartType type = builder.build();
+        DartType type = builder.build(library);
         if (type == null) {
           internalError("Bad type: ${builder.runtimeType}");
         }
         typeArguments.add(type);
       }
     }
-    return buildTypesWithBuiltArguments(typeArguments);
+    return buildTypesWithBuiltArguments(library, typeArguments);
   }
 
-  Supertype buildSupertype(List<KernelTypeBuilder> arguments) {
+  Supertype buildSupertype(
+      LibraryBuilder library, List<KernelTypeBuilder> arguments) {
     List<DartType> typeArguments;
     if (arguments != null) {
       typeArguments = <DartType>[];
       for (KernelTypeBuilder builder in arguments) {
-        DartType type = builder.build();
+        DartType type = builder.build(library);
         if (type == null) {
           internalError("Bad type: ${builder.runtimeType}");
         }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
index 1a36877..4261723 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_enum_builder.dart
@@ -174,7 +174,8 @@
 
   KernelTypeBuilder get mixedInType => null;
 
-  InterfaceType buildType(List<KernelTypeBuilder> arguments) {
+  InterfaceType buildType(
+      LibraryBuilder library, List<KernelTypeBuilder> arguments) {
     return cls.rawType;
   }
 
@@ -183,10 +184,10 @@
       libraryBuilder.addCompileTimeError(
           -1, "An enum declaration can't be empty.");
     }
-    toStringMap.keyType = intType.build();
-    toStringMap.valueType = stringType.build();
+    toStringMap.keyType = intType.build(libraryBuilder);
+    toStringMap.valueType = stringType.build(libraryBuilder);
     KernelFieldBuilder indexFieldBuilder = members["index"];
-    Field indexField = indexFieldBuilder.build(libraryBuilder.library);
+    Field indexField = indexFieldBuilder.build(libraryBuilder);
     KernelProcedureBuilder toStringBuilder = members["toString"];
     toStringBuilder.body = new ReturnStatement(new MethodInvocation(
         toStringMap,
@@ -197,14 +198,14 @@
     List<Expression> values = <Expression>[];
     for (String name in constants) {
       KernelFieldBuilder builder = members[name];
-      values.add(new StaticGet(builder.build(libraryBuilder.library)));
+      values.add(new StaticGet(builder.build(libraryBuilder)));
     }
     KernelFieldBuilder valuesBuilder = members["values"];
-    valuesBuilder.build(libraryBuilder.library);
+    valuesBuilder.build(libraryBuilder);
     valuesBuilder.initializer =
         new ListLiteral(values, typeArgument: cls.rawType, isConst: true);
     KernelConstructorBuilder constructorBuilder = members[""];
-    Constructor constructor = constructorBuilder.build(libraryBuilder.library);
+    Constructor constructor = constructorBuilder.build(libraryBuilder);
     constructor.initializers.insert(
         0,
         new FieldInitializer(indexField,
@@ -213,7 +214,7 @@
     int index = 0;
     for (String constant in constants) {
       KernelFieldBuilder field = members[constant];
-      field.build(libraryBuilder.library);
+      field.build(libraryBuilder);
       Arguments arguments =
           new Arguments(<Expression>[new IntLiteral(index++)]);
       field.initializer =
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
index 2f0cfd2..8cb5a8d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_field_builder.dart
@@ -4,10 +4,15 @@
 
 library fasta.kernel_field_builder;
 
-import 'package:kernel/ast.dart' show Expression, Field, Library, Name;
+import 'package:kernel/ast.dart' show Expression, Field, Name;
 
 import 'kernel_builder.dart'
-    show Builder, FieldBuilder, KernelTypeBuilder, MetadataBuilder;
+    show
+        Builder,
+        FieldBuilder,
+        KernelTypeBuilder,
+        LibraryBuilder,
+        MetadataBuilder;
 
 class KernelFieldBuilder extends FieldBuilder<Expression> {
   final Field field;
@@ -24,10 +29,10 @@
     field.initializer = value..parent = field;
   }
 
-  Field build(Library library) {
-    field.name ??= new Name(name, library);
+  Field build(LibraryBuilder library) {
+    field.name ??= new Name(name, library.target);
     if (type != null) {
-      field.type = type.build();
+      field.type = type.build(library);
     }
     bool isInstanceMember = !isStatic && !isTopLevel;
     return field
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart
index aa671e9..09bd875 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_formal_parameter_builder.dart
@@ -11,6 +11,7 @@
         FormalParameterBuilder,
         KernelLibraryBuilder,
         KernelTypeBuilder,
+        LibraryBuilder,
         MetadataBuilder;
 
 class KernelFormalParameterBuilder
@@ -28,9 +29,9 @@
       : super(metadata, modifiers, type, name, hasThis, compilationUnit,
             charOffset);
 
-  VariableDeclaration build() {
+  VariableDeclaration build(LibraryBuilder library) {
     return declaration ??= new VariableDeclaration(name,
-        type: type?.build() ?? const DynamicType(),
+        type: type?.build(library) ?? const DynamicType(),
         isFinal: isFinal,
         isConst: isConst);
   }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
index 63e2010..70e0205 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_alias_builder.dart
@@ -46,7 +46,7 @@
       : super(metadata, returnType, name, typeVariables, formals, parent,
             charOffset);
 
-  DartType buildThisType() {
+  DartType buildThisType(LibraryBuilder library) {
     if (thisType != null) {
       if (thisType == const InvalidType()) {
         thisType = const DynamicType();
@@ -57,13 +57,14 @@
       return thisType;
     }
     thisType = const InvalidType();
-    DartType returnType = this.returnType?.build() ?? const DynamicType();
+    DartType returnType =
+        this.returnType?.build(library) ?? const DynamicType();
     List<DartType> positionalParameters = <DartType>[];
     List<NamedType> namedParameters;
     int requiredParameterCount = 0;
     if (formals != null) {
       for (KernelFormalParameterBuilder formal in formals) {
-        DartType type = formal.type?.build() ?? const DynamicType();
+        DartType type = formal.type?.build(library) ?? const DynamicType();
         if (formal.isPositional) {
           positionalParameters.add(type);
           if (formal.isRequired) requiredParameterCount++;
@@ -90,8 +91,9 @@
   }
 
   /// [arguments] have already been built.
-  DartType buildTypesWithBuiltArguments(List<DartType> arguments) {
-    var thisType = buildThisType();
+  DartType buildTypesWithBuiltArguments(
+      LibraryBuilder library, List<DartType> arguments) {
+    var thisType = buildThisType(library);
     if (thisType is DynamicType) return thisType;
     FunctionType result = thisType;
     if (result.typeParameters.isEmpty && arguments == null) return result;
@@ -103,8 +105,9 @@
     return substitute(result.withoutTypeParameters, substitution);
   }
 
-  DartType buildType(List<KernelTypeBuilder> arguments) {
-    var thisType = buildThisType();
+  DartType buildType(
+      LibraryBuilder library, List<KernelTypeBuilder> arguments) {
+    var thisType = buildThisType(library);
     if (thisType is DynamicType) return thisType;
     FunctionType result = thisType;
     if (result.typeParameters.isEmpty && arguments == null) return result;
@@ -112,9 +115,9 @@
     List<DartType> builtArguments = <DartType>[];
     if (arguments != null) {
       for (int i = 0; i < arguments.length; i++) {
-        builtArguments.add(arguments[i].build());
+        builtArguments.add(arguments[i].build(library));
       }
     }
-    return buildTypesWithBuiltArguments(builtArguments);
+    return buildTypesWithBuiltArguments(library, builtArguments);
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart
index da0f433..b2c215b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_invalid_type_builder.dart
@@ -8,21 +8,24 @@
 
 import '../messages.dart' show warning;
 
-import 'kernel_builder.dart' show InvalidTypeBuilder, KernelTypeBuilder;
+import 'kernel_builder.dart'
+    show InvalidTypeBuilder, KernelTypeBuilder, LibraryBuilder;
 
 class KernelInvalidTypeBuilder
     extends InvalidTypeBuilder<KernelTypeBuilder, DartType> {
   KernelInvalidTypeBuilder(String name, int charOffset, Uri fileUri)
       : super(name, null, charOffset, fileUri);
 
-  DartType buildType(List<KernelTypeBuilder> arguments) {
+  DartType buildType(
+      LibraryBuilder library, List<KernelTypeBuilder> arguments) {
     // TODO(ahe): Implement error handling.
     warning(fileUri, charOffset, "No type for: '$name'.");
     return const DynamicType();
   }
 
   /// [Arguments] have already been built.
-  DartType buildTypesWithBuiltArguments(List<DartType> arguments) {
+  DartType buildTypesWithBuiltArguments(
+      LibraryBuilder library, List<DartType> arguments) {
     // TODO(ahe): Implement error handling.
     warning(fileUri, charOffset, "No type for: '$name'.");
     return const DynamicType();
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
index fae44fc..c2d6b22 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_library_builder.dart
@@ -68,6 +68,8 @@
       : library = new Library(uri, fileUri: relativizeUri(fileUri)),
         super(loader, fileUri);
 
+  Library get target => library;
+
   Uri get uri => library.importUri;
 
   KernelTypeBuilder addNamedType(
@@ -280,9 +282,9 @@
       Class cls = builder.build(this);
       library.addClass(cls);
     } else if (builder is KernelFieldBuilder) {
-      library.addMember(builder.build(library)..isStatic = true);
+      library.addMember(builder.build(this)..isStatic = true);
     } else if (builder is KernelProcedureBuilder) {
-      library.addMember(builder.build(library)..isStatic = true);
+      library.addMember(builder.build(this)..isStatic = true);
     } else if (builder is FunctionTypeAliasBuilder) {
       // Kernel discard typedefs and use their corresponding function types
       // directly.
@@ -394,7 +396,7 @@
   int finishTypeVariables(ClassBuilder object) {
     int count = boundlessTypeVariables.length;
     for (KernelTypeVariableBuilder builder in boundlessTypeVariables) {
-      builder.finish(object);
+      builder.finish(this, object);
     }
     boundlessTypeVariables.clear();
     return count;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
index c79e55f..8b9d903 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_mixin_application_builder.dart
@@ -16,6 +16,7 @@
         KernelNamedTypeBuilder,
         KernelTypeBuilder,
         KernelTypeVariableBuilder,
+        LibraryBuilder,
         MixinApplicationBuilder,
         TypeBuilder,
         TypeVariableBuilder;
@@ -45,15 +46,17 @@
         relativeFileUri = relativizeUri(fileUri),
         super(supertype, mixins, charOffset, fileUri);
 
-  InterfaceType build() => buildSupertype().asInterfaceType;
+  InterfaceType build(LibraryBuilder library) {
+    return buildSupertype(library)?.asInterfaceType;
+  }
 
-  Supertype buildSupertype() {
+  Supertype buildSupertype(LibraryBuilder library) {
     if (builtType != null) return builtType;
     KernelTypeBuilder s = this.supertype;
     for (KernelTypeBuilder builder in mixins) {
       s = applyMixin(s, builder);
     }
-    builtType = s.buildSupertype();
+    builtType = s.buildSupertype(library);
     return builtType;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
index f4f88ac..7dd7fb3 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_named_type_builder.dart
@@ -14,6 +14,7 @@
         KernelClassBuilder,
         KernelInvalidTypeBuilder,
         KernelTypeBuilder,
+        LibraryBuilder,
         NamedTypeBuilder,
         TypeBuilder,
         TypeVariableBuilder;
@@ -37,27 +38,35 @@
     return const DynamicType();
   }
 
-  Supertype handleMissingSuperType() {
+  Supertype handleMissingSupertype() {
     warning(fileUri, charOffset, "No type for: '$name'.");
     return null;
   }
 
-  DartType build() {
+  Supertype handleInvalidSupertype(LibraryBuilder library) {
+    String message = builder.isTypeVariable
+        ? "The type variable '$name' can't be used as supertype."
+        : "The type '$name' can't be used as supertype.";
+    library.addCompileTimeError(charOffset, message, fileUri);
+    return null;
+  }
+
+  DartType build(LibraryBuilder library) {
     if (name == "void") return const VoidType();
     if (name == "dynamic") return const DynamicType();
     if (builder == null) return handleMissingType();
-    return builder.buildType(arguments);
+    return builder.buildType(library, arguments);
   }
 
-  Supertype buildSupertype() {
+  Supertype buildSupertype(LibraryBuilder library) {
     if (name == "void") return null;
     if (name == "dynamic") return null;
-    if (builder == null) return handleMissingSuperType();
+    if (builder == null) return handleMissingSupertype();
     if (builder is KernelClassBuilder) {
       KernelClassBuilder builder = this.builder;
-      return builder.buildSupertype(arguments);
+      return builder.buildSupertype(library, arguments);
     } else {
-      return handleMissingSuperType();
+      return handleInvalidSupertype(library);
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
index 08b6f47..cd8ee41 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_procedure_builder.dart
@@ -16,7 +16,6 @@
         Expression,
         FunctionNode,
         Initializer,
-        Library,
         LocalInitializer,
         Member,
         Name,
@@ -52,6 +51,7 @@
         KernelLibraryBuilder,
         KernelTypeBuilder,
         KernelTypeVariableBuilder,
+        LibraryBuilder,
         MetadataBuilder,
         ProcedureBuilder,
         TypeVariableBuilder,
@@ -93,7 +93,7 @@
 
   bool get isNative => nativeMethodName != null;
 
-  FunctionNode buildFunction() {
+  FunctionNode buildFunction(LibraryBuilder library) {
     assert(function == null);
     FunctionNode result = new FunctionNode(body, asyncMarker: asyncModifier);
     if (typeVariables != null) {
@@ -104,7 +104,7 @@
     }
     if (formals != null) {
       for (KernelFormalParameterBuilder formal in formals) {
-        VariableDeclaration parameter = formal.build();
+        VariableDeclaration parameter = formal.build(library);
         if (formal.isNamed) {
           result.namedParameters.add(parameter);
         } else {
@@ -117,7 +117,7 @@
       }
     }
     if (returnType != null) {
-      result.returnType = returnType.build();
+      result.returnType = returnType.build(library);
     }
     if (!isConstructor && !isInstanceMember && parent is ClassBuilder) {
       List<TypeParameter> typeParameters = parent.target.typeParameters;
@@ -154,7 +154,7 @@
     return function = result;
   }
 
-  Member build(Library library);
+  Member build(LibraryBuilder library);
 
   void becomeNative(Loader loader) {
     target.isExternal = true;
@@ -220,16 +220,16 @@
     }
   }
 
-  Procedure build(Library library) {
+  Procedure build(LibraryBuilder library) {
     // TODO(ahe): I think we may call this twice on parts. Investigate.
     if (procedure.name == null) {
-      procedure.function = buildFunction();
+      procedure.function = buildFunction(library);
       procedure.function.parent = procedure;
       procedure.isAbstract = isAbstract;
       procedure.isStatic = isStatic;
       procedure.isExternal = isExternal;
       procedure.isConst = isConst;
-      procedure.name = new Name(name, library);
+      procedure.name = new Name(name, library.target);
     }
     return procedure;
   }
@@ -268,20 +268,20 @@
 
   ProcedureKind get kind => null;
 
-  Constructor build(Library library) {
+  Constructor build(LibraryBuilder library) {
     if (constructor.name == null) {
-      constructor.function = buildFunction();
+      constructor.function = buildFunction(library);
       constructor.function.parent = constructor;
       constructor.isConst = isConst;
       constructor.isExternal = isExternal;
-      constructor.name = new Name(name, library);
+      constructor.name = new Name(name, library.target);
     }
     return constructor;
   }
 
-  FunctionNode buildFunction() {
+  FunctionNode buildFunction(LibraryBuilder library) {
     // TODO(ahe): Should complain if another type is explicitly set.
-    return super.buildFunction()..returnType = const VoidType();
+    return super.buildFunction(library)..returnType = const VoidType();
   }
 
   Constructor get target => constructor;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index 2ed1a8c..93ef761 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -132,9 +132,6 @@
       Builder builder = type.builder;
       if (builder is ClassBuilder) {
         set.add(builder);
-      } else if (builder is! InvalidTypeBuilder &&
-          builder is! DynamicTypeBuilder) {
-        internalError("Unhandled: ${builder.runtimeType}");
       }
     }
 
@@ -247,7 +244,7 @@
       loader.buildProgram();
       loader.checkSemantics();
       List<SourceClassBuilder> sourceClasses = collectAllSourceClasses();
-      installDefaultSupertypes(sourceClasses);
+      installDefaultSupertypes();
       installDefaultConstructors(sourceClasses);
       loader.resolveConstructors();
       loader.finishTypeVariables(objectClassBuilder);
@@ -353,17 +350,21 @@
     return null;
   }
 
-  void installDefaultSupertypes(List<SourceClassBuilder> builders) {
+  void installDefaultSupertypes() {
     Class objectClass = this.objectClass;
-    for (SourceClassBuilder builder in builders) {
-      Class cls = builder.target;
-      if (cls != objectClass) {
-        cls.supertype ??= objectClass.asRawSupertype;
-      }
-      if (builder.isMixinApplication) {
-        cls.mixedInType = builder.mixedInType.buildSupertype();
-      }
-    }
+    loader.builders.forEach((Uri uri, LibraryBuilder library) {
+      library.members.forEach((String name, Builder builder) {
+        if (builder is SourceClassBuilder) {
+          Class cls = builder.target;
+          if (cls != objectClass) {
+            cls.supertype ??= objectClass.asRawSupertype;
+          }
+          if (builder.isMixinApplication) {
+            cls.mixedInType = builder.mixedInType.buildSupertype(library);
+          }
+        }
+      });
+    });
     ticker.logMs("Installed Object as implicit superclass");
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_type_builder.dart
index a1c3b70..9bee8f9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_type_builder.dart
@@ -6,12 +6,12 @@
 
 import 'package:kernel/ast.dart' show DartType, Supertype;
 
-import 'kernel_builder.dart' show TypeBuilder;
+import 'kernel_builder.dart' show LibraryBuilder, TypeBuilder;
 
 abstract class KernelTypeBuilder extends TypeBuilder {
   KernelTypeBuilder(int charOffset, Uri fileUri) : super(charOffset, fileUri);
 
-  DartType build();
+  DartType build(LibraryBuilder library);
 
-  Supertype buildSupertype();
+  Supertype buildSupertype(LibraryBuilder library);
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
index 585bf1a..7475312 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_type_variable_builder.dart
@@ -15,6 +15,7 @@
         KernelLibraryBuilder,
         KernelNamedTypeBuilder,
         KernelTypeBuilder,
+        LibraryBuilder,
         TypeVariableBuilder;
 
 class KernelTypeVariableBuilder
@@ -27,7 +28,8 @@
       : parameter = new TypeParameter(name, null),
         super(name, bound, compilationUnit, charOffset);
 
-  DartType buildType(List<KernelTypeBuilder> arguments) {
+  DartType buildType(
+      LibraryBuilder library, List<KernelTypeBuilder> arguments) {
     if (arguments != null) {
       return inputError(null, null,
           "Can't use type arguments with type parameter $parameter");
@@ -36,12 +38,13 @@
     }
   }
 
-  DartType buildTypesWithBuiltArguments(List<DartType> arguments) {
+  DartType buildTypesWithBuiltArguments(
+      LibraryBuilder library, List<DartType> arguments) {
     if (arguments != null) {
       return inputError(null, null,
           "Can't use type arguments with type parameter $parameter");
     } else {
-      return buildType(null);
+      return buildType(library, null);
     }
   }
 
@@ -49,7 +52,7 @@
     return new KernelNamedTypeBuilder(name, null, -1, null)..builder = this;
   }
 
-  void finish(KernelClassBuilder object) {
-    parameter.bound = bound?.build() ?? object.buildType(null);
+  void finish(LibraryBuilder library, KernelClassBuilder object) {
+    parameter.bound = bound?.build(library) ?? object.buildType(library, null);
   }
 }
diff --git a/pkg/front_end/lib/src/fasta/outline.dart b/pkg/front_end/lib/src/fasta/outline.dart
index 0604a26..1b14e2a 100644
--- a/pkg/front_end/lib/src/fasta/outline.dart
+++ b/pkg/front_end/lib/src/fasta/outline.dart
@@ -92,7 +92,8 @@
   }
 
   Future<KernelTarget> buildOutline([Uri output]) async {
-    TranslateUri uriTranslator = await TranslateUri.parse(c.options.sdk);
+    TranslateUri uriTranslator =
+        await TranslateUri.parse(c.options.sdk, c.options.packages);
     ticker.logMs("Read packages file");
     DillTarget dillTarget = new DillTarget(ticker, uriTranslator);
     KernelTarget kernelTarget = createKernelTarget(dillTarget, uriTranslator);
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index 3c2abf2..017534b 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -85,9 +85,9 @@
       if (builder is KernelFieldBuilder) {
         // TODO(ahe): It would be nice to have a common interface for the build
         // method to avoid duplicating these two cases.
-        cls.addMember(builder.build(library.library));
+        cls.addMember(builder.build(library));
       } else if (builder is KernelFunctionBuilder) {
-        cls.addMember(builder.build(library.library));
+        cls.addMember(builder.build(library));
       } else {
         internalError("Unhandled builder: ${builder.runtimeType}");
       }
@@ -99,14 +99,14 @@
         builder = builder.next;
       } while (builder != null);
     });
-    cls.supertype = supertype?.buildSupertype();
-    cls.mixedInType = mixedInType?.buildSupertype();
+    cls.supertype = supertype?.buildSupertype(library);
+    cls.mixedInType = mixedInType?.buildSupertype(library);
     // TODO(ahe): If `cls.supertype` is null, and this isn't Object, report a
     // compile-time error.
     cls.isAbstract = isAbstract;
     if (interfaces != null) {
       for (KernelTypeBuilder interface in interfaces) {
-        Supertype supertype = interface.buildSupertype();
+        Supertype supertype = interface.buildSupertype(library);
         if (supertype != null) {
           // TODO(ahe): Report an error if supertype is null.
           cls.implementedTypes.add(supertype);
diff --git a/pkg/front_end/test/fasta/compile.status b/pkg/front_end/test/fasta/compile.status
index 79faa18..7772214 100644
--- a/pkg/front_end/test/fasta/compile.status
+++ b/pkg/front_end/test/fasta/compile.status
@@ -7,9 +7,10 @@
 # pkg/fasta/lib/src/kernel/.
 
 await: Fail
-invocations: Fail
 function_type_recovery: Crash
+invocations: Fail
 statements: Fail # Make async tranformer optional for golden file testing.
+type_variable_as_super: Fail
 
 rasta/abstract_constructor: Fail
 rasta/bad_constructor_redirection: Fail
diff --git a/pkg/front_end/test/fasta/kompile.status b/pkg/front_end/test/fasta/kompile.status
index f0dc306..3442779 100644
--- a/pkg/front_end/test/fasta/kompile.status
+++ b/pkg/front_end/test/fasta/kompile.status
@@ -27,6 +27,7 @@
 statements: Crash
 super_rasta_copy: Crash
 top_level_accessors: Crash
+type_variable_as_super: Fail
 typedef: Crash
 
 rasta/abstract_constructor: Fail
diff --git a/runtime/bin/gen_snapshot.cc b/runtime/bin/gen_snapshot.cc
index 3a72a05..dfd09643 100644
--- a/runtime/bin/gen_snapshot.cc
+++ b/runtime/bin/gen_snapshot.cc
@@ -80,6 +80,7 @@
 static const char* assembly_filename = NULL;
 static const char* script_snapshot_filename = NULL;
 static bool dependencies_only = false;
+static bool print_dependencies = false;
 static const char* dependencies_filename = NULL;
 
 
@@ -331,6 +332,17 @@
   return false;
 }
 
+static bool ProcessPrintDependenciesOption(const char* option) {
+  const char* name = ProcessOption(option, "--print_dependencies");
+  if (name == NULL) {
+    name = ProcessOption(option, "--print-dependencies");
+  }
+  if (name != NULL) {
+    print_dependencies = true;
+    return true;
+  }
+  return false;
+}
 
 static bool ProcessEmbedderEntryPointsManifestOption(const char* option) {
   const char* name = ProcessOption(option, "--embedder_entry_points_manifest=");
@@ -406,6 +418,7 @@
         ProcessScriptSnapshotOption(argv[i]) ||
         ProcessDependenciesOption(argv[i]) ||
         ProcessDependenciesOnlyOption(argv[i]) ||
+        ProcessPrintDependenciesOption(argv[i]) ||
         ProcessEmbedderEntryPointsManifestOption(argv[i]) ||
         ProcessURLmappingOption(argv[i]) || ProcessPackageRootOption(argv[i]) ||
         ProcessPackagesOption(argv[i]) || ProcessEnvironmentOption(argv[i])) {
@@ -673,55 +686,72 @@
     return;
   }
 
-  ASSERT(dependencies_filename != NULL);
-  File* file = File::Open(dependencies_filename, File::kWriteTruncate);
-  if (file == NULL) {
-    Log::PrintErr("Error: Unable to open dependencies file: %s\n\n",
-                  dependencies_filename);
-    exit(kErrorExitCode);
-  }
+  ASSERT((dependencies_filename != NULL) || print_dependencies);
   bool success = true;
+  File* file = NULL;
+  if (dependencies_filename != NULL) {
+    file = File::Open(dependencies_filename, File::kWriteTruncate);
+    if (file == NULL) {
+      Log::PrintErr("Error: Unable to open dependencies file: %s\n\n",
+                    dependencies_filename);
+      exit(kErrorExitCode);
+    }
 
-  // Targets:
-  switch (snapshot_kind) {
-    case kCore:
-      success &= file->Print("%s ", vm_snapshot_data_filename);
-      success &= file->Print("%s ", isolate_snapshot_data_filename);
-      break;
-    case kScript:
-      success &= file->Print("%s ", script_snapshot_filename);
-      break;
-    case kAppAOTAssembly:
-      success &= file->Print("%s ", assembly_filename);
-      break;
-    case kAppAOTBlobs:
-      success &= file->Print("%s ", vm_snapshot_data_filename);
-      success &= file->Print("%s ", vm_snapshot_instructions_filename);
-      success &= file->Print("%s ", isolate_snapshot_data_filename);
-      success &= file->Print("%s ", isolate_snapshot_instructions_filename);
-      break;
+    // Targets:
+    switch (snapshot_kind) {
+      case kCore:
+        success &= file->Print("%s ", vm_snapshot_data_filename);
+        success &= file->Print("%s ", isolate_snapshot_data_filename);
+        break;
+      case kScript:
+        success &= file->Print("%s ", script_snapshot_filename);
+        break;
+      case kAppAOTAssembly:
+        success &= file->Print("%s ", assembly_filename);
+        break;
+      case kAppAOTBlobs:
+        success &= file->Print("%s ", vm_snapshot_data_filename);
+        success &= file->Print("%s ", vm_snapshot_instructions_filename);
+        success &= file->Print("%s ", isolate_snapshot_data_filename);
+        success &= file->Print("%s ", isolate_snapshot_instructions_filename);
+        break;
+    }
+
+    success &= file->Print(": ");
   }
 
-  success &= file->Print(": ");
-
   // Sources:
   if (snapshot_kind == kScript) {
-    success &= file->Print("%s ", vm_snapshot_data_filename);
-    success &= file->Print("%s ", isolate_snapshot_data_filename);
+    if (dependencies_filename != NULL) {
+      success &= file->Print("%s ", vm_snapshot_data_filename);
+      success &= file->Print("%s ", isolate_snapshot_data_filename);
+    }
+    if (print_dependencies) {
+      Log::Print("%s\n", vm_snapshot_data_filename);
+      Log::Print("%s\n", isolate_snapshot_data_filename);
+    }
   }
   for (intptr_t i = 0; i < dependencies->length(); i++) {
     char* dep = dependencies->At(i);
-    success &= file->Print("%s ", dep);
+    if (dependencies_filename != NULL) {
+      success &= file->Print("%s ", dep);
+    }
+    if (print_dependencies) {
+      Log::Print("%s\n", dep);
+    }
     free(dep);
   }
-  success &= file->Print("\n");
 
-  if (!success) {
-    Log::PrintErr("Error: Unable to write dependencies file: %s\n\n",
-                  dependencies_filename);
-    exit(kErrorExitCode);
+  if (dependencies_filename != NULL) {
+    success &= file->Print("\n");
+
+    if (!success) {
+      Log::PrintErr("Error: Unable to write dependencies file: %s\n\n",
+                    dependencies_filename);
+      exit(kErrorExitCode);
+    }
+    file->Release();
   }
-  file->Release();
   delete dependencies;
   isolate_data->set_dependencies(NULL);
 }
@@ -839,6 +869,7 @@
 "   --dependencies=<output-file>  Generates a Makefile with snapshot output  \n"
 "                                 files as targets and all transitive imports\n"
 "                                 as sources.                                \n"
+"   --print_dependencies          Prints all transitive imports to stdout.   \n"
 "   --dependencies_only           Don't create and output the snapshot.      \n"
 "                                                                            \n"
 " To create a core snapshot:                                                 \n"
@@ -1565,7 +1596,7 @@
     const bool is_kernel_file =
         TryReadKernel(app_script_name, &kernel, &kernel_length);
 
-    if (dependencies_filename != NULL) {
+    if ((dependencies_filename != NULL) || print_dependencies) {
       isolate_data->set_dependencies(new MallocGrowableArray<char*>());
     }
 
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 0bbb63b..918e3cc 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -620,6 +620,7 @@
   bool enable_error_on_bad_type;
   bool enable_error_on_bad_override;
   bool use_field_guards;
+  bool use_osr;
 } Dart_IsolateFlags;
 
 /**
diff --git a/runtime/observatory/lib/src/elements/isolate_view.dart b/runtime/observatory/lib/src/elements/isolate_view.dart
index 7e7599e..8c0f186 100644
--- a/runtime/observatory/lib/src/elements/isolate_view.dart
+++ b/runtime/observatory/lib/src/elements/isolate_view.dart
@@ -389,6 +389,8 @@
                     ..children = [
                       new SpanElement()
                         ..children = [
+                          // TODO(bkonyi): zones will always be empty. See
+                          // issue #28885.
                           new SpanElement()
                             ..text = 'zone ${index++} ',
                           new CurlyBlockElement(queue: _r.queue)
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index 1618aed..954f24e 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -3107,6 +3107,8 @@
   String _kindString;
   int get memoryHighWatermark => _memoryHighWatermark;
   int _memoryHighWatermark;
+
+  // TODO(bkonyi): zones will always be empty. See issue #28885.
   List<Zone> get zones => _zones;
   final List<Zone> _zones = new List<Zone>();
 
@@ -3114,7 +3116,6 @@
 
   void _update(Map map, bool mapIsRef) {
     String rawKind = map['kind'];
-    List<Map> zoneList = map['zones'];
 
     switch(rawKind) {
       case "kUnknownTask":
@@ -3146,13 +3147,6 @@
     }
 
     _memoryHighWatermark = int.parse(map['_memoryHighWatermark']);
-
-    zones.clear();
-    zoneList.forEach((zone) {
-      int capacity = zone['capacity'];
-      int used = zone['used'];
-      zones.add(new Zone(capacity, used));
-    });
   }
 }
 
diff --git a/runtime/vm/BUILD.gn b/runtime/vm/BUILD.gn
index 19ba41f..3d1c34a 100644
--- a/runtime/vm/BUILD.gn
+++ b/runtime/vm/BUILD.gn
@@ -369,7 +369,6 @@
   assert(defined(invoker.libraries), "Need libraries in $target_name")
 
   concatenation_target_names = []
-  concatenation_files = []
 
   # Concatenate vm library patches.
   foreach(library, invoker.libraries) {
@@ -381,7 +380,6 @@
       output = target_output
     }
     concatenation_target_names += [ ":concatenate_${name}_patch" ]
-    concatenation_files += [ target_output ]
   }
 
   # Build the patched sdk out of the concatenated patches and the special
@@ -397,57 +395,16 @@
 
     script = "../../tools/patch_sdk.py"
 
-    # We list all files which make up the sdk (modulo patches) and get them
-    # back as a GN list object.
-    shared_sdk_sources = exec_script("../../tools/list_dart_files.py",
-                                     [
-                                       "absolute",
-                                       rebase_path("../../sdk/lib"),
-                                     ],
-                                     "list lines")
-
-    front_end_sources = exec_script("../../tools/list_dart_files.py",
-                                    [
-                                      "absolute",
-                                      rebase_path("../../pkg/front_end"),
-                                    ],
-                                    "list lines")
-
-    kernel_sources = exec_script("../../tools/list_dart_files.py",
-                                 [
-                                   "absolute",
-                                   rebase_path("../../pkg/kernel"),
-                                 ],
-                                 "list lines")
-
     # We list the `patch_sdk.dart` tool here because the [script] (which is
     # implicitly an input) will call it.
     inputs = [
       "../../tools/patch_sdk.dart",
     ]
-
-    # Files below are not patches, they will not be in [concatenation_files]
-    # but the `patch_sdk.dart` script will copy them into the patched sdk.
-    inputs += [
-      "../bin/builtin.dart",
-      "../bin/vmservice/vmservice_io.dart",
-      "../bin/vmservice/loader.dart",
-      "../bin/vmservice/server.dart",
-    ]
-
-    # Add all the normal sdk sources.
-    inputs += shared_sdk_sources
-
-    # Add all the concatenated patch files.
-    inputs += concatenation_files
-
-    # Add some front-end dependencies
-    inputs += front_end_sources
-    inputs += kernel_sources
+    depfile = "$root_out_dir/patched_sdk.d"
 
     outputs = [
       # Instead of listing all outputs we list a single well-known one.
-      "${patched_sdk_dir}/lib/core/core.dart",
+      "${patched_sdk_dir}/platform.dill",
     ]
 
     args = [ "--quiet" ]
diff --git a/runtime/vm/clustered_snapshot.cc b/runtime/vm/clustered_snapshot.cc
index 3bd1c6c..dc9e0fe 100644
--- a/runtime/vm/clustered_snapshot.cc
+++ b/runtime/vm/clustered_snapshot.cc
@@ -5033,7 +5033,7 @@
   intptr_t buffer_len = OS::StrNLen(features, PendingBytes());
   if ((buffer_len != expected_len) ||
       strncmp(features, expected_features, expected_len)) {
-    const intptr_t kMessageBufferSize = 256;
+    const intptr_t kMessageBufferSize = 1024;
     char message_buffer[kMessageBufferSize];
     char* actual_features =
         OS::StrNDup(features, buffer_len < 128 ? buffer_len : 128);
diff --git a/runtime/vm/code_generator.cc b/runtime/vm/code_generator.cc
index f549231..72e3aae 100644
--- a/runtime/vm/code_generator.cc
+++ b/runtime/vm/code_generator.cc
@@ -1668,7 +1668,7 @@
   }
 
   if ((stack_overflow_flags & Thread::kOsrRequest) != 0) {
-    ASSERT(FLAG_use_osr);
+    ASSERT(isolate->use_osr());
     DartFrameIterator iterator;
     StackFrame* frame = iterator.NextFrame();
     ASSERT(frame != NULL);
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index 5a6a1b9..4c4a87d 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -669,15 +669,13 @@
 
   if (Snapshot::IncludesCode(kind)) {
     // Checked mode affects deopt ids.
-    const bool asserts =
-        (isolate != NULL) ? isolate->asserts() : FLAG_enable_asserts;
-    const bool type_checks =
-        (isolate != NULL) ? isolate->type_checks() : FLAG_enable_type_checks;
-    const bool field_guards =
-        (isolate != NULL) ? isolate->use_field_guards() : FLAG_use_field_guards;
-    buffer.AddString(asserts ? " asserts" : " no-asserts");
-    buffer.AddString(type_checks ? " type-checks" : " no-type-checks");
-    buffer.AddString(field_guards ? "field-guards" : "no-field-guards");
+#define ADD_FLAG(name, isolate_flag, flag)                                     \
+  do {                                                                         \
+    const bool name = (isolate != NULL) ? isolate->name() : flag;              \
+    buffer.AddString(name ? (" " #name) : (" no-" #name));                     \
+  } while (0);
+    ISOLATE_FLAG_LIST(ADD_FLAG);
+#undef ADD_FLAG
 
 // Generated code must match the host architecture and ABI.
 #if defined(TARGET_ARCH_ARM)
diff --git a/runtime/vm/debugger_api_impl_test.cc b/runtime/vm/debugger_api_impl_test.cc
index ee47df9..24a339a 100644
--- a/runtime/vm/debugger_api_impl_test.cc
+++ b/runtime/vm/debugger_api_impl_test.cc
@@ -465,8 +465,9 @@
   int saved_threshold = FLAG_optimization_counter_threshold;
   const int kLowThreshold = 100;
   const int kHighThreshold = 10000;
-  bool saved_osr = FLAG_use_osr;
-  FLAG_use_osr = false;
+  Isolate* isolate = Isolate::Current();
+  const bool saved_use_osr = isolate->use_osr();
+  isolate->set_use_osr(false);
 
   if (optimize) {
     // Warm up the code to make sure it gets optimized.  We ignore any
@@ -511,7 +512,7 @@
   }
 
   FLAG_optimization_counter_threshold = saved_threshold;
-  FLAG_use_osr = saved_osr;
+  isolate->set_use_osr(saved_use_osr);
 }
 
 
diff --git a/runtime/vm/flag_list.h b/runtime/vm/flag_list.h
index 5831114..be174f0 100644
--- a/runtime/vm/flag_list.h
+++ b/runtime/vm/flag_list.h
@@ -25,6 +25,12 @@
 #define USING_MULTICORE false
 #endif
 
+#if defined(DART_PRECOMPILER)
+#define USING_PRECOMPILER true
+#else
+#define USING_PRECOMPILER false
+#endif
+
 // List of all flags in the VM.
 // Flags can be one of three categories:
 // * P roduct flags: Can be set in any of the deployment modes, including in
@@ -162,7 +168,7 @@
     "Use class hierarchy analysis even if it can cause deoptimization.")       \
   P(use_field_guards, bool, !USING_DBC,                                        \
     "Use field guards and track field types")                                  \
-  C(use_osr, false, true, bool, true, "Use OSR")                               \
+  C(use_osr, false, !USING_PRECOMPILER, bool, !USING_PRECOMPILER, "Use OSR")   \
   P(verbose_gc, bool, false, "Enables verbose GC.")                            \
   P(verbose_gc_hdr, int, 40, "Print verbose GC header interval.")              \
   R(verify_after_gc, false, bool, false,                                       \
diff --git a/runtime/vm/flow_graph_compiler.cc b/runtime/vm/flow_graph_compiler.cc
index 1aa4347..4610cd6 100644
--- a/runtime/vm/flow_graph_compiler.cc
+++ b/runtime/vm/flow_graph_compiler.cc
@@ -333,7 +333,7 @@
 
 
 bool FlowGraphCompiler::CanOSRFunction() const {
-  return FLAG_use_osr & CanOptimizeFunction() && !is_optimizing();
+  return isolate()->use_osr() && CanOptimizeFunction() && !is_optimizing();
 }
 
 
diff --git a/runtime/vm/hash_map.h b/runtime/vm/hash_map.h
index c9eb941..ff47301 100644
--- a/runtime/vm/hash_map.h
+++ b/runtime/vm/hash_map.h
@@ -175,8 +175,8 @@
   if (array_index_ < map_.array_size_) {
     // If we're not in the middle of a list, find the next array slot.
     if (list_index_ == kNil) {
-      while (KeyValueTrait::ValueOf(map_.array_[array_index_].kv) == kNoValue &&
-             array_index_ < map_.array_size_) {
+      while ((array_index_ < map_.array_size_) &&
+             KeyValueTrait::ValueOf(map_.array_[array_index_].kv) == kNoValue) {
         array_index_++;
       }
       if (array_index_ < map_.array_size_) {
diff --git a/runtime/vm/intermediate_language_arm.cc b/runtime/vm/intermediate_language_arm.cc
index a327937..ea29a8a 100644
--- a/runtime/vm/intermediate_language_arm.cc
+++ b/runtime/vm/intermediate_language_arm.cc
@@ -2949,7 +2949,7 @@
       : instruction_(instruction) {}
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    if (FLAG_use_osr && osr_entry_label()->IsLinked()) {
+    if (compiler->isolate()->use_osr() && osr_entry_label()->IsLinked()) {
       const Register value = instruction_->locs()->temp(0).reg();
       __ Comment("CheckStackOverflowSlowPathOsr");
       __ Bind(osr_entry_label());
@@ -2968,7 +2968,8 @@
         instruction_->token_pos(), instruction_->deopt_id(),
         kStackOverflowRuntimeEntry, 0, instruction_->locs());
 
-    if (FLAG_use_osr && !compiler->is_optimizing() && instruction_->in_loop()) {
+    if (compiler->isolate()->use_osr() && !compiler->is_optimizing() &&
+        instruction_->in_loop()) {
       // In unoptimized code, record loop stack checks as possible OSR entries.
       compiler->AddCurrentDescriptor(RawPcDescriptors::kOsrEntry,
                                      instruction_->deopt_id(),
@@ -2980,7 +2981,7 @@
   }
 
   Label* osr_entry_label() {
-    ASSERT(FLAG_use_osr);
+    ASSERT(Isolate::Current()->use_osr());
     return &osr_entry_label_;
   }
 
diff --git a/runtime/vm/intermediate_language_arm64.cc b/runtime/vm/intermediate_language_arm64.cc
index 0d78d48..1f2a9b2 100644
--- a/runtime/vm/intermediate_language_arm64.cc
+++ b/runtime/vm/intermediate_language_arm64.cc
@@ -2642,7 +2642,7 @@
       : instruction_(instruction) {}
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    if (FLAG_use_osr && osr_entry_label()->IsLinked()) {
+    if (compiler->isolate()->use_osr() && osr_entry_label()->IsLinked()) {
       const Register value = instruction_->locs()->temp(0).reg();
       __ Comment("CheckStackOverflowSlowPathOsr");
       __ Bind(osr_entry_label());
@@ -2661,7 +2661,8 @@
         instruction_->token_pos(), instruction_->deopt_id(),
         kStackOverflowRuntimeEntry, 0, instruction_->locs());
 
-    if (FLAG_use_osr && !compiler->is_optimizing() && instruction_->in_loop()) {
+    if (compiler->isolate()->use_osr() && !compiler->is_optimizing() &&
+        instruction_->in_loop()) {
       // In unoptimized code, record loop stack checks as possible OSR entries.
       compiler->AddCurrentDescriptor(RawPcDescriptors::kOsrEntry,
                                      instruction_->deopt_id(),
@@ -2673,7 +2674,7 @@
   }
 
   Label* osr_entry_label() {
-    ASSERT(FLAG_use_osr);
+    ASSERT(Isolate::Current()->use_osr());
     return &osr_entry_label_;
   }
 
diff --git a/runtime/vm/intermediate_language_ia32.cc b/runtime/vm/intermediate_language_ia32.cc
index e19bbf1..1f4f419 100644
--- a/runtime/vm/intermediate_language_ia32.cc
+++ b/runtime/vm/intermediate_language_ia32.cc
@@ -2565,7 +2565,7 @@
       : instruction_(instruction) {}
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    if (FLAG_use_osr && osr_entry_label()->IsLinked()) {
+    if (compiler->isolate()->use_osr() && osr_entry_label()->IsLinked()) {
       __ Comment("CheckStackOverflowSlowPathOsr");
       __ Bind(osr_entry_label());
       __ movl(Address(THR, Thread::stack_overflow_flags_offset()),
@@ -2583,7 +2583,8 @@
         instruction_->token_pos(), instruction_->deopt_id(),
         kStackOverflowRuntimeEntry, 0, instruction_->locs());
 
-    if (FLAG_use_osr && !compiler->is_optimizing() && instruction_->in_loop()) {
+    if (compiler->isolate()->use_osr() && !compiler->is_optimizing() &&
+        instruction_->in_loop()) {
       // In unoptimized code, record loop stack checks as possible OSR entries.
       compiler->AddCurrentDescriptor(RawPcDescriptors::kOsrEntry,
                                      instruction_->deopt_id(),
@@ -2595,7 +2596,7 @@
   }
 
   Label* osr_entry_label() {
-    ASSERT(FLAG_use_osr);
+    ASSERT(Isolate::Current()->use_osr());
     return &osr_entry_label_;
   }
 
diff --git a/runtime/vm/intermediate_language_mips.cc b/runtime/vm/intermediate_language_mips.cc
index 36217a4..51882f8 100644
--- a/runtime/vm/intermediate_language_mips.cc
+++ b/runtime/vm/intermediate_language_mips.cc
@@ -2778,7 +2778,7 @@
       : instruction_(instruction) {}
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    if (FLAG_use_osr && osr_entry_label()->IsLinked()) {
+    if (compiler->isolate()->use_osr() && osr_entry_label()->IsLinked()) {
       Register value = instruction_->locs()->temp(0).reg();
       __ Comment("CheckStackOverflowSlowPathOsr");
       __ Bind(osr_entry_label());
@@ -2797,7 +2797,8 @@
         instruction_->token_pos(), instruction_->deopt_id(),
         kStackOverflowRuntimeEntry, 0, instruction_->locs());
 
-    if (FLAG_use_osr && !compiler->is_optimizing() && instruction_->in_loop()) {
+    if (compiler->isolate()->use_osr() && !compiler->is_optimizing() &&
+        instruction_->in_loop()) {
       // In unoptimized code, record loop stack checks as possible OSR entries.
       compiler->AddCurrentDescriptor(RawPcDescriptors::kOsrEntry,
                                      instruction_->deopt_id(),
@@ -2809,7 +2810,7 @@
   }
 
   Label* osr_entry_label() {
-    ASSERT(FLAG_use_osr);
+    ASSERT(Isolate::Current()->use_osr());
     return &osr_entry_label_;
   }
 
diff --git a/runtime/vm/intermediate_language_x64.cc b/runtime/vm/intermediate_language_x64.cc
index 0193a09..c704319 100644
--- a/runtime/vm/intermediate_language_x64.cc
+++ b/runtime/vm/intermediate_language_x64.cc
@@ -2632,7 +2632,7 @@
       : instruction_(instruction) {}
 
   virtual void EmitNativeCode(FlowGraphCompiler* compiler) {
-    if (FLAG_use_osr && osr_entry_label()->IsLinked()) {
+    if (compiler->isolate()->use_osr() && osr_entry_label()->IsLinked()) {
       __ Comment("CheckStackOverflowSlowPathOsr");
       __ Bind(osr_entry_label());
       __ movq(Address(THR, Thread::stack_overflow_flags_offset()),
@@ -2650,7 +2650,8 @@
         instruction_->token_pos(), instruction_->deopt_id(),
         kStackOverflowRuntimeEntry, 0, instruction_->locs());
 
-    if (FLAG_use_osr && !compiler->is_optimizing() && instruction_->in_loop()) {
+    if (compiler->isolate()->use_osr() && !compiler->is_optimizing() &&
+        instruction_->in_loop()) {
       // In unoptimized code, record loop stack checks as possible OSR entries.
       compiler->AddCurrentDescriptor(RawPcDescriptors::kOsrEntry,
                                      instruction_->deopt_id(),
@@ -2663,7 +2664,7 @@
 
 
   Label* osr_entry_label() {
-    ASSERT(FLAG_use_osr);
+    ASSERT(Isolate::Current()->use_osr());
     return &osr_entry_label_;
   }
 
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index af870e9..b473061 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -722,31 +722,27 @@
 
 void Isolate::FlagsInitialize(Dart_IsolateFlags* api_flags) {
   api_flags->version = DART_FLAGS_CURRENT_VERSION;
-  api_flags->enable_type_checks = FLAG_enable_type_checks;
-  api_flags->enable_asserts = FLAG_enable_asserts;
-  api_flags->enable_error_on_bad_type = FLAG_error_on_bad_type;
-  api_flags->enable_error_on_bad_override = FLAG_error_on_bad_override;
-  api_flags->use_field_guards = FLAG_use_field_guards;
+#define INIT_FROM_FLAG(name, isolate_flag, flag) api_flags->isolate_flag = flag;
+  ISOLATE_FLAG_LIST(INIT_FROM_FLAG)
+#undef INIT_FROM_FLAG
 }
 
 
 void Isolate::FlagsCopyTo(Dart_IsolateFlags* api_flags) const {
   api_flags->version = DART_FLAGS_CURRENT_VERSION;
-  api_flags->enable_type_checks = type_checks();
-  api_flags->enable_asserts = asserts();
-  api_flags->enable_error_on_bad_type = error_on_bad_type();
-  api_flags->enable_error_on_bad_override = error_on_bad_override();
-  api_flags->use_field_guards = use_field_guards();
+#define INIT_FROM_FIELD(name, isolate_flag, flag)                              \
+  api_flags->isolate_flag = name();
+  ISOLATE_FLAG_LIST(INIT_FROM_FIELD)
+#undef INIT_FROM_FIELD
 }
 
 
 #if !defined(PRODUCT)
 void Isolate::FlagsCopyFrom(const Dart_IsolateFlags& api_flags) {
-  type_checks_ = api_flags.enable_type_checks;
-  asserts_ = api_flags.enable_asserts;
-  error_on_bad_type_ = api_flags.enable_error_on_bad_type;
-  error_on_bad_override_ = api_flags.enable_error_on_bad_override;
-  use_field_guards_ = api_flags.use_field_guards;
+#define SET_FROM_FLAG(name, isolate_flag, flag)                                \
+  name##_ = api_flags.isolate_flag;
+  ISOLATE_FLAG_LIST(SET_FROM_FLAG)
+#undef SET_FROM_FLAG
   // Leave others at defaults.
 }
 #endif  // !defined(PRODUCT)
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 3d9bf2b..e5c55b4 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -129,6 +129,19 @@
 // Fixed cache for exception handler lookup.
 typedef FixedCache<intptr_t, ExceptionHandlerInfo, 16> HandlerInfoCache;
 
+// List of Isolate flags with corresponding members of Dart_IsolateFlags and
+// corresponding global command line flags.
+//
+//       V(name, Dart_IsolateFlags-member-name, command-line-flag-name)
+//
+#define ISOLATE_FLAG_LIST(V)                                                   \
+  V(type_checks, enable_type_checks, FLAG_enable_type_checks)                  \
+  V(asserts, enable_asserts, FLAG_enable_asserts)                              \
+  V(error_on_bad_type, enable_error_on_bad_type, FLAG_error_on_bad_type)       \
+  V(error_on_bad_override, enable_error_on_bad_override,                       \
+    FLAG_error_on_bad_override)                                                \
+  V(use_field_guards, use_field_guards, FLAG_use_field_guards)                 \
+  V(use_osr, use_osr, FLAG_use_osr)
 
 class Isolate : public BaseIsolate {
  public:
@@ -634,17 +647,17 @@
   void FlagsCopyFrom(const Dart_IsolateFlags& api_flags);
 
 #if defined(PRODUCT)
-  bool type_checks() const { return FLAG_enable_type_checks; }
-  bool asserts() const { return FLAG_enable_asserts; }
-  bool error_on_bad_type() const { return FLAG_error_on_bad_type; }
-  bool error_on_bad_override() const { return FLAG_error_on_bad_override; }
-  bool use_field_guards() const { return FLAG_use_field_guards; }
+#define DECLARE_GETTER(name, isolate_flag_name, flag_name)                     \
+  bool name() const { return flag_name; }
+  ISOLATE_FLAG_LIST(DECLARE_GETTER)
+#undef DECLARE_GETTER
+  void set_use_osr(bool use_osr) { ASSERT(!use_osr); }
 #else   // defined(PRODUCT)
-  bool type_checks() const { return type_checks_; }
-  bool asserts() const { return asserts_; }
-  bool error_on_bad_type() const { return error_on_bad_type_; }
-  bool error_on_bad_override() const { return error_on_bad_override_; }
-  bool use_field_guards() const { return use_field_guards_; }
+#define DECLARE_GETTER(name, isolate_flag_name, flag_name)                     \
+  bool name() const { return name##_; }
+  ISOLATE_FLAG_LIST(DECLARE_GETTER)
+#undef DECLARE_GETTER
+  void set_use_osr(bool use_osr) { use_osr_ = use_osr; }
 #endif  // defined(PRODUCT)
 
   static void KillAllIsolates(LibMsgId msg_id);
@@ -770,11 +783,9 @@
 
 // Isolate-specific flags.
 #if !defined(PRODUCT)
-  bool type_checks_;
-  bool asserts_;
-  bool error_on_bad_type_;
-  bool error_on_bad_override_;
-  bool use_field_guards_;
+#define DECLARE_FIELD(name, isolate_flag_name, flag_name) bool name##_;
+  ISOLATE_FLAG_LIST(DECLARE_FIELD)
+#undef DECLARE_FIELD
 #endif  // !defined(PRODUCT)
 
   // Timestamps of last operation via service.
diff --git a/runtime/vm/kernel_isolate.cc b/runtime/vm/kernel_isolate.cc
index d0a09f8..0b6e867 100644
--- a/runtime/vm/kernel_isolate.cc
+++ b/runtime/vm/kernel_isolate.cc
@@ -71,15 +71,14 @@
     // Note: these flags must match those passed to the VM during
     // the app-jit training run (see //utils/kernel-service/BUILD.gn).
     Dart_IsolateFlags api_flags;
-    api_flags.version = DART_FLAGS_CURRENT_VERSION;
+    Isolate::FlagsInitialize(&api_flags);
     api_flags.enable_type_checks = false;
     api_flags.enable_asserts = false;
     api_flags.enable_error_on_bad_type = false;
     api_flags.enable_error_on_bad_override = false;
-#if defined(DART_PRECOMPILER)
-    api_flags.use_field_guards = false;
-#else
+#if !defined(DART_PRECOMPILER)
     api_flags.use_field_guards = true;
+    api_flags.use_osr = true;
 #endif
 
     isolate = reinterpret_cast<Isolate*>(create_callback(
diff --git a/runtime/vm/thread.cc b/runtime/vm/thread.cc
index dc54d6a..31ecabe 100644
--- a/runtime/vm/thread.cc
+++ b/runtime/vm/thread.cc
@@ -230,15 +230,6 @@
                      OSThread::ThreadIdToIntPtr(os_thread()->trace_id()));
   jsobj.AddProperty("kind", TaskKindToCString(task_kind()));
   jsobj.AddPropertyF("_memoryHighWatermark", "%" Pu "", memory_high_watermark_);
-  Zone* zone = zone_;
-  {
-    JSONArray zone_info_array(&jsobj, "zones");
-    zone = zone_;
-    while (zone != NULL) {
-      zone_info_array.AddValue(zone);
-      zone = zone->previous();
-    }
-  }
 }
 #endif
 
diff --git a/runtime/vm/thread_test.cc b/runtime/vm/thread_test.cc
index 74a97fd..7905969 100644
--- a/runtime/vm/thread_test.cc
+++ b/runtime/vm/thread_test.cc
@@ -325,24 +325,9 @@
   // Confirm all expected entries are in the JSON output.
   for (intptr_t i = 0; i < kTaskCount + 1; i++) {
     Thread* thread = threads[i];
-    Zone* top_zone = thread->zone();
-
     StackZone stack_zone(current_thread);
     Zone* current_zone = current_thread->zone();
 
-    // Check that all zones are present with correct sizes.
-    while (top_zone != NULL) {
-      char* zone_info_buf =
-          OS::SCreate(current_zone,
-                      "\"type\":\"_Zone\","
-                      "\"capacity\":%" Pd
-                      ","
-                      "\"used\":%" Pd "",
-                      top_zone->CapacityInBytes(), top_zone->SizeInBytes());
-      EXPECT_SUBSTRING(zone_info_buf, json);
-      top_zone = top_zone->previous();
-    }
-
     // Check the thread exists and is the correct size.
     char* thread_info_buf =
         OS::SCreate(current_zone,
diff --git a/runtime/vm/zone.cc b/runtime/vm/zone.cc
index fc988a7..8b3cdac 100644
--- a/runtime/vm/zone.cc
+++ b/runtime/vm/zone.cc
@@ -301,6 +301,7 @@
 
 
 #ifndef PRODUCT
+// TODO(bkonyi): Currently dead code. See issue #28885.
 void Zone::PrintJSON(JSONStream* stream) const {
   JSONObject jsobj(stream);
   intptr_t capacity = CapacityInBytes();
diff --git a/tests/co19/co19-kernel.status b/tests/co19/co19-kernel.status
index c7dda2b..51f15c2 100644
--- a/tests/co19/co19-kernel.status
+++ b/tests/co19/co19-kernel.status
@@ -101,19 +101,11 @@
 Language/Classes/Superclasses/Inheritance_and_Overriding/inheritance_t03: RuntimeError
 Language/Classes/Superclasses/superclass_of_itself_t01: MissingCompileTimeError
 Language/Classes/Superclasses/superclass_of_itself_t02: MissingCompileTimeError
-Language/Classes/Superclasses/wrong_superclass_t01: MissingCompileTimeError
-Language/Classes/Superclasses/wrong_superclass_t02: DartkCrash
-Language/Classes/Superclasses/wrong_superclass_t03: MissingCompileTimeError
-Language/Classes/Superclasses/wrong_superclass_t05: DartkCrash
 Language/Classes/Superclasses/wrong_superclass_t07: Crash
 Language/Classes/Superclasses/wrong_superclass_t08: MissingCompileTimeError
 Language/Classes/Superinterfaces/dynamic_type_t01: MissingCompileTimeError
 Language/Classes/Superinterfaces/dynamic_type_t02: MissingCompileTimeError
 Language/Classes/Superinterfaces/itself_t01: MissingCompileTimeError
-Language/Classes/Superinterfaces/type_variable_as_superinterface_t01: DartkCrash
-Language/Classes/Superinterfaces/wrong_type_t01: MissingCompileTimeError
-Language/Classes/Superinterfaces/wrong_type_t02: DartkCrash
-Language/Classes/Superinterfaces/wrong_type_t03: MissingCompileTimeError
 Language/Classes/Superinterfaces/wrong_type_t04: MissingCompileTimeError
 Language/Classes/Superinterfaces/wrong_type_t05: MissingCompileTimeError
 Language/Classes/declarations_t02: MissingCompileTimeError
@@ -308,7 +300,6 @@
 Language/Expressions/Method_Invocation/Super_Invocation/invocation_t03: MissingCompileTimeError
 Language/Expressions/Method_Invocation/Super_Invocation/syntax_t02: DartkCrash
 Language/Expressions/Method_Invocation/Super_Invocation/syntax_t03: DartkCrash
-Language/Expressions/Numbers/extend_or_implement_double_t06: MissingCompileTimeError
 Language/Expressions/Numbers/syntax_t21: MissingCompileTimeError
 Language/Expressions/Numbers/syntax_t25: MissingCompileTimeError
 Language/Expressions/Numbers/syntax_t26: MissingCompileTimeError
@@ -393,11 +384,9 @@
 Language/Libraries_and_Scripts/Imports/namespace_changes_t27: CompileTimeError
 Language/Libraries_and_Scripts/Imports/same_name_t02/01: MissingRuntimeError
 Language/Libraries_and_Scripts/Imports/same_name_t05: RuntimeError
-Language/Libraries_and_Scripts/Imports/same_name_t07: MissingCompileTimeError
 Language/Libraries_and_Scripts/Imports/same_name_t10: RuntimeError
 Language/Libraries_and_Scripts/Imports/same_name_t12/01: MissingRuntimeError
 Language/Libraries_and_Scripts/Imports/same_name_t15/01: MissingRuntimeError
-Language/Libraries_and_Scripts/Imports/same_name_t17: MissingCompileTimeError
 Language/Libraries_and_Scripts/Imports/same_name_t19: RuntimeError
 Language/Libraries_and_Scripts/Imports/static_type_t01: Skip # No support for deferred libraries.
 Language/Libraries_and_Scripts/Imports/syntax_t32: MissingCompileTimeError
@@ -449,15 +438,11 @@
 Language/Mixins/Mixin_Application/syntax_t15: MissingCompileTimeError
 Language/Mixins/Mixin_Application/wrong_mixin_type_t01: MissingCompileTimeError
 Language/Mixins/Mixin_Application/wrong_mixin_type_t02: MissingCompileTimeError
-Language/Mixins/Mixin_Application/wrong_mixin_type_t03: MissingCompileTimeError
-Language/Mixins/Mixin_Application/wrong_mixin_type_t04: MissingCompileTimeError
 Language/Mixins/Mixin_Application/wrong_mixin_type_t05: DartkCrash
 Language/Mixins/Mixin_Application/wrong_mixin_type_t06: DartkCrash
 Language/Mixins/Mixin_Application/wrong_mixin_type_t07: MissingCompileTimeError
-Language/Mixins/Mixin_Application/wrong_mixin_type_t08: Crash
 Language/Mixins/Mixin_Application/wrong_type_t01: MissingCompileTimeError
 Language/Mixins/Mixin_Application/wrong_type_t02: DartkCrash
-Language/Mixins/Mixin_Application/wrong_type_t03: MissingCompileTimeError
 Language/Mixins/Mixin_Application/wrong_type_t04: Crash
 Language/Mixins/Mixin_Application/wrong_type_t05: MissingCompileTimeError
 Language/Mixins/Mixin_Application/wrong_type_t06: Crash
@@ -706,6 +691,7 @@
 Language/Overview/Scoping/conflicting_names_t43: Crash
 Language/Overview/Scoping/hiding_declaration_t11: Crash
 Language/Overview/Scoping/hiding_declaration_t12: Crash
+LibTest/isolate/Isolate/spawnUri_A01_t04: Pass, Slow, Timeout
 
 # dartk: precompilation failures
 [ $compiler == dartkp ]
@@ -749,6 +735,7 @@
 Language/Expressions/Function_Invocation/Unqualified_Invocation/prefix_object_invocation_t01: MissingCompileTimeError
 Language/Expressions/Identifier_Reference/evaluation_prefix_t01: MissingCompileTimeError
 Language/Expressions/Identifier_Reference/evaluation_type_parameter_t02: MissingCompileTimeError
+Language/Expressions/Instance_Creation/New/syntax_t02: MissingCompileTimeError
 Language/Expressions/Logical_Boolean_Expressions/syntax_t02: MissingCompileTimeError
 Language/Expressions/Logical_Boolean_Expressions/syntax_t03: MissingCompileTimeError
 Language/Expressions/Method_Invocation/Super_Invocation/invocation_t01: MissingCompileTimeError
@@ -766,6 +753,8 @@
 Language/Expressions/This/placement_t06: MissingCompileTimeError
 Language/Expressions/This/placement_t07: MissingCompileTimeError
 Language/Expressions/This/placement_t08: MissingCompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t07: MissingCompileTimeError
+Language/Libraries_and_Scripts/Imports/namespace_changes_t08: MissingCompileTimeError
 Language/Overview/Privacy/private_and_public_t04: RuntimeError
 Language/Overview/Scoping/conflicting_names_t43: Crash
 Language/Overview/Scoping/hiding_declaration_t11: Crash
diff --git a/tests/language/language_kernel.status b/tests/language/language_kernel.status
index 4d58159..c98b85d 100644
--- a/tests/language/language_kernel.status
+++ b/tests/language/language_kernel.status
@@ -323,8 +323,6 @@
 export_double_same_main_test: Crash
 export_main_test: Crash
 export_private_test/01: MissingCompileTimeError
-extend_type_parameter2_negative_test: DartkCrash
-extend_type_parameter_negative_test: DartkCrash
 external_test/11: MissingCompileTimeError
 external_test/12: MissingCompileTimeError
 external_test/13: MissingRuntimeError
@@ -379,7 +377,6 @@
 function_type_alias5_test/02: MissingCompileTimeError
 function_type_alias6_test/00: MissingCompileTimeError
 function_type_alias7_test/00: MissingCompileTimeError
-function_type_alias7_test/01: DartkCrash
 function_type_alias7_test/02: MissingCompileTimeError
 function_type_alias9_test/00: MissingCompileTimeError
 function_type_parameter2_negative_test: Crash
@@ -413,7 +410,6 @@
 initializing_formal_final_test: RuntimeError
 inst_field_initializer1_negative_test: Fail
 instanceof3_test: RuntimeError
-interface2_negative_test: Fail
 interface_cycle_test/01: MissingCompileTimeError
 interface_cycle_test/02: MissingCompileTimeError
 invocation_mirror_test: RuntimeError
@@ -431,22 +427,14 @@
 large_class_declaration_test: SkipSlow  # KernelVM Issue 28312
 library_ambiguous_test/00: MissingRuntimeError
 library_ambiguous_test/04: MissingRuntimeError
-library_ambiguous_test/05: MissingCompileTimeError
 library_env_test/has_html_support: RuntimeError
 library_env_test/has_no_io_support: RuntimeError
 list_literal2_negative_test: Fail
 list_literal4_test: RuntimeError
 main_not_a_function_test/01: Crash
 malformed2_test/00: RuntimeError
-malformed_inheritance_test/01: MissingCompileTimeError
-malformed_inheritance_test/03: Crash
-malformed_inheritance_test/05: MissingCompileTimeError
-malformed_inheritance_test/07: DartkCrash
-malformed_inheritance_test/08: DartkCrash
 malformed_inheritance_test/09: MissingCompileTimeError
 malformed_inheritance_test/10: MissingCompileTimeError
-malformed_inheritance_test/11: DartkCrash
-malformed_inheritance_test/12: DartkCrash
 malformed_test/none: RuntimeError
 map_literal2_negative_test: Fail
 map_literal3_test: RuntimeError
@@ -487,11 +475,6 @@
 mixin_illegal_object_test/01: MissingCompileTimeError
 mixin_illegal_object_test/02: MissingCompileTimeError
 mixin_illegal_syntax_test/00: DartkCrash
-mixin_invalid_inheritance1_test/01: Crash
-mixin_invalid_inheritance1_test/02: Crash
-mixin_invalid_inheritance1_test/03: Crash
-mixin_invalid_inheritance2_test/01: MissingCompileTimeError
-mixin_invalid_inheritance2_test/02: MissingCompileTimeError
 mixin_invalid_inheritance2_test/03: DartkCrash
 mixin_issue10216_2_test: RuntimeError
 mixin_mixin2_test: RuntimeError
@@ -534,8 +517,6 @@
 on_catch_malformed_type_test: RuntimeError
 parameter_initializer6_negative_test: Fail
 part2_test: RuntimeError
-prefix13_negative_test: Fail
-prefix15_negative_test: Fail
 private_access_test/05: RuntimeError
 private_access_test/06: RuntimeError
 private_super_constructor_test/01: MissingCompileTimeError
@@ -656,7 +637,6 @@
 vm/debug_break_enabled_vm_test/none: CompileTimeError
 vm/regress_27201_test: CompileTimeError
 vm/regress_27671_test: RuntimeError
-vm/regress_28325_test: RuntimeError
 vm/type_cast_vm_test: RuntimeError
 vm/type_vm_test: RuntimeError
 
@@ -718,14 +698,13 @@
 super_call4_test: RuntimeError
 super_getter_setter_test: RuntimeError
 try_catch_syntax_test/05: MissingCompileTimeError
-vm/lazy_deopt_vm_test: Pass, Slow
-vm/lazy_deopt_vm_test: Pass, Timeout
+vm/lazy_deopt_vm_test: Pass, Slow, Timeout
 vm/optimized_stacktrace_test: Skip # Issue 28788
 
 # dartk: JIT failures (debug)
 [ $compiler == dartk && $mode == debug ]
 constructor_duplicate_initializers_test/03: Crash
-deopt_inlined_function_lazy_test: Timeout
+deopt_inlined_function_lazy_test: Skip
 hello_dart_test: Crash  # error: expected: cls.is_type_finalized()
 not_enough_positional_arguments_test/02: Crash  # Dartk Issue 28301
 not_enough_positional_arguments_test/05: Crash  # Dartk Issue 28301
@@ -739,6 +718,7 @@
 ref_before_declaration_test/07: Crash
 ref_before_declaration_test/none: Crash
 try_catch_syntax_test/05: Crash
+vm/lazy_deopt_vm_test: Crash
 
 # dartk: precompilation failures
 [ $compiler == dartkp ]
@@ -774,6 +754,8 @@
 illegal_initializer_test/04: MissingCompileTimeError
 illegal_invocation_test/01: MissingCompileTimeError
 label_test: RuntimeError
+named_constructor_test/05: MissingCompileTimeError
+named_constructor_test/08: MissingCompileTimeError
 prefix_assignment_test/01: MissingCompileTimeError
 prefix_assignment_test/02: MissingCompileTimeError
 prefix_identifier_reference_test/01: MissingCompileTimeError
diff --git a/tools/VERSION b/tools/VERSION
index a5691e7..00ca6a0 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -27,5 +27,5 @@
 MAJOR 1
 MINOR 23
 PATCH 0
-PRERELEASE 3
+PRERELEASE 4
 PRERELEASE_PATCH 0
diff --git a/tools/deps/dartium.deps/DEPS.chromium b/tools/deps/dartium.deps/DEPS.chromium
index d15aff5..8d00973 100644
--- a/tools/deps/dartium.deps/DEPS.chromium
+++ b/tools/deps/dartium.deps/DEPS.chromium
@@ -623,17 +623,6 @@
   {
     'action': [
       'python',
-      'src/third_party/mojo/src/mojo/public/tools/download_shell_binary.py',
-      '--tools-directory=../../../../../../tools'
-    ],
-    'pattern':
-      '',
-    'name':
-      'download_mojo_shell'
-  },
-  {
-    'action': [
-      'python',
       'src/third_party/instrumented_libraries/scripts/download_binaries.py'
     ],
     'pattern':
diff --git a/tools/patch_sdk.dart b/tools/patch_sdk.dart
index 33a06fb..bcdc635 100644
--- a/tools/patch_sdk.dart
+++ b/tools/patch_sdk.dart
@@ -13,8 +13,41 @@
 import 'package:analyzer/analyzer.dart';
 import 'package:analyzer/src/generated/sdk.dart';
 import 'package:path/path.dart' as path;
-import 'package:front_end/src/fasta/compile_platform.dart' as
-    compile_platform;
+import 'package:front_end/src/fasta/compile_platform.dart' as compile_platform;
+
+import 'package:front_end/src/fasta/outline.dart' show CompileTask;
+
+import 'package:front_end/src/fasta/compiler_command_line.dart'
+    show CompilerCommandLine;
+
+import 'package:front_end/src/fasta/compiler_context.dart' show CompilerContext;
+
+import 'package:front_end/src/fasta/ticker.dart' show Ticker;
+
+/// Set of input files that were read by this script to generate patched SDK.
+/// We will dump it out into the depfile for ninja to use.
+///
+/// For more information see GN and Ninja references:
+///    https://chromium.googlesource.com/chromium/src/+/56807c6cb383140af0c03da8f6731d77785d7160/tools/gn/docs/reference.md#depfile_string_File-name-for-input-dependencies-for-actions
+///    https://ninja-build.org/manual.html#_depfile
+///
+final deps = new Set<String>();
+
+/// Create [File] object from the given path and register it as a dependency.
+File getInputFile(String path, {canBeMissing: false}) {
+  final file = new File(path);
+  if (!file.existsSync()) {
+    if (!canBeMissing) throw "patch_sdk.dart expects all inputs to exist";
+    return null;
+  }
+  deps.add(file.absolute.path);
+  return file;
+}
+
+/// Read the given file synchronously as a string and register this path as
+/// a dependency.
+String readInputFile(String path, {canBeMissing: false}) =>
+    getInputFile(path, canBeMissing: canBeMissing)?.readAsStringSync();
 
 Future main(List<String> argv) async {
   var base = path.fromUri(Platform.script);
@@ -28,8 +61,8 @@
     final sdkExample = path.relative(path.join(repositoryDir, 'sdk'));
     final patchExample = path.relative(
         path.join(repositoryDir, 'out', 'DebugX64', 'obj', 'gen', 'patch'));
-    final outExample = path.relative(path.join(repositoryDir, 'out', 'DebugX64',
-                                               'obj', 'gen', 'patched_sdk'));
+    final outExample = path.relative(path.join(
+        repositoryDir, 'out', 'DebugX64', 'obj', 'gen', 'patched_sdk'));
     print('For example:');
     print('\$ $self vm $sdkExample $patchExample $outExample');
 
@@ -37,6 +70,7 @@
   }
 
   var mode = argv[0];
+  assert(mode == "vm");
   var input = argv[1];
   var sdkLibIn = path.join(input, 'lib');
   var patchIn = argv[2];
@@ -48,12 +82,11 @@
   var INTERNAL_PATH = '_internal/compiler/js_lib/';
 
   // Copy and patch libraries.dart and version
-  var libContents = new File(path.join(sdkLibIn, '_internal',
-      'sdk_library_metadata', 'lib', 'libraries.dart')).readAsStringSync();
-  if (mode == 'vm') {
-    libContents = libContents.replaceAll(
-        ' libraries = const {',
-        ''' libraries = const {
+  var libContents = readInputFile(path.join(
+      sdkLibIn, '_internal', 'sdk_library_metadata', 'lib', 'libraries.dart'));
+  libContents = libContents.replaceAll(
+      ' libraries = const {',
+      ''' libraries = const {
 
   "_builtin": const LibraryInfo(
       "_builtin/_builtin.dart",
@@ -80,39 +113,25 @@
       platforms: VM_PLATFORM),
 
 ''');
-  }
   _writeSync(
       path.join(
           sdkOut, '_internal', 'sdk_library_metadata', 'lib', 'libraries.dart'),
       libContents);
-  if (mode == 'ddc') {
-    _writeSync(path.join(sdkOut, '..', 'version'),
-        new File(path.join(sdkLibIn, '..', 'version')).readAsStringSync());
-  }
 
   // Parse libraries.dart
   var sdkLibraries = _getSdkLibraries(libContents);
 
   // Enumerate core libraries and apply patches
   for (SdkLibrary library in sdkLibraries) {
-    // TODO(jmesserly): analyzer does not handle the default case of
-    // "both platforms" correctly, and treats it as being supported on neither.
-    // So instead we skip explicitly marked as either VM or dart2js libs.
-    if (mode == 'ddc' ? library.isVmLibrary : library.isDart2JsLibrary) {
+    if (library.isDart2JsLibrary) {
       continue;
     }
 
     var libraryOut = path.join(sdkLibIn, library.path);
-    var libraryIn;
-    if (mode == 'ddc' && library.path.contains(INTERNAL_PATH)) {
-      libraryIn =
-          path.join(privateIn, library.path.replaceAll(INTERNAL_PATH, ''));
-    } else {
-      libraryIn = libraryOut;
-    }
+    var libraryIn = libraryOut;
 
-    var libraryFile = new File(libraryIn);
-    if (libraryFile.existsSync()) {
+    var libraryFile = getInputFile(libraryIn, canBeMissing: true);
+    if (libraryFile != null) {
       var outPaths = <String>[libraryOut];
       var libraryContents = libraryFile.readAsStringSync();
 
@@ -124,7 +143,8 @@
           var partPath = part.uri.stringValue;
           outPaths.add(path.join(path.dirname(libraryOut), partPath));
 
-          var partFile = new File(path.join(path.dirname(libraryIn), partPath));
+          var partFile =
+              getInputFile(path.join(path.dirname(libraryIn), partPath));
           partFiles.add(partFile);
           inputModifyTime = math.max(inputModifyTime,
               partFile.lastModifiedSync().millisecondsSinceEpoch);
@@ -135,9 +155,8 @@
       var patchPath = path.join(
           patchIn, path.basenameWithoutExtension(libraryIn) + '_patch.dart');
 
-      var patchFile = new File(patchPath);
-      bool patchExists = patchFile.existsSync();
-      if (patchExists) {
+      var patchFile = getInputFile(patchPath, canBeMissing: true);
+      if (patchFile != null) {
         inputModifyTime = math.max(inputModifyTime,
             patchFile.lastModifiedSync().millisecondsSinceEpoch);
       }
@@ -162,10 +181,9 @@
       if (needsUpdate) {
         var contents = <String>[libraryContents];
         contents.addAll(partFiles.map((f) => f.readAsStringSync()));
-        if (patchExists) {
+        if (patchFile != null) {
           var patchContents = patchFile.readAsStringSync();
-          contents = _patchLibrary(
-              patchFile.path, contents, patchContents);
+          contents = _patchLibrary(patchFile.path, contents, patchContents);
         }
 
         for (var i = 0; i < outPaths.length; i++) {
@@ -175,22 +193,22 @@
     }
   }
 
-  if (mode == 'vm') {
-    for (var tuple in [['_builtin', 'builtin.dart']]) {
-      var vmLibrary = tuple[0];
-      var dartFile = tuple[1];
+  for (var tuple in [
+    ['_builtin', 'builtin.dart']
+  ]) {
+    var vmLibrary = tuple[0];
+    var dartFile = tuple[1];
 
-      // The "dart:_builtin" library is only available for the DartVM.
-      var builtinLibraryIn  = path.join(dartDir, 'runtime', 'bin', dartFile);
-      var builtinLibraryOut = path.join(sdkOut, vmLibrary, '${vmLibrary}.dart');
-      _writeSync(builtinLibraryOut, new File(builtinLibraryIn).readAsStringSync());
-    }
+    // The "dart:_builtin" library is only available for the DartVM.
+    var builtinLibraryIn = path.join(dartDir, 'runtime', 'bin', dartFile);
+    var builtinLibraryOut = path.join(sdkOut, vmLibrary, '${vmLibrary}.dart');
+    _writeSync(builtinLibraryOut, readInputFile(builtinLibraryIn));
+  }
 
-    for (var file in ['loader.dart', 'server.dart', 'vmservice_io.dart']) {
-      var libraryIn  = path.join(dartDir, 'runtime', 'bin', 'vmservice', file);
-      var libraryOut = path.join(sdkOut, 'vmservice_io', file);
-      _writeSync(libraryOut, new File(libraryIn).readAsStringSync());
-    }
+  for (var file in ['loader.dart', 'server.dart', 'vmservice_io.dart']) {
+    var libraryIn = path.join(dartDir, 'runtime', 'bin', 'vmservice', file);
+    var libraryOut = path.join(sdkOut, 'vmservice_io', file);
+    _writeSync(libraryOut, readInputFile(libraryIn));
   }
 
   // TODO(kustermann): We suppress compiler hints/warnings/errors temporarily
@@ -199,13 +217,49 @@
   // been fixed (either in fasta or the dart files in the patched_sdk).
   final capturedLines = <String>[];
   try {
+    final platform = path.join(outDir, 'platform.dill');
+
     await runZoned(() async {
       await compile_platform.mainEntryPoint(<String>[
         '--packages',
         new Uri.file(packagesFile).toString(),
         new Uri.directory(outDir).toString(),
-        path.join(outDir, 'platform.dill')
+        platform,
       ]);
+
+      // platform.dill was generated, now generate platform.dill.d depfile
+      // that captures all dependencies that participated in the generation.
+      // There are two types of dependencies:
+      //   (1) all Dart sources that constitute this tool itself
+      //   (2) Dart SDK and patch sources.
+      // We already collected all inputs from the second category in the deps
+      // set. To collect inputs from the first category we actually use Fasta:
+      // we ask Fasta to outline patch_sdk.dart and generate a depfile which
+      // would list all the sources.
+      final depfile = "${outDir}.d";
+      await CompilerCommandLine.withGlobalOptions("outline", [
+        '--packages',
+        new Uri.file(packagesFile).toString(),
+        '--platform',
+        new Uri.file(platform).toString(), // platform.dill
+        Platform.script.toString() // patch_sdk.dart
+      ], (CompilerContext c) async {
+        CompileTask task =
+            new CompileTask(c, new Ticker(isVerbose: c.options.verbose));
+        final kernelTarget = await task.buildOutline(null);
+        await kernelTarget.writeDepsFile(
+            new Uri.file(platform), new Uri.file(depfile));
+      });
+
+      // Read depfile generated by Fasta and append deps that we have collected
+      // during generation of patched_sdk to it.
+      // Note: we are splitting by ': ' because Windows paths can start with
+      // drive letter followed by a colon.
+      final list = new File(depfile).readAsStringSync().split(': ');
+      assert(list.length == 2);
+      deps.addAll(list[1].split(' ').where((str) => str.isNotEmpty));
+      assert(list[0] == path.join('patched_sdk', 'platform.dill'));
+      new File(depfile).writeAsStringSync("${list[0]}: ${deps.join(' ')}\n");
     }, zoneSpecification: new ZoneSpecification(print: (_, _2, _3, line) {
       capturedLines.add(line);
     }));
@@ -244,9 +298,8 @@
 /// in the Dart language. Since this feature is only for the convenience of
 /// writing the dart:* libraries, and not a tool given to Dart developers, it
 /// seems like a non-ideal situation. Instead we keep the preprocessing simple.
-List<String> _patchLibrary(String name,
-                           List<String> partsContents,
-                           String patchContents) {
+List<String> _patchLibrary(
+    String name, List<String> partsContents, String patchContents) {
   var results = <StringEditBuffer>[];
 
   // Parse the patch first. We'll need to extract bits of this as we go through
@@ -275,8 +328,13 @@
 }
 
 final String injectedCidFields = [
-  'Array', 'ExternalOneByteString', 'GrowableObjectArray',
-  'ImmutableArray', 'OneByteString', 'TwoByteString', 'Bigint'
+  'Array',
+  'ExternalOneByteString',
+  'GrowableObjectArray',
+  'ImmutableArray',
+  'OneByteString',
+  'TwoByteString',
+  'Bigint'
 ].map((name) => "static final int cid${name} = 0;").join('\n');
 
 /// Merge `@patch` declarations into `external` declarations.
@@ -302,8 +360,7 @@
     // make core libraries compile. Kernel reader will actually ignore these
     // fields and instead inject concrete constants into this class.
     if (node is ClassDeclaration && node.name.name == 'ClassID') {
-      code = code.replaceFirst(
-          new RegExp(r'}$'), injectedCidFields + '}');
+      code = code.replaceFirst(new RegExp(r'}$'), injectedCidFields + '}');
     }
     edits.insert(pos, '\n' + code);
   }
@@ -449,7 +506,8 @@
 
   var accessor = '';
   if (node is MethodDeclaration) {
-    if (node.isGetter) accessor = 'get:';
+    if (node.isGetter)
+      accessor = 'get:';
     else if (node.isSetter) accessor = 'set:';
   }
   return className + accessor + name;
diff --git a/tools/patch_sdk.py b/tools/patch_sdk.py
index 25e553e..212514a 100755
--- a/tools/patch_sdk.py
+++ b/tools/patch_sdk.py
@@ -48,7 +48,8 @@
     print >> sys.stderr, 'ERROR: cannot locate dart executable'
     return -1
   dart_file = os.path.join(os.path.dirname(__file__), 'patch_sdk.dart')
-  subprocess.check_call([options.dart_executable, dart_file] + args)
+  subprocess.check_call(
+      [options.dart_executable, '--checked', dart_file] + args)
   return 0
 
 if __name__ == '__main__':
diff --git a/tools/testing/dart/compiler_configuration.dart b/tools/testing/dart/compiler_configuration.dart
index b225c15..1f64f27 100644
--- a/tools/testing/dart/compiler_configuration.dart
+++ b/tools/testing/dart/compiler_configuration.dart
@@ -213,7 +213,7 @@
       CommandArtifact artifact) {
     List<String> args = [];
     if (useDFE) {
-      args.add('--dfe=utils/kernel-service/kernel-service.dart');
+      args.add('--dfe=${buildDir}/gen/kernel-service.dart.snapshot');
     }
     if (isChecked) {
       args.add('--enable_asserts');