Remove OutlineListener.


Revert "Store named types resolution during outline building."

This reverts commit 82947cccc9c33c1738286910472935bed6b4a9bd.

Revert "Store reference/type for invalid types."

This reverts commit 9fb6c0901504a57120c3e2a96d7ecad5bab008b0.

Revert "Clear ShadowX references that are not required after compilation."

This reverts commit 6c39bc38f33552b839887b2e6f98695c81c25b4e.

Revert "Store constructor field initializera when the target is not a field."

This reverts commit 12326c10e188352f133f220381b6800a48f20ba7.

Revert "Don't rewrite error Severity for special cases of front-end testing."

This reverts commit 4bb3fb6caeabac6f9b3de7980883ba3dbffb4c17.

Revert "Translate ConstructorElement(s) of parameterized InterfaceType(s) to ConstructorMember(s)."

This reverts commit 62a2752b965b665adbec6bf244570b34476fd40f.

Revert "Store resolution for out of range integer literals."

This reverts commit 8df84c0a00fb7af3eae8a9fbed6bbd325076e3df.

Revert "Infer original expression in SyntheticExpressionJudgment."

This reverts commit cec29e4aa8242ab8753c629e04cf0771f3f2e358.

Revert "Resolve invalid 'as' constant expression."

This reverts commit 77202bf2b03451a64ecd9fe9885f961a640b72e8.

Revert "Resolve invalid return from constructor."

This reverts commit 737e54693999caf34422839979e409f6d8ece61d.

Revert "Store import prefix offset into metadata and resynthesize."

This reverts commit c30af508a457e119a7542a61a23e0469a9e15d38.

Revert "Get documentation comments before metadata as well."

This reverts commit 29401573d5eb588e457afc7619e8ab8f17d936c3.

Revert "Put fileEndOffset into ArgumentsJudgment and use to report argument errors."

This reverts commit d69a354026ebbc132ee340184a3c4276b9942852.

Revert "Return SourceSpan with actual length from _CompilationMessage."

This reverts commit ac973e5ba79963023c2bee09b130484827a2da59.

Revert "Store codeOffset / codeLength for classes."

This reverts commit 28583df3ee0744bb4b689a72d73809b4a0e7681b.

Revert "Store and resynthesize codeOffset/codeLength for functions and methods."

This reverts commit 5a2a13c8bfb238b4cdf15c8c6fea254f333fb81a.

Revert "Fix analyzer/FE integration of invalid assignments to classes."

This reverts commit a814614cf4f130160d36e63ac0263a4151b66481.

Revert "Fix analyzer/FE integration of assignments to non-l-values."

This reverts commit d10204f3a00b4b9956568ded862ac2e95dc99c75.

Revert "Fix analyzer/FE integration of assignments to ambiguous types."

This reverts commit e87efdffb4a0a8427a1dca766bbc716bad90e1a4.

Revert "Fix analyzer/FE integration of assignments to ambiguous types."

This reverts commit 1b5d273fd73227cab3c6a6ee843950292b14d109.

Revert "Fix analyzer/FE integration of assignment with synthetic LHS."

This reverts commit 55aa031404f36d181daf5f5b27424da431ee2e3e.

Revert "Revert "Fix analyzer/FE integration of assignments to ambiguous types.""

This reverts commit 9f795883f10b86f42e016ee287d8f2ab43f9ea17.

Revert "Store code range for constructors."

This reverts commit 675b296d493818d1838b57a24d8251c1f3aeebab.

Revert "Store codeOffset/length code fields and top-level variables."

This reverts commit 9ef53bde19d00bffdd00093f254dec9c54d17634.

Revert "Re-land "Fix analyzer/FE integration of assignments to ambiguous types.""

This reverts commit 40d72aec8cc75d79bcc8f3a52f761ade6d53b9eb.

Revert "Resolve metadata for part-of directives."

This reverts commit cf1cd3eba0f2af8f60d7b82b186821b6aa79e612.

Revert "Fix analyzer/FE integration of assignment with synthetic LHS, inside class method."

This reverts commit 43a8f1d0d65628004951b794188198454d8f5d73.

Revert "Fix analyzer/FE integration of prefix/postfix increment of non-l-values."

This reverts commit e2aceb692e36ac526ebd2454eaa846b305378e9d.

Revert "Fix analyzer/FE integration of postfix-of-postfix and prefix-of-prefix increments."

This reverts commit ad6f89f13b1419a7858b168291de02d4aa093dd9.

Revert "Fix analyzer/FE integration of some obscure invalid assignment cases."

This reverts commit f074f3c120303ba3a1aea265102e6924f3ae3d55.

Revert "Resolve namespace combinators."

This reverts commit 7e39d07916b29c0ceba263b74f1352cdc7971af0.

Revert "Fix analyzer/CFE integration of some more obscure invalid assignment cases."

This reverts commit a94e43af7ce5865b8d2e2736cc7e3c4ea0cd02c4.

Revert "Refactor duplicate code in ContextAwareGenerator."

This reverts commit 1f82d37124709a8cb2043022c61f705feee2ce3a.

Revert "Resolve required arguments after named."

This reverts commit b255f0fab68342d8b15b93febd69d3a4908c24f4.

Change-Id: I44616db9b8ef037a2580a1ab35050da7e72ff7d8
Reviewed-on: https://dart-review.googlesource.com/72642
Reviewed-by: Jens Johansen <jensj@google.com>
Commit-Queue: Peter von der Ahé <ahe@google.com>
diff --git a/pkg/front_end/lib/src/base/processed_options.dart b/pkg/front_end/lib/src/base/processed_options.dart
index 1e00004..5c81b7b 100644
--- a/pkg/front_end/lib/src/base/processed_options.dart
+++ b/pkg/front_end/lib/src/base/processed_options.dart
@@ -690,16 +690,12 @@
   String get analyzerCode => _original.code.analyzerCode;
 
   SourceSpan get span {
-    var uri = _original.uri;
-    var offset = _original.charOffset;
-    if (offset == -1) {
-      if (uri == null) return null;
-      return new SourceLocation(0, sourceUrl: uri).pointSpan();
+    if (_original.charOffset == -1) {
+      if (_original.uri == null) return null;
+      return new SourceLocation(0, sourceUrl: _original.uri).pointSpan();
     }
-    return new SourceSpan(
-        new SourceLocation(offset, sourceUrl: uri),
-        new SourceLocation(offset + _original.length, sourceUrl: uri),
-        'X' * _original.length);
+    return new SourceLocation(_original.charOffset, sourceUrl: _original.uri)
+        .pointSpan();
   }
 
   _CompilationMessage(this._original, this.severity);
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index b6bad03..4f95542 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -63,9 +63,6 @@
 
   String get debugName => "ClassBuilder";
 
-  @override
-  bool get buildsArguments => true;
-
   /// Returns true if this class is the result of applying a mixin to its
   /// superclass.
   bool get isMixinApplication => mixedInType != null;
diff --git a/pkg/front_end/lib/src/fasta/builder/declaration.dart b/pkg/front_end/lib/src/fasta/builder/declaration.dart
index bc3f76b..d340033 100644
--- a/pkg/front_end/lib/src/fasta/builder/declaration.dart
+++ b/pkg/front_end/lib/src/fasta/builder/declaration.dart
@@ -26,12 +26,8 @@
 
   String get fullNameForErrors;
 
-  bool get buildsArguments => false;
-
   bool get hasProblem => false;
 
-  bool get hasTarget => false;
-
   bool get isConst => false;
 
   bool get isConstructor => false;
diff --git a/pkg/front_end/lib/src/fasta/builder/function_type_alias_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_type_alias_builder.dart
index 5cd87e1..7abb3f3 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_type_alias_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_type_alias_builder.dart
@@ -24,9 +24,6 @@
 
   String get debugName => "FunctionTypeAliasBuilder";
 
-  @override
-  bool get buildsArguments => true;
-
   LibraryBuilder get parent => super.parent;
 
   int get typeVariablesCount;
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index 759c0f9..827fe5f 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -17,9 +17,6 @@
 
   MemberBuilder(this.parent, int charOffset) : super(parent, charOffset);
 
-  @override
-  bool get hasTarget => true;
-
   bool get isInstanceMember => isClassMember && !isStatic;
 
   bool get isClassMember => parent is ClassBuilder;
diff --git a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
index 08b77d8..4cf8c2a 100644
--- a/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/named_type_builder.dart
@@ -10,8 +10,6 @@
         templateMissingExplicitTypeArguments,
         templateTypeArgumentMismatch;
 
-import '../source/outline_listener.dart';
-
 import 'builder.dart'
     show
         Declaration,
@@ -24,20 +22,13 @@
         TypeDeclarationBuilder;
 
 abstract class NamedTypeBuilder<T extends TypeBuilder, R> extends TypeBuilder {
-  final OutlineListener outlineListener;
   final Object name;
 
   List<T> arguments;
 
   TypeDeclarationBuilder<T, R> declaration;
 
-  /// If the number of [arguments] does not correspond to the number of
-  /// type parameters in the [declaration], semantically we should replace
-  /// [declaration] with [InvalidTypeBuilder]. But we still need to store
-  /// the original declaration into [outlineListener].
-  TypeDeclarationBuilder<T, R> actualDeclaration;
-
-  NamedTypeBuilder(this.outlineListener, this.name, this.arguments);
+  NamedTypeBuilder(this.name, this.arguments);
 
   InvalidTypeBuilder<T, R> buildInvalidType(int charOffset, Uri fileUri,
       [Message message]);
@@ -56,8 +47,6 @@
     if (name is QualifiedName) {
       Declaration prefix = scope.lookup(name.prefix, charOffset, fileUri);
       if (prefix is PrefixBuilder) {
-        outlineListener?.store(charOffset, false,
-            importIndex: prefix.importIndex);
         member = prefix.lookup(name.suffix, name.charOffset, fileUri);
       }
     } else {
@@ -82,7 +71,6 @@
   void check(int charOffset, Uri fileUri) {
     if (arguments != null &&
         arguments.length != declaration.typeVariablesCount) {
-      actualDeclaration = declaration;
       declaration = buildInvalidType(
           charOffset,
           fileUri,
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 c853c15..4f3acc7 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
@@ -16,9 +16,6 @@
       String name, this.bound, LibraryBuilder compilationUnit, int charOffset)
       : super(null, null, name, compilationUnit, charOffset);
 
-  @override
-  bool get hasTarget => true;
-
   bool get isTypeVariable => true;
 
   String get debugName => "TypeVariableBuilder";
diff --git a/pkg/front_end/lib/src/fasta/combinator.dart b/pkg/front_end/lib/src/fasta/combinator.dart
index 5dfcf91..9f97607 100644
--- a/pkg/front_end/lib/src/fasta/combinator.dart
+++ b/pkg/front_end/lib/src/fasta/combinator.dart
@@ -7,30 +7,15 @@
 class Combinator {
   final bool isShow;
 
-  final List<CombinatorIdentifier> identifiers;
-
   final Set<String> names;
 
-  Combinator(
-      this.isShow, this.identifiers, this.names, int charOffset, Uri fileUri);
+  Combinator(this.isShow, this.names, int charOffset, Uri fileUri);
 
-  Combinator.hide(List<CombinatorIdentifier> identifiers,
-      Iterable<String> names, int charOffset, Uri fileUri)
-      : this(false, identifiers, new Set<String>.from(names), charOffset,
-            fileUri);
+  Combinator.show(Iterable<String> names, int charOffset, Uri fileUri)
+      : this(true, new Set<String>.from(names), charOffset, fileUri);
 
-  Combinator.show(List<CombinatorIdentifier> identifiers,
-      Iterable<String> names, int charOffset, Uri fileUri)
-      : this(true, identifiers, new Set<String>.from(names), charOffset,
-            fileUri);
+  Combinator.hide(Iterable<String> names, int charOffset, Uri fileUri)
+      : this(false, new Set<String>.from(names), charOffset, fileUri);
 
   bool get isHide => !isShow;
 }
-
-class CombinatorIdentifier {
-  final int offset;
-  final String name;
-  final bool isSynthetic;
-
-  CombinatorIdentifier(this.offset, this.name, this.isSynthetic);
-}
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
index c440b0b..6c94030 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_library_builder.dart
@@ -65,9 +65,6 @@
   String get name => library.name;
 
   @override
-  bool get hasTarget => true;
-
-  @override
   Library get target => library;
 
   void becomeCoreLibrary(dynamicType) {
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index b7b8496..7b54cd3 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -30,9 +30,6 @@
 
   String get debugName => "DillMemberBuilder";
 
-  @override
-  bool get hasTarget => true;
-
   Member get target => member;
 
   String get name => member.name.name;
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
index 7855f44..7ad5957 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_generated.dart
@@ -6936,36 +6936,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-    Message Function(
-        int count,
-        int
-            count2)> templateTooManyArgumentsCouldBeNamed = const Template<
-        Message Function(int count, int count2)>(
-    messageTemplate:
-        r"""Too many positional arguments: #count allowed, but #count2 found.""",
-    tipTemplate:
-        r"""Try removing the extra positional arguments or specifying the name for named arguments.""",
-    withArguments: _withArgumentsTooManyArgumentsCouldBeNamed);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(int count, int count2)>
-    codeTooManyArgumentsCouldBeNamed =
-    const Code<Message Function(int count, int count2)>(
-        "TooManyArgumentsCouldBeNamed", templateTooManyArgumentsCouldBeNamed,
-        analyzerCode: "EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED",
-        severity: Severity.errorLegacyWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsTooManyArgumentsCouldBeNamed(int count, int count2) {
-  return new Message(codeTooManyArgumentsCouldBeNamed,
-      message:
-          """Too many positional arguments: ${count} allowed, but ${count2} found.""",
-      tip: """Try removing the extra positional arguments or specifying the name for named arguments.""",
-      arguments: {'count': count, 'count2': count2});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeTopLevelOperator = messageTopLevelOperator;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index c42bcec..0697cc1 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -472,10 +472,10 @@
             combinators ??= <Combinator>[];
 
             combinators.add(combinator.isShow
-                ? new Combinator.show(null, combinator.names,
-                    combinator.fileOffset, library.fileUri)
-                : new Combinator.hide(null, combinator.names,
-                    combinator.fileOffset, library.fileUri));
+                ? new Combinator.show(
+                    combinator.names, combinator.fileOffset, library.fileUri)
+                : new Combinator.hide(
+                    combinator.names, combinator.fileOffset, library.fileUri));
           }
 
           debugLibrary.addImport(
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 40d1b37..b560333 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -114,8 +114,6 @@
 
 import 'kernel_builder.dart';
 
-import 'kernel_expression_generator.dart' show KernelNonLValueGenerator;
-
 import 'type_algorithms.dart' show calculateBounds;
 
 // TODO(ahe): Remove this and ensure all nodes have a location.
@@ -644,8 +642,8 @@
     Initializer initializer;
     if (node is Initializer) {
       initializer = node;
-    } else if (node is DelayedAssignment) {
-      initializer = node.buildFieldInitializer();
+    } else if (node is Generator) {
+      initializer = node.buildFieldInitializer(initializedFields);
     } else if (node is ConstructorInvocation) {
       initializer = buildSuperInitializer(
           false, node.target, node.arguments, token.charOffset);
@@ -861,8 +859,7 @@
       } else if (resolvedTarget is Constructor &&
           resolvedTarget.enclosingClass.isAbstract) {
         replacementNode = evaluateArgumentsBefore(
-            forest.arguments(
-                invocation.arguments.positional, noLocation, noLocation,
+            forest.arguments(invocation.arguments.positional, null,
                 types: invocation.arguments.types,
                 named: invocation.arguments.named),
             buildAbstractClassInstantiationError(
@@ -883,8 +880,7 @@
               throwNoSuchMethodError(
                   forest.literalNull(null)..fileOffset = invocation.fileOffset,
                   errorName,
-                  forest.arguments(
-                      invocation.arguments.positional, noLocation, noLocation,
+                  forest.arguments(invocation.arguments.positional, null,
                       types: invocation.arguments.types,
                       named: invocation.arguments.named),
                   initialTarget.fileOffset));
@@ -902,8 +898,7 @@
 
           replacementNode = buildStaticInvocation(
               resolvedTarget,
-              forest.arguments(
-                  invocation.arguments.positional, noLocation, noLocation,
+              forest.arguments(invocation.arguments.positional, null,
                   types: invocation.arguments.types,
                   named: invocation.arguments.named),
               constness: invocation.isConst
@@ -1042,7 +1037,7 @@
       /// >unless the enclosing class is class Object.
       Constructor superTarget = lookupConstructor(emptyName, isSuper: true);
       Initializer initializer;
-      Arguments arguments = forest.argumentsEmpty(noLocation, noLocation);
+      Arguments arguments = forest.argumentsEmpty(noLocation);
       if (superTarget == null ||
           checkArgumentsForFunction(superTarget.function, arguments,
                   builder.charOffset, const <TypeParameter>[]) !=
@@ -1097,14 +1092,12 @@
         Expression argument = toValue(node);
         arguments[i] = argument;
         if (i > firstNamedArgumentIndex) {
-          arguments[i] = new NamedExpressionJudgment(
-              tokensSaver?.namedExpressionTokens(null, null),
-              '#$i',
+          arguments[i] = new NamedExpression(
+              "#$i",
               buildCompileTimeErrorExpression(
                   fasta.messageExpectedNamedArgument,
-                  forest.readOffset(argument)),
-              originalValue: argument)
-            ..fileOffset = offsetForToken(beginToken);
+                  forest.readOffset(argument)))
+            ..fileOffset = beginToken.charOffset;
         }
       }
     }
@@ -1113,12 +1106,11 @@
           arguments.getRange(0, firstNamedArgumentIndex));
       List<NamedExpression> named = new List<NamedExpression>.from(
           arguments.getRange(firstNamedArgumentIndex, arguments.length));
-      push(forest.arguments(positional, beginToken, endToken, named: named));
+      push(forest.arguments(positional, beginToken, named: named));
     } else {
       // TODO(kmillikin): Find a way to avoid allocating a second list in the
       // case where there were no named arguments, which is a common one.
-      push(forest.arguments(
-          new List<Expression>.from(arguments), beginToken, endToken));
+      push(forest.arguments(new List<Expression>.from(arguments), beginToken));
     }
   }
 
@@ -1138,7 +1130,7 @@
   @override
   void handleSend(Token beginToken, Token endToken) {
     debugEvent("Send");
-    ArgumentsJudgment arguments = pop();
+    Arguments arguments = pop();
     List<DartType> typeArguments = pop();
     Object receiver = pop();
     if (arguments != null && typeArguments != null) {
@@ -1163,7 +1155,7 @@
   }
 
   @override
-  finishSend(Object receiver, ArgumentsJudgment arguments, int charOffset) {
+  finishSend(Object receiver, Arguments arguments, int charOffset) {
     if (receiver is Generator) {
       return receiver.doInvocation(charOffset, arguments);
     } else {
@@ -1258,11 +1250,8 @@
           fasta.templateInvalidOperator.withArguments(token), token.charOffset,
           length: token.length);
     } else {
-      Expression result = buildMethodInvocation(
-          a,
-          new Name(operator),
-          forest.arguments(<Expression>[b], noLocation, noLocation),
-          token.charOffset,
+      Expression result = buildMethodInvocation(a, new Name(operator),
+          forest.arguments(<Expression>[b], noLocation), token.charOffset,
           // This *could* be a constant expression, we can't know without
           // evaluating [a] and [b].
           isConstantExpression: !isSuper,
@@ -1848,15 +1837,11 @@
       bool hasExpression, Token beginToken, Token endToken) {
     debugEvent("ReturnStatement");
     Expression expression = hasExpression ? popForValue() : null;
-    var statement = forest.returnStatement(beginToken, expression, endToken);
     if (expression != null && inConstructor) {
-      Expression error = buildCompileTimeError(
-          fasta.messageConstructorWithReturnType,
-          beginToken.charOffset,
-          lengthForToken(beginToken));
-      push(new InvalidStatementJudgment(error, statement));
+      push(buildCompileTimeErrorStatement(
+          fasta.messageConstructorWithReturnType, beginToken.charOffset));
     } else {
-      push(statement);
+      push(forest.returnStatement(beginToken, expression, endToken));
     }
   }
 
@@ -2041,15 +2026,16 @@
   void handleAssignmentExpression(Token token) {
     debugEvent("AssignmentExpression");
     Expression value = popForValue();
-    Object lhs = pop();
-    Generator generator;
-    if (lhs is Generator) {
-      generator = lhs;
+    Object generator = pop();
+    if (generator is! Generator) {
+      push(new SyntheticExpressionJudgment(buildCompileTimeError(
+          fasta.messageNotAnLvalue,
+          offsetForToken(token),
+          lengthForToken(token))));
     } else {
-      generator = new KernelNonLValueGenerator(this, token, lhs);
+      push(new DelayedAssignment(
+          this, token, generator, value, token.stringValue));
     }
-    push(new DelayedAssignment(
-        this, token, generator, value, token.stringValue));
   }
 
   @override
@@ -2376,15 +2362,14 @@
     debugEvent("AsOperator");
     DartType type = pop();
     Expression expression = popForValue();
-    Expression error;
     if (constantContext != ConstantContext.none) {
-      error = buildCompileTimeError(
+      push(buildCompileTimeError(
           fasta.templateNotConstantExpression.withArguments('As expression'),
           operator.charOffset,
-          operator.length);
+          operator.length));
+    } else {
+      push(forest.asExpression(expression, type, operator));
     }
-    push(
-        forest.asExpression(expression, type, operator, desugaredError: error));
   }
 
   @override
@@ -2713,13 +2698,12 @@
       push(new SuperIndexedAccessGenerator(
           this,
           openSquareBracket,
-          closeSquareBracket,
           index,
           lookupInstanceMember(indexGetName, isSuper: true),
           lookupInstanceMember(indexSetName, isSuper: true)));
     } else {
-      push(IndexedAccessGenerator.make(this, openSquareBracket,
-          closeSquareBracket, toValue(receiver), index, null, null));
+      push(IndexedAccessGenerator.make(
+          this, openSquareBracket, toValue(receiver), index, null, null));
     }
   }
 
@@ -2755,7 +2739,7 @@
         }
       }
       push(buildMethodInvocation(receiverValue, new Name(operator),
-          forest.argumentsEmpty(noLocation, noLocation), token.charOffset,
+          forest.argumentsEmpty(noLocation), token.charOffset,
           // This *could* be a constant expression, we can't know without
           // evaluating [receiver].
           isConstantExpression: !isSuper,
@@ -2772,29 +2756,27 @@
   @override
   void handleUnaryPrefixAssignmentExpression(Token token) {
     debugEvent("UnaryPrefixAssignmentExpression");
-    Object target = pop();
-    Generator generator;
-    if (target is Generator) {
-      generator = target;
+    Object generator = pop();
+    if (generator is Generator) {
+      push(generator.buildPrefixIncrement(incrementOperator(token),
+          offset: token.charOffset));
     } else {
-      generator = new KernelNonLValueGenerator(this, token, toValue(target));
+      push(
+          wrapInCompileTimeError(toValue(generator), fasta.messageNotAnLvalue));
     }
-    push(generator.buildPrefixIncrement(incrementOperator(token),
-        offset: token.charOffset));
   }
 
   @override
   void handleUnaryPostfixAssignmentExpression(Token token) {
     debugEvent("UnaryPostfixAssignmentExpression");
-    Object target = pop();
-    Generator generator;
-    if (target is Generator) {
-      generator = target;
+    Object generator = pop();
+    if (generator is Generator) {
+      push(new DelayedPostfixIncrement(
+          this, token, generator, incrementOperator(token), null));
     } else {
-      generator = new KernelNonLValueGenerator(this, token, toValue(target));
+      push(
+          wrapInCompileTimeError(toValue(generator), fasta.messageNotAnLvalue));
     }
-    push(new DelayedPostfixIncrement(
-        this, token, generator, incrementOperator(token), null));
   }
 
   @override
@@ -2873,7 +2855,7 @@
   }
 
   @override
-  Expression buildStaticInvocation(Member target, ArgumentsJudgment arguments,
+  Expression buildStaticInvocation(Member target, Arguments arguments,
       {Constness constness: Constness.implicit,
       int charOffset: -1,
       int charLength: noLength,
@@ -2950,31 +2932,21 @@
   }
 
   @override
-  LocatedMessage checkArgumentsForFunction(
-      FunctionNode function,
-      ArgumentsJudgment arguments,
-      int offset,
-      List<TypeParameter> typeParameters) {
+  LocatedMessage checkArgumentsForFunction(FunctionNode function,
+      Arguments arguments, int offset, List<TypeParameter> typeParameters) {
     if (forest.argumentsPositional(arguments).length <
         function.requiredParameterCount) {
-      var argsOffset = arguments.fileOffset;
-      var argsLength = arguments.fileEndOffset - argsOffset;
       return fasta.templateTooFewArguments
           .withArguments(function.requiredParameterCount,
               forest.argumentsPositional(arguments).length)
-          .withLocation(uri, argsOffset, argsLength);
+          .withLocation(uri, arguments.fileOffset, noLength);
     }
     if (forest.argumentsPositional(arguments).length >
         function.positionalParameters.length) {
-      var argsOffset = arguments.fileOffset;
-      var argsLength = arguments.fileEndOffset - argsOffset;
-      var template = function.namedParameters.isNotEmpty
-          ? fasta.templateTooManyArgumentsCouldBeNamed
-          : fasta.templateTooManyArguments;
-      return template
+      return fasta.templateTooManyArguments
           .withArguments(function.positionalParameters.length,
               forest.argumentsPositional(arguments).length)
-          .withLocation(uri, argsOffset, argsLength);
+          .withLocation(uri, arguments.fileOffset, noLength);
     }
     List<Object> named = forest.argumentsNamed(arguments);
     if (named.isNotEmpty) {
@@ -3004,27 +2976,20 @@
 
   @override
   LocatedMessage checkArgumentsForType(
-      FunctionType function, ArgumentsJudgment arguments, int offset) {
+      FunctionType function, Arguments arguments, int offset) {
     if (forest.argumentsPositional(arguments).length <
         function.requiredParameterCount) {
-      var argsOffset = arguments.fileOffset;
-      var argsLength = arguments.fileEndOffset - argsOffset;
       return fasta.templateTooFewArguments
           .withArguments(function.requiredParameterCount,
               forest.argumentsPositional(arguments).length)
-          .withLocation(uri, argsOffset, argsLength);
+          .withLocation(uri, arguments.fileOffset, noLength);
     }
     if (forest.argumentsPositional(arguments).length >
         function.positionalParameters.length) {
-      var argsOffset = arguments.fileOffset;
-      var argsLength = arguments.fileEndOffset - argsOffset;
-      var template = function.namedParameters.isNotEmpty
-          ? fasta.templateTooManyArgumentsCouldBeNamed
-          : fasta.templateTooManyArguments;
-      return template
+      return fasta.templateTooManyArguments
           .withArguments(function.positionalParameters.length,
               forest.argumentsPositional(arguments).length)
-          .withLocation(uri, argsOffset, argsLength);
+          .withLocation(uri, arguments.fileOffset, noLength);
     }
     List<Object> named = forest.argumentsNamed(arguments);
     if (named.isNotEmpty) {
@@ -3182,7 +3147,7 @@
               target.function.typeParameters.length !=
                   forest.argumentsTypeArguments(arguments).length) {
             arguments = forest.arguments(
-                forest.argumentsPositional(arguments), noLocation, noLocation,
+                forest.argumentsPositional(arguments), null,
                 named: forest.argumentsNamed(arguments),
                 types: new List<DartType>.filled(
                     target.function.typeParameters.length, const DynamicType(),
@@ -4099,10 +4064,9 @@
 
   @override
   Expression buildCompileTimeErrorExpression(Message message, int offset,
-      {int length, Expression original}) {
+      {int length}) {
     return new SyntheticExpressionJudgment(
-        buildCompileTimeError(message, offset, length ?? noLength),
-        original: original);
+        buildCompileTimeError(message, offset, length ?? noLength));
   }
 
   Expression wrapInCompileTimeError(Expression expression, Message message,
@@ -4140,21 +4104,19 @@
       {List<LocatedMessage> context}) {
     // TODO(askesc): Produce explicit error expression wrapping the original.
     // See [issue 29717](https://github.com/dart-lang/sdk/issues/29717)
-    return new SyntheticExpressionJudgment(
-        new Let(
-            new VariableDeclaration.forValue(new SyntheticExpressionJudgment(
-                buildCompileTimeError(
-                    message.messageObject, message.charOffset, message.length,
-                    context: context)))
-              ..fileOffset = forest.readOffset(expression),
-            new Let(
-                new VariableDeclaration.forValue(expression)
-                  ..fileOffset = forest.readOffset(expression),
-                forest.literalNull(null)
-                  ..fileOffset = forest.readOffset(expression))
-              ..fileOffset = forest.readOffset(expression))
+    return new SyntheticExpressionJudgment(new Let(
+        new VariableDeclaration.forValue(new SyntheticExpressionJudgment(
+            buildCompileTimeError(
+                message.messageObject, message.charOffset, message.length,
+                context: context)))
           ..fileOffset = forest.readOffset(expression),
-        original: expression);
+        new Let(
+            new VariableDeclaration.forValue(expression)
+              ..fileOffset = forest.readOffset(expression),
+            forest.literalNull(null)
+              ..fileOffset = forest.readOffset(expression))
+          ..fileOffset = forest.readOffset(expression))
+      ..fileOffset = forest.readOffset(expression));
   }
 
   Expression buildFallThroughError(int charOffset) {
@@ -4172,7 +4134,7 @@
           forest.literalString("${location?.file ?? uri}", null)
             ..fileOffset = charOffset,
           forest.literalInt(location?.line ?? 0, null)..fileOffset = charOffset,
-        ], noLocation, noLocation),
+        ], noLocation),
         charOffset: charOffset));
   }
 
@@ -4187,7 +4149,7 @@
         constructor.target,
         forest.arguments(<Expression>[
           forest.literalString(className, null)..fileOffset = charOffset
-        ], noLocation, noLocation)));
+        ], noLocation)));
   }
 
   Statement buildCompileTimeErrorStatement(Message message, int charOffset,
@@ -4207,16 +4169,6 @@
   }
 
   @override
-  Initializer buildInvalidFieldInitializer(int offset, bool isSynthetic,
-      Node target, Expression value, Expression error) {
-    needsImplicitSuperInitializer = false;
-    return new ShadowInvalidFieldInitializer(
-        target, value, new VariableDeclaration.forValue(error))
-      ..fileOffset = offset
-      ..isSynthetic = isSynthetic;
-  }
-
-  @override
   Initializer buildInvalidInitializer(Expression expression,
       [int charOffset = -1]) {
     needsImplicitSuperInitializer = false;
@@ -4290,7 +4242,7 @@
                 constructor.target,
                 forest.arguments(<Expression>[
                   forest.literalString(name, null)..fileOffset = offset
-                ], noLocation, noLocation),
+                ], noLocation),
                 charOffset: offset))))
           ..fileOffset = offset;
       } else {
@@ -4314,17 +4266,12 @@
           ..isSynthetic = isSynthetic;
       }
     } else {
-      builder ??= classBuilder.scope.setters[name];
-      var error = buildCompileTimeError(
-          fasta.templateInitializerForStaticField.withArguments(name),
-          offset,
-          name.length);
-      return buildInvalidFieldInitializer(
-          offset,
-          isSynthetic,
-          builder != null && builder.hasTarget ? builder.target : null,
-          expression,
-          error);
+      return buildInvalidInitializer(
+          buildCompileTimeError(
+              fasta.templateInitializerForStaticField.withArguments(name),
+              offset,
+              name.length),
+          offset);
     }
   }
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
index ec87044..d60a3a8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator.dart
@@ -64,17 +64,14 @@
 import 'kernel_ast_api.dart'
     show
         Arguments,
-        ArgumentsJudgment,
         DartType,
         DynamicType,
         Expression,
-        IllegalAssignmentJudgment,
         Initializer,
         InvalidConstructorInvocationJudgment,
         InvalidType,
         Member,
         Name,
-        Node,
         Procedure,
         StaticInvocationJudgment,
         SyntheticExpressionJudgment,
@@ -120,8 +117,7 @@
   ///
   /// The returned expression evaluates to the assigned value, unless
   /// [voidContext] is true, in which case it may evaluate to anything.
-  Expression buildAssignment(Expression value,
-      {bool voidContext, int offset: -1});
+  Expression buildAssignment(Expression value, {bool voidContext});
 
   /// Returns a [Expression] representing a null-aware assignment (`??=`) with
   /// the generator on the LHS and [value] on the RHS.
@@ -196,16 +192,16 @@
 
   Expression buildForEffect() => buildSimpleRead();
 
-  Node get fieldInitializerTarget => null;
-
-  Expression buildFieldInitializerError() {
+  Initializer buildFieldInitializer(Map<String, int> initializedFields) {
     int offset = offsetForToken(token);
-    return helper.buildCompileTimeError(
-        messageInvalidInitializer, offset, lengthForToken(token));
+    return helper.buildInvalidInitializer(
+        new SyntheticExpressionJudgment(helper.buildCompileTimeError(
+            messageInvalidInitializer, offset, lengthForToken(token))),
+        offset);
   }
 
   /* Expression | Generator | Initializer */ doInvocation(
-      int offset, ArgumentsJudgment arguments);
+      int offset, Arguments arguments);
 
   /* Expression | Generator */ buildPropertyAccess(
       IncompleteSendGenerator send, int operatorOffset, bool isNullAware) {
@@ -376,30 +372,28 @@
 abstract class IndexedAccessGenerator implements Generator {
   factory IndexedAccessGenerator.internal(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token token,
       Expression receiver,
       Expression index,
       Procedure getter,
       Procedure setter) {
-    return helper.forest.indexedAccessGenerator(helper, openSquareBracket,
-        closeSquareBracket, receiver, index, getter, setter);
+    return helper.forest
+        .indexedAccessGenerator(helper, token, receiver, index, getter, setter);
   }
 
   static Generator make(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token token,
       Expression receiver,
       Expression index,
       Procedure getter,
       Procedure setter) {
     if (helper.forest.isThisExpression(receiver)) {
       return new ThisIndexedAccessGenerator(
-          helper, openSquareBracket, closeSquareBracket, index, getter, setter);
+          helper, token, index, getter, setter);
     } else {
-      return new IndexedAccessGenerator.internal(helper, openSquareBracket,
-          closeSquareBracket, receiver, index, getter, setter);
+      return new IndexedAccessGenerator.internal(
+          helper, token, receiver, index, getter, setter);
     }
   }
 
@@ -416,15 +410,10 @@
 /// Special case of [IndexedAccessGenerator] to avoid creating an indirect
 /// access to 'this'.
 abstract class ThisIndexedAccessGenerator implements Generator {
-  factory ThisIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
-      Expression index,
-      Procedure getter,
-      Procedure setter) {
-    return helper.forest.thisIndexedAccessGenerator(
-        helper, openSquareBracket, closeSquareBracket, index, getter, setter);
+  factory ThisIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token token, Expression index, Procedure getter, Procedure setter) {
+    return helper.forest
+        .thisIndexedAccessGenerator(helper, token, index, getter, setter);
   }
 
   @override
@@ -438,15 +427,10 @@
 }
 
 abstract class SuperIndexedAccessGenerator implements Generator {
-  factory SuperIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
-      Expression index,
-      Member getter,
-      Member setter) {
-    return helper.forest.superIndexedAccessGenerator(
-        helper, openSquareBracket, closeSquareBracket, index, getter, setter);
+  factory SuperIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token token, Expression index, Member getter, Member setter) {
+    return helper.forest
+        .superIndexedAccessGenerator(helper, token, index, getter, setter);
   }
 
   String get plainNameForRead => "[]";
@@ -763,8 +747,9 @@
   withReceiver(Object receiver, int operatorOffset, {bool isNullAware}) => this;
 
   @override
-  Expression buildFieldInitializerError() {
-    return buildError(forest.argumentsEmpty(token, token), isSetter: true);
+  Initializer buildFieldInitializer(Map<String, int> initializedFields) {
+    return helper.buildInvalidInitializer(new SyntheticExpressionJudgment(
+        buildError(forest.argumentsEmpty(token), isSetter: true)));
   }
 
   @override
@@ -781,10 +766,9 @@
   }
 
   @override
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return new SyntheticExpressionJudgment(buildError(
-        forest.arguments(<Expression>[value], token, token),
+        forest.arguments(<Expression>[value], token),
         isSetter: true));
   }
 
@@ -796,7 +780,7 @@
       bool isPreIncDec: false,
       bool isPostIncDec: false}) {
     return new SyntheticExpressionJudgment(buildError(
-        forest.arguments(<Expression>[value], token, token),
+        forest.arguments(<Expression>[value], token),
         isGetter: true));
   }
 
@@ -806,7 +790,6 @@
     var error = buildError(
         forest.arguments(
             <Expression>[forest.literalInt(1, null)..fileOffset = offset],
-            token,
             token),
         isGetter: true);
     return new UnresolvedVariableUnaryJudgment(
@@ -820,7 +803,6 @@
     var error = buildError(
         forest.arguments(
             <Expression>[forest.literalInt(1, null)..fileOffset = offset],
-            token,
             token),
         isGetter: true);
     return new UnresolvedVariableUnaryJudgment(
@@ -833,22 +815,22 @@
       Expression value, DartType type, int offset,
       {bool voidContext: false}) {
     return new SyntheticExpressionJudgment(buildError(
-        forest.arguments(<Expression>[value], token, token),
+        forest.arguments(<Expression>[value], token),
         isSetter: true));
   }
 
   @override
   Expression buildSimpleRead() => new SyntheticExpressionJudgment(
-      buildError(forest.argumentsEmpty(token, token), isGetter: true));
+      buildError(forest.argumentsEmpty(token), isGetter: true));
 
   @override
   Expression makeInvalidRead() => new SyntheticExpressionJudgment(
-      buildError(forest.argumentsEmpty(token, token), isGetter: true));
+      buildError(forest.argumentsEmpty(token), isGetter: true));
 
   @override
   Expression makeInvalidWrite(Expression value) {
     return new SyntheticExpressionJudgment(buildError(
-        forest.arguments(<Expression>[value], token, token),
+        forest.arguments(<Expression>[value], token),
         isSetter: true));
   }
 
@@ -941,16 +923,15 @@
   }
 
   @override
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
-    return buildInvalidAssignment(value, offset);
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
+    return makeInvalidWrite(value);
   }
 
   @override
   Expression buildNullAwareAssignment(
       Expression value, DartType type, int offset,
       {bool voidContext: false}) {
-    return buildInvalidAssignment(value, offset);
+    return makeInvalidWrite(value);
   }
 
   @override
@@ -960,34 +941,19 @@
       Procedure interfaceTarget,
       bool isPreIncDec: false,
       bool isPostIncDec: false}) {
-    return buildInvalidAssignment(value, offset);
+    return makeInvalidWrite(value);
   }
 
   @override
   Expression buildPrefixIncrement(Name binaryOperator,
       {int offset: -1, bool voidContext: false, Procedure interfaceTarget}) {
-    return buildInvalidAssignment(
-        forest.literalInt(1, null, isSynthetic: true), offset);
+    return makeInvalidWrite(null);
   }
 
   @override
   Expression buildPostfixIncrement(Name binaryOperator,
       {int offset: -1, bool voidContext: false, Procedure interfaceTarget}) {
-    return buildInvalidAssignment(
-        forest.literalInt(1, null, isSynthetic: true), offset);
-  }
-
-  Expression buildInvalidAssignment(Expression value, int offset) {
-    var lhs = buildSimpleRead();
-    // The lhs expression needs to have a parent so that type inference can be
-    // applied to it, but it doesn't matter what the parent is because the
-    // lhs expression won't appear in the tree.  So just give it a quick and
-    // dirty parent.
-    new VariableDeclaration.forValue(lhs);
-
-    return new IllegalAssignmentJudgment(value,
-        assignmentOffset: offset, desugared: makeInvalidWrite(value))
-      ..write = lhs;
+    return makeInvalidWrite(null);
   }
 
   @override
@@ -1028,26 +994,13 @@
   }
 
   Expression handleAssignment(bool voidContext) {
-    var assignment = makeAssignmentExpression(voidContext);
     if (helper.constantContext != ConstantContext.none) {
-      // The assignment needs to have a parent so that type inference can be
-      // applied to it, but it doesn't matter what the parent is because the
-      // assignment won't appear in the tree.  So just give it a quick and dirty
-      // parent.
-      new VariableDeclaration.forValue(assignment);
-
       return helper.buildCompileTimeErrorExpression(
           messageNotAConstantExpression, offsetForToken(token),
-          length: token.length, original: assignment);
-    } else {
-      return assignment;
+          length: token.length);
     }
-  }
-
-  Expression makeAssignmentExpression(bool voidContext) {
     if (identical("=", assignmentOperator)) {
-      return generator.buildAssignment(value,
-          voidContext: voidContext, offset: token.offset);
+      return generator.buildAssignment(value, voidContext: voidContext);
     } else if (identical("+=", assignmentOperator)) {
       return generator.buildCompoundAssignment(plusName, value,
           offset: offsetForToken(token), voidContext: voidContext);
@@ -1091,15 +1044,11 @@
     }
   }
 
-  Initializer buildFieldInitializer() {
+  @override
+  Initializer buildFieldInitializer(Map<String, int> initializedFields) {
     if (!identical("=", assignmentOperator) ||
         !generator.isThisPropertyAccess) {
-      return helper.buildInvalidFieldInitializer(
-          offsetForToken(token),
-          false,
-          generator.fieldInitializerTarget,
-          value,
-          generator.buildFieldInitializerError());
+      return generator.buildFieldInitializer(initializedFields);
     }
     return helper.buildFieldInitializer(
         false, generator.plainNameForRead, offsetForToken(token), value);
diff --git a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
index af00914..d50dd58 100644
--- a/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/expression_generator_helper.dart
@@ -27,7 +27,6 @@
 import 'kernel_ast_api.dart'
     show
         Arguments,
-        ArgumentsJudgment,
         Constructor,
         DartType,
         Expression,
@@ -71,22 +70,19 @@
   scopeLookup(Scope scope, String name, Token token,
       {bool isQualified: false, PrefixBuilder prefix});
 
-  finishSend(Object receiver, ArgumentsJudgment arguments, int offset);
+  finishSend(Object receiver, Arguments arguments, int offset);
 
   Expression buildCompileTimeError(Message message, int charOffset, int length,
       {List<LocatedMessage> context});
 
   Expression buildCompileTimeErrorExpression(Message message, int offset,
-      {int length, Expression original});
+      {int length});
 
   Expression wrapInCompileTimeError(Expression expression, Message message);
 
   Expression wrapInProblem(Expression expression, Message message, int length,
       {List<LocatedMessage> context});
 
-  Initializer buildInvalidFieldInitializer(int offset, bool isSynthetic,
-      Node target, Expression value, Expression error);
-
   Initializer buildInvalidInitializer(Expression expression, [int offset]);
 
   Initializer buildFieldInitializer(
@@ -101,8 +97,7 @@
       Constructor constructor, Arguments arguments,
       [int charOffset = -1]);
 
-  Expression buildStaticInvocation(
-      Procedure target, ArgumentsJudgment arguments,
+  Expression buildStaticInvocation(Procedure target, Arguments arguments,
       {Constness constness, int charOffset, Expression error});
 
   Expression buildProblemExpression(
@@ -117,14 +112,11 @@
       bool isStatic,
       LocatedMessage argMessage});
 
-  LocatedMessage checkArgumentsForFunction(
-      FunctionNode function,
-      ArgumentsJudgment arguments,
-      int offset,
-      List<TypeParameter> typeParameters);
+  LocatedMessage checkArgumentsForFunction(FunctionNode function,
+      Arguments arguments, int offset, List<TypeParameter> typeParameters);
 
   LocatedMessage checkArgumentsForType(
-      FunctionType function, ArgumentsJudgment arguments, int offset);
+      FunctionType function, Arguments arguments, int offset);
 
   StaticGet makeStaticGet(Member readTarget, Token token);
 
diff --git a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
index 42e8892..6e147a8 100644
--- a/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/fangorn.dart
@@ -35,7 +35,7 @@
         VariableDeclaration,
         setParents;
 
-import '../parser.dart' show endOffsetForToken, offsetForToken, optional;
+import '../parser.dart' show offsetForToken, optional;
 
 import '../problems.dart' show unsupported;
 
@@ -132,17 +132,15 @@
   Fangorn(this.typeInferenceTokensSaver);
 
   @override
-  ArgumentsJudgment arguments(
-      List<Expression> positional, Token beginToken, Token endToken,
+  ArgumentsJudgment arguments(List<Expression> positional, Token token,
       {List<DartType> types, List<NamedExpression> named}) {
-    return new ArgumentsJudgment(
-        offsetForToken(beginToken), endOffsetForToken(endToken), positional,
-        types: types, named: named);
+    return new ArgumentsJudgment(positional, types: types, named: named)
+      ..fileOffset = offsetForToken(token);
   }
 
   @override
-  ArgumentsJudgment argumentsEmpty(Token beginToken, Token endToken) {
-    return arguments(<Expression>[], beginToken, endToken);
+  ArgumentsJudgment argumentsEmpty(Token token) {
+    return arguments(<Expression>[], token);
   }
 
   @override
@@ -183,11 +181,9 @@
   }
 
   @override
-  IntJudgment literalInt(int value, Token token,
-      {Expression desugaredError, bool isSynthetic: false}) {
+  IntJudgment literalInt(int value, Token token) {
     return new IntJudgment(
-        typeInferenceTokensSaver?.intLiteralTokens(token), value,
-        desugaredError: desugaredError, isSynthetic: isSynthetic)
+        typeInferenceTokensSaver?.intLiteralTokens(token), value)
       ..fileOffset = offsetForToken(token);
   }
 
@@ -291,11 +287,9 @@
   }
 
   @override
-  Expression asExpression(Expression expression, covariant type, Token token,
-      {Expression desugaredError}) {
+  Expression asExpression(Expression expression, covariant type, Token token) {
     return new AsJudgment(
-        expression, typeInferenceTokensSaver?.asExpressionTokens(token), type,
-        desugaredError: desugaredError)
+        expression, typeInferenceTokensSaver?.asExpressionTokens(token), type)
       ..fileOffset = offsetForToken(token);
   }
 
@@ -790,38 +784,35 @@
   @override
   KernelIndexedAccessGenerator indexedAccessGenerator(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token token,
       Expression receiver,
       Expression index,
       Procedure getter,
       Procedure setter) {
-    return new KernelIndexedAccessGenerator.internal(helper, openSquareBracket,
-        closeSquareBracket, receiver, index, getter, setter);
+    return new KernelIndexedAccessGenerator.internal(
+        helper, token, receiver, index, getter, setter);
   }
 
   @override
   KernelThisIndexedAccessGenerator thisIndexedAccessGenerator(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token token,
       Expression index,
       Procedure getter,
       Procedure setter) {
     return new KernelThisIndexedAccessGenerator(
-        helper, openSquareBracket, closeSquareBracket, index, getter, setter);
+        helper, token, index, getter, setter);
   }
 
   @override
   KernelSuperIndexedAccessGenerator superIndexedAccessGenerator(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token token,
       Expression index,
       Member getter,
       Member setter) {
     return new KernelSuperIndexedAccessGenerator(
-        helper, openSquareBracket, closeSquareBracket, index, getter, setter);
+        helper, token, index, getter, setter);
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index 2e029e5..b66c371 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -48,13 +48,10 @@
 abstract class Forest {
   const Forest();
 
-  /// [beginToken] is the opening `(`.
-  /// [endToken] is the closing `)`.
-  Arguments arguments(
-      List<Expression> positional, Token beginToken, Token endToken,
+  Arguments arguments(List<Expression> positional, Token location,
       {covariant List types, covariant List named});
 
-  Arguments argumentsEmpty(Token beginToken, Token endToken);
+  Arguments argumentsEmpty(Token location);
 
   List argumentsNamed(Arguments arguments);
 
@@ -76,8 +73,7 @@
 
   /// Return a representation of an integer literal at the given [location]. The
   /// literal has the given [value].
-  Expression literalInt(int value, Token location,
-      {Expression desugaredError, bool isSynthetic: false});
+  Expression literalInt(int value, Token location);
 
   /// Return a representation of a list literal. The [constKeyword] is the
   /// location of the `const` keyword, or `null` if there is no keyword. The
@@ -166,8 +162,8 @@
 
   Expression checkLibraryIsLoaded(covariant dependency);
 
-  Expression asExpression(Expression expression, covariant type, Token location,
-      {Expression desugaredError});
+  Expression asExpression(
+      Expression expression, covariant type, Token location);
 
   /// Return a representation of an assert that appears in a constructor's
   /// initializer list.
@@ -394,28 +390,17 @@
 
   Generator indexedAccessGenerator(
       ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
+      Token location,
       Expression receiver,
       Expression index,
       Procedure getter,
       Procedure setter);
 
-  Generator thisIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
-      Expression index,
-      Procedure getter,
-      Procedure setter);
+  Generator thisIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token location, Expression index, Procedure getter, Procedure setter);
 
-  Generator superIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      Token openSquareBracket,
-      Token closeSquareBracket,
-      Expression index,
-      Member getter,
-      Member setter);
+  Generator superIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token location, Expression index, Member getter, Member setter);
 
   Generator staticAccessGenerator(ExpressionGeneratorHelper helper,
       Token location, Member getter, Member setter);
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 d46c89c..acb1b8b 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
@@ -116,9 +116,6 @@
 
   Class get cls;
 
-  @override
-  bool get hasTarget => true;
-
   Class get target => cls;
 
   Class get actualCls;
@@ -220,13 +217,14 @@
     Set<ClassBuilder> implemented = new Set<ClassBuilder>();
     for (KernelTypeBuilder type in interfaces) {
       if (type is KernelNamedTypeBuilder) {
+        int charOffset = -1; // TODO(ahe): Get offset from type.
         Declaration decl = type.declaration;
         if (decl is ClassBuilder) {
           ClassBuilder interface = decl;
           if (superClass == interface) {
             addCompileTimeError(
                 templateImplementsSuperClass.withArguments(interface.name),
-                type.charOffset,
+                charOffset,
                 noLength);
           } else if (implemented.contains(interface)) {
             // Aggregate repetitions.
@@ -235,9 +233,9 @@
             problems[interface] += 1;
 
             problemsOffsets ??= new Map<ClassBuilder, int>();
-            problemsOffsets[interface] ??= type.charOffset;
+            problemsOffsets[interface] ??= charOffset;
           } else if (interface.target == coreTypes.futureOrClass) {
-            addCompileTimeError(messageImplementsFutureOr, type.charOffset,
+            addCompileTimeError(messageImplementsFutureOr, charOffset,
                 interface.target.name.length);
           } else {
             implemented.add(interface);
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 a245bb8..60288dd 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
@@ -99,19 +99,16 @@
     constantNamesAndOffsetsAndDocs ??= const <Object>[];
     // TODO(ahe): These types shouldn't be looked up in scope, they come
     // directly from dart:core.
-    KernelTypeBuilder intType =
-        new KernelNamedTypeBuilder(null, -1, "int", null);
-    KernelTypeBuilder stringType =
-        new KernelNamedTypeBuilder(null, -1, "String", null);
+    KernelTypeBuilder intType = new KernelNamedTypeBuilder("int", null);
+    KernelTypeBuilder stringType = new KernelNamedTypeBuilder("String", null);
     KernelNamedTypeBuilder objectType =
-        new KernelNamedTypeBuilder(null, -1, "Object", null);
+        new KernelNamedTypeBuilder("Object", null);
     ShadowClass cls = new ShadowClass(name: name);
     Map<String, MemberBuilder> members = <String, MemberBuilder>{};
     Map<String, MemberBuilder> constructors = <String, MemberBuilder>{};
-    KernelNamedTypeBuilder selfType =
-        new KernelNamedTypeBuilder(null, -1, name, null);
-    KernelTypeBuilder listType = new KernelNamedTypeBuilder(
-        null, -1, "List", <KernelTypeBuilder>[selfType]);
+    KernelNamedTypeBuilder selfType = new KernelNamedTypeBuilder(name, null);
+    KernelTypeBuilder listType =
+        new KernelNamedTypeBuilder("List", <KernelTypeBuilder>[selfType]);
 
     /// metadata class E {
     ///   final int index;
@@ -164,15 +161,15 @@
         charEndOffset);
     members["toString"] = toStringBuilder;
     String className = name;
-    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 5) {
-      List<MetadataBuilder> metadata = constantNamesAndOffsetsAndDocs[i + 1];
-      String name = constantNamesAndOffsetsAndDocs[i + 2];
-      int charOffset = constantNamesAndOffsetsAndDocs[i + 3];
-      String documentationComment = constantNamesAndOffsetsAndDocs[i + 4];
+    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 4) {
+      List<MetadataBuilder> metadata = constantNamesAndOffsetsAndDocs[i];
+      String name = constantNamesAndOffsetsAndDocs[i + 1];
+      int charOffset = constantNamesAndOffsetsAndDocs[i + 2];
+      String documentationComment = constantNamesAndOffsetsAndDocs[i + 3];
       if (members.containsKey(name)) {
         parent.addCompileTimeError(templateDuplicatedName.withArguments(name),
             charOffset, noLength, parent.fileUri);
-        constantNamesAndOffsetsAndDocs[i + 2] = null;
+        constantNamesAndOffsetsAndDocs[i + 1] = null;
         continue;
       }
       if (name == className) {
@@ -181,7 +178,7 @@
             charOffset,
             noLength,
             parent.fileUri);
-        constantNamesAndOffsetsAndDocs[i + 2] = null;
+        constantNamesAndOffsetsAndDocs[i + 1] = null;
         continue;
       }
       KernelFieldBuilder fieldBuilder = new KernelFieldBuilder(
@@ -253,8 +250,8 @@
     toStringBuilder.body = new ReturnStatement(
         new DirectPropertyGet(new ThisExpression(), nameField));
     List<Expression> values = <Expression>[];
-    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 5) {
-      String name = constantNamesAndOffsetsAndDocs[i + 2];
+    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 4) {
+      String name = constantNamesAndOffsetsAndDocs[i + 1];
       if (name != null) {
         KernelFieldBuilder builder = this[name];
         values.add(new StaticGet(builder.build(libraryBuilder)));
@@ -291,8 +288,8 @@
             ..parent = constructor);
     }
     int index = 0;
-    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 5) {
-      String constant = constantNamesAndOffsetsAndDocs[i + 2];
+    for (int i = 0; i < constantNamesAndOffsetsAndDocs.length; i += 4) {
+      String constant = constantNamesAndOffsetsAndDocs[i + 1];
       if (constant != null) {
         KernelFieldBuilder field = this[constant];
         field.build(libraryBuilder);
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
index 004ea06..82944ef 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator.dart
@@ -75,7 +75,6 @@
 
 import 'kernel_ast_api.dart'
     show
-        ArgumentsJudgment,
         ComplexAssignmentJudgment,
         Constructor,
         DartType,
@@ -142,8 +141,7 @@
   }
 
   @override
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     var complexAssignment = startComplexAssignment(value);
     return _finish(_makeSimpleWrite(value, voidContext, complexAssignment),
         complexAssignment);
@@ -200,8 +198,8 @@
       {int offset: TreeNode.noOffset,
       bool voidContext: false,
       Procedure interfaceTarget}) {
-    return buildCompoundAssignment(binaryOperator,
-        forest.literalInt(1, null, isSynthetic: true)..fileOffset = offset,
+    return buildCompoundAssignment(
+        binaryOperator, forest.literalInt(1, null)..fileOffset = offset,
         offset: offset,
         voidContext: voidContext,
         interfaceTarget: interfaceTarget,
@@ -214,8 +212,8 @@
       bool voidContext: false,
       Procedure interfaceTarget}) {
     if (voidContext) {
-      return buildCompoundAssignment(binaryOperator,
-          forest.literalInt(1, null, isSynthetic: true)..fileOffset = offset,
+      return buildCompoundAssignment(
+          binaryOperator, forest.literalInt(1, null)..fileOffset = offset,
           offset: offset,
           voidContext: voidContext,
           interfaceTarget: interfaceTarget,
@@ -242,7 +240,7 @@
     return new SyntheticExpressionJudgment(helper.throwNoSuchMethodError(
         forest.literalNull(token),
         plainNameForRead,
-        forest.argumentsEmpty(noLocation, noLocation),
+        forest.argumentsEmpty(noLocation),
         offsetForToken(token),
         isGetter: true));
   }
@@ -252,7 +250,7 @@
     return buildInvalidWriteJudgment(helper.throwNoSuchMethodError(
         forest.literalNull(token),
         plainNameForRead,
-        forest.arguments(<Expression>[value], noLocation, noLocation),
+        forest.arguments(<Expression>[value], noLocation),
         offsetForToken(token),
         isSetter: true));
   }
@@ -502,8 +500,7 @@
 
   @override
   ComplexAssignmentJudgment startComplexAssignment(Expression rhs) =>
-      new PropertyAssignmentJudgment(null, rhs,
-          isSyntheticLhs: token.isSynthetic);
+      new PropertyAssignmentJudgment(null, rhs);
 
   @override
   void printOn(StringSink sink) {
@@ -693,10 +690,6 @@
 
 class KernelIndexedAccessGenerator extends KernelGenerator
     with IndexedAccessGenerator {
-  final Token openSquareBracket;
-
-  final Token closeSquareBracket;
-
   final Expression receiver;
 
   final Expression index;
@@ -709,15 +702,9 @@
 
   VariableDeclaration indexVariable;
 
-  KernelIndexedAccessGenerator.internal(
-      ExpressionGeneratorHelper helper,
-      this.openSquareBracket,
-      this.closeSquareBracket,
-      this.receiver,
-      this.index,
-      this.getter,
-      this.setter)
-      : super(helper, openSquareBracket);
+  KernelIndexedAccessGenerator.internal(ExpressionGeneratorHelper helper,
+      Token token, this.receiver, this.index, this.getter, this.setter)
+      : super(helper, token);
 
   Expression indexAccess() {
     indexVariable ??= new VariableDeclaration.forValue(index);
@@ -734,11 +721,8 @@
 
   @override
   Expression _makeSimpleRead() {
-    var read = new MethodInvocationJudgment(
-        receiver,
-        indexGetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index], openSquareBracket, closeSquareBracket)),
+    var read = new MethodInvocationJudgment(receiver, indexGetName,
+        forest.castArguments(forest.arguments(<Expression>[index], token)),
         interfaceTarget: getter)
       ..fileOffset = offsetForToken(token);
     return read;
@@ -751,8 +735,8 @@
     var write = new MethodInvocationJudgment(
         receiver,
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index, value], openSquareBracket, closeSquareBracket)),
+        forest
+            .castArguments(forest.arguments(<Expression>[index, value], token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -764,8 +748,8 @@
     var read = new MethodInvocationJudgment(
         receiverAccess(),
         indexGetName,
-        forest.castArguments(forest.arguments(<Expression>[indexAccess()],
-            openSquareBracket, closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess()], token)),
         interfaceTarget: getter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
@@ -779,10 +763,8 @@
     var write = new MethodInvocationJudgment(
         receiverAccess(),
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[indexAccess(), value],
-            openSquareBracket,
-            closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess(), value], token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -801,8 +783,7 @@
         indexSetName,
         forest.castArguments(forest.arguments(
             <Expression>[indexAccess(), new VariableGet(valueVariable)],
-            openSquareBracket,
-            closeSquareBracket)),
+            token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -854,10 +835,6 @@
 
 class KernelThisIndexedAccessGenerator extends KernelGenerator
     with ThisIndexedAccessGenerator {
-  final Token openSquareBracket;
-
-  final Token closeSquareBracket;
-
   final Expression index;
 
   final Procedure getter;
@@ -866,14 +843,9 @@
 
   VariableDeclaration indexVariable;
 
-  KernelThisIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      this.openSquareBracket,
-      this.closeSquareBracket,
-      this.index,
-      this.getter,
-      this.setter)
-      : super(helper, openSquareBracket);
+  KernelThisIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token token, this.index, this.getter, this.setter)
+      : super(helper, token);
 
   Expression indexAccess() {
     indexVariable ??= new VariableDeclaration.forValue(index);
@@ -888,8 +860,7 @@
         indexSetName,
         forest.castArguments(forest.arguments(
             <Expression>[indexAccess(), new VariableGet(valueVariable)],
-            openSquareBracket,
-            closeSquareBracket)),
+            token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -903,8 +874,7 @@
     return new MethodInvocationJudgment(
         forest.thisExpression(token),
         indexGetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index], openSquareBracket, closeSquareBracket)),
+        forest.castArguments(forest.arguments(<Expression>[index], token)),
         interfaceTarget: getter)
       ..fileOffset = offsetForToken(token);
   }
@@ -916,8 +886,8 @@
     var write = new MethodInvocationJudgment(
         forest.thisExpression(token),
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index, value], openSquareBracket, closeSquareBracket)),
+        forest
+            .castArguments(forest.arguments(<Expression>[index, value], token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -929,8 +899,8 @@
     var read = new MethodInvocationJudgment(
         forest.thisExpression(token),
         indexGetName,
-        forest.castArguments(forest.arguments(<Expression>[indexAccess()],
-            openSquareBracket, closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess()], token)),
         interfaceTarget: getter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
@@ -944,10 +914,8 @@
     var write = new MethodInvocationJudgment(
         forest.thisExpression(token),
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[indexAccess(), value],
-            openSquareBracket,
-            closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess(), value], token)),
         interfaceTarget: setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -987,10 +955,6 @@
 
 class KernelSuperIndexedAccessGenerator extends KernelGenerator
     with SuperIndexedAccessGenerator {
-  final Token openSquareBracket;
-
-  final Token closeSquareBracket;
-
   final Expression index;
 
   final Member getter;
@@ -999,14 +963,9 @@
 
   VariableDeclaration indexVariable;
 
-  KernelSuperIndexedAccessGenerator(
-      ExpressionGeneratorHelper helper,
-      this.openSquareBracket,
-      this.closeSquareBracket,
-      this.index,
-      this.getter,
-      this.setter)
-      : super(helper, openSquareBracket);
+  KernelSuperIndexedAccessGenerator(ExpressionGeneratorHelper helper,
+      Token token, this.index, this.getter, this.setter)
+      : super(helper, token);
 
   Expression indexAccess() {
     indexVariable ??= new VariableDeclaration.forValue(index);
@@ -1024,8 +983,7 @@
         indexSetName,
         forest.castArguments(forest.arguments(
             <Expression>[indexAccess(), new VariableGet(valueVariable)],
-            openSquareBracket,
-            closeSquareBracket)),
+            token)),
         setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -1041,10 +999,8 @@
           isSuper: true);
     }
     // TODO(ahe): Use [DirectMethodInvocation] when possible.
-    return new SuperMethodInvocationJudgment(
-        indexGetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index], openSquareBracket, closeSquareBracket)),
+    return new SuperMethodInvocationJudgment(indexGetName,
+        forest.castArguments(forest.arguments(<Expression>[index], token)),
         interfaceTarget: getter)
       ..fileOffset = offsetForToken(token);
   }
@@ -1059,8 +1015,8 @@
     }
     var write = new SuperMethodInvocation(
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[index, value], openSquareBracket, closeSquareBracket)),
+        forest
+            .castArguments(forest.arguments(<Expression>[index, value], token)),
         setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -1075,8 +1031,8 @@
     }
     var read = new SuperMethodInvocation(
         indexGetName,
-        forest.castArguments(forest.arguments(<Expression>[indexAccess()],
-            openSquareBracket, closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess()], token)),
         getter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.read = read;
@@ -1093,10 +1049,8 @@
     }
     var write = new SuperMethodInvocation(
         indexSetName,
-        forest.castArguments(forest.arguments(
-            <Expression>[indexAccess(), value],
-            openSquareBracket,
-            closeSquareBracket)),
+        forest.castArguments(
+            forest.arguments(<Expression>[indexAccess(), value], token)),
         setter)
       ..fileOffset = offsetForToken(token);
     complexAssignment?.write = write;
@@ -1149,9 +1103,6 @@
         super(helper, token);
 
   @override
-  Node get fieldInitializerTarget => readTarget;
-
-  @override
   String get plainNameForRead => (readTarget ?? writeTarget).name.name;
 
   @override
@@ -1191,7 +1142,7 @@
   }
 
   @override
-  Expression doInvocation(int offset, ArgumentsJudgment arguments) {
+  Expression doInvocation(int offset, Arguments arguments) {
     Expression error;
     if (helper.constantContext != ConstantContext.none &&
         !helper.isIdentical(readTarget)) {
@@ -1321,51 +1272,32 @@
   @override
   Expression get expression {
     if (super.expression == null) {
-      super.expression = computeExpression();
+      int offset = offsetForToken(token);
+      if (declaration is KernelInvalidTypeBuilder) {
+        KernelInvalidTypeBuilder declaration = this.declaration;
+        helper.addProblemErrorIfConst(
+            declaration.message.messageObject, offset, token.length);
+        super.expression = new SyntheticExpressionJudgment(
+            new Throw(forest.literalString(declaration.message.message, token))
+              ..fileOffset = offset);
+      } else {
+        super.expression = forest.literalType(
+            buildTypeWithBuiltArguments(null, nonInstanceAccessIsError: true),
+            token);
+      }
     }
     return super.expression;
   }
 
-  Expression computeExpression({bool silent: false}) {
-    int offset = offsetForToken(token);
-    if (declaration is KernelInvalidTypeBuilder) {
-      KernelInvalidTypeBuilder declaration = this.declaration;
-      if (!silent) {
-        helper.addProblemErrorIfConst(
-            declaration.message.messageObject, offset, token.length);
-      }
-      return new UnresolvedVariableGetJudgment(
-          new Throw(forest.literalString(declaration.message.message, token))
-            ..fileOffset = offset,
-          token.isSynthetic)
-        ..fileOffset = offset;
-    } else {
-      return forest.literalType(
-          buildTypeWithBuiltArguments(null, nonInstanceAccessIsError: true),
-          token);
-    }
-  }
-
-  @override
-  Node get fieldInitializerTarget =>
-      declaration.hasTarget ? declaration.target : null;
-
   @override
   Expression makeInvalidWrite(Expression value) {
-    var read = computeExpression(silent: true);
-    // The read needs to have a parent so that type inference can be applied to
-    // it, but it doesn't mater what the parent is because the final read won't
-    // appear in the tree.  So just give it a quick and dirty parent.
-    new VariableDeclaration.forValue(read);
-
-    var throwExpr = helper.throwNoSuchMethodError(
+    return new SyntheticExpressionJudgment(helper.throwNoSuchMethodError(
         forest.literalNull(token),
         plainNameForRead,
-        forest.arguments(<Expression>[value], noLocation, noLocation)
+        forest.arguments(<Expression>[value], null)
           ..fileOffset = value.fileOffset,
         offsetForToken(token),
-        isSetter: true);
-    return new SyntheticExpressionJudgment(throwExpr, original: read);
+        isSetter: true));
   }
 
   @override
@@ -1495,30 +1427,23 @@
       : super(helper, token);
 
   @override
-  Expression _makeSimpleRead() {
-    return _buildErrorIntLiteral();
-  }
+  Expression _makeSimpleRead() => new SyntheticExpressionJudgment(buildError());
 
   @override
   Expression _makeSimpleWrite(Expression value, bool voidContext,
       ComplexAssignmentJudgment complexAssignment) {
-    return _buildErrorIntLiteral();
+    return new SyntheticExpressionJudgment(buildError());
   }
 
   @override
   Expression _makeRead(ComplexAssignmentJudgment complexAssignment) {
-    return _buildErrorIntLiteral();
+    return new SyntheticExpressionJudgment(buildError());
   }
 
   @override
   Expression _makeWrite(Expression value, bool voidContext,
       ComplexAssignmentJudgment complexAssignment) {
-    return _buildErrorIntLiteral();
-  }
-
-  Expression _buildErrorIntLiteral() {
-    var error = buildError();
-    return forest.literalInt(0, token, desugaredError: error);
+    return new SyntheticExpressionJudgment(buildError());
   }
 }
 
@@ -1532,8 +1457,7 @@
       : super(helper, token);
 
   @override
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return _buildUnresolvedVariableAssignment(false, value);
   }
 
@@ -1549,8 +1473,7 @@
 
   @override
   Expression buildSimpleRead() {
-    Expression error =
-        buildError(forest.argumentsEmpty(token, token), isGetter: true);
+    Expression error = buildError(forest.argumentsEmpty(token), isGetter: true);
     return new UnresolvedVariableGetJudgment(error, token.isSynthetic)
       ..fileOffset = token.charOffset;
   }
@@ -1574,12 +1497,10 @@
   UnresolvedVariableAssignmentJudgment _buildUnresolvedVariableAssignment(
       bool isCompound, Expression value) {
     return new UnresolvedVariableAssignmentJudgment(
-        buildError(forest.arguments(<Expression>[value], token, token),
-            isSetter: true),
-        isCompound,
-        value,
-        token.isSynthetic)
-      ..fileOffset = token.charOffset;
+      buildError(forest.arguments(<Expression>[value], token), isSetter: true),
+      isCompound,
+      value,
+    )..fileOffset = token.charOffset;
   }
 }
 
@@ -1599,8 +1520,7 @@
         super(helper, token);
 
   @override
-  Expression buildAssignment(Expression value,
-      {bool voidContext, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext}) {
     return new PropertySet(receiver, name, value)
       ..fileOffset = offsetForToken(token);
   }
@@ -1705,9 +1625,9 @@
   return new MethodInvocationJudgment(
       left,
       operator,
-      helper.forest.castArguments(
-          helper.forest.arguments(<Expression>[right], noLocation, noLocation))
-        ..fileOffset = offset,
+      helper.forest
+          .castArguments(helper.forest.arguments(<Expression>[right], null))
+            ..fileOffset = offset,
       interfaceTarget: interfaceTarget)
     ..fileOffset = offset;
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart
index c9cfbf9..5905d5d 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_expression_generator_impl.dart
@@ -36,7 +36,8 @@
   Expression buildSimpleRead() {
     if (!isSuper) {
       if (inFieldInitializer) {
-        return buildFieldInitializerError();
+        return new SyntheticExpressionJudgment(
+            buildFieldInitializerError(null));
       } else {
         return forest.thisExpression(token);
       }
@@ -48,14 +49,18 @@
     }
   }
 
-  @override
-  Expression buildFieldInitializerError() {
+  Expression buildFieldInitializerError(Map<String, int> initializedFields) {
     String keyword = isSuper ? "super" : "this";
-    int offset = offsetForToken(token);
-    return helper.buildCompileTimeErrorExpression(
+    return helper.buildCompileTimeError(
         templateThisOrSuperAccessInFieldInitializer.withArguments(keyword),
-        offset,
-        length: keyword.length);
+        offsetForToken(token),
+        keyword.length);
+  }
+
+  @override
+  Initializer buildFieldInitializer(Map<String, int> initializedFields) {
+    Expression error = buildFieldInitializerError(initializedFields);
+    return helper.buildInvalidInitializer(error, error.fileOffset);
   }
 
   buildPropertyAccess(
@@ -71,7 +76,7 @@
       return buildConstructorInitializer(offset, name, arguments);
     }
     if (inFieldInitializer && !isInitializer) {
-      return buildFieldInitializerError();
+      return new SyntheticExpressionJudgment(buildFieldInitializerError(null));
     }
     Member getter = helper.lookupInstanceMember(name, isSuper: isSuper);
     if (send is SendAccessGenerator) {
@@ -135,8 +140,7 @@
     }
   }
 
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return buildAssignmentError();
   }
 
@@ -230,7 +234,7 @@
 
   @override
   Expression buildSimpleRead() {
-    var error = buildError(forest.argumentsEmpty(token, token), isGetter: true);
+    var error = buildError(forest.argumentsEmpty(token), isGetter: true);
     return new InvalidPropertyGetJudgment(error, member)
       ..fileOffset = offsetForToken(token);
   }
@@ -261,8 +265,7 @@
     return unsupported("buildSimpleRead", offsetForToken(token), uri);
   }
 
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return unsupported("buildAssignment", offsetForToken(token), uri);
   }
 
@@ -333,8 +336,7 @@
     return unsupported("buildSimpleRead", offsetForToken(token), uri);
   }
 
-  Expression buildAssignment(Expression value,
-      {bool voidContext: false, int offset: -1}) {
+  Expression buildAssignment(Expression value, {bool voidContext: false}) {
     return unsupported("buildAssignment", offsetForToken(token), uri);
   }
 
@@ -379,26 +381,6 @@
   }
 }
 
-class KernelNonLValueGenerator extends KernelReadOnlyAccessGenerator {
-  KernelNonLValueGenerator(
-      ExpressionGeneratorHelper helper, Token token, Expression expression)
-      : super(helper, token, expression, null);
-
-  String get debugName => "KernelNonLValueGenerator";
-
-  @override
-  ComplexAssignmentJudgment startComplexAssignment(Expression rhs) {
-    return new IllegalAssignmentJudgment(rhs,
-        assignmentOffset: offsetForToken(token));
-  }
-
-  Expression makeInvalidWrite(Expression value) {
-    var error = helper.buildCompileTimeError(
-        messageNotAnLvalue, offsetForToken(token), lengthForToken(token));
-    return new InvalidWriteJudgment(error, expression);
-  }
-}
-
 class ParenthesizedExpressionGenerator extends KernelReadOnlyAccessGenerator {
   ParenthesizedExpressionGenerator(
       ExpressionGeneratorHelper helper, Token token, Expression expression)
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 516bb9b..e2b769e 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
@@ -85,9 +85,6 @@
     return field;
   }
 
-  @override
-  bool get hasTarget => true;
-
   Field get target => field;
 
   @override
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 3cf6839..5646641 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
@@ -33,9 +33,6 @@
       : super(metadata, modifiers, type, name, hasThis, compilationUnit,
             charOffset);
 
-  @override
-  bool get hasTarget => true;
-
   VariableDeclarationJudgment get target => declaration;
 
   VariableDeclarationJudgment build(SourceLibraryBuilder library) {
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 077758d..5e62f6b 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
@@ -35,7 +35,6 @@
 
 class KernelFunctionTypeAliasBuilder
     extends FunctionTypeAliasBuilder<KernelFunctionTypeBuilder, DartType> {
-  final bool hasTarget = true;
   final Typedef target;
 
   DartType thisType;
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
index 9a86218..2dbf686 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_function_type_builder.dart
@@ -17,8 +17,6 @@
 
 import '../problems.dart' show unsupported;
 
-import '../source/outline_listener.dart';
-
 import 'kernel_builder.dart'
     show
         FormalParameterBuilder,
@@ -32,12 +30,7 @@
 
 class KernelFunctionTypeBuilder extends FunctionTypeBuilder
     implements KernelTypeBuilder {
-  final OutlineListener outlineListener;
-  final int charOffset;
-
   KernelFunctionTypeBuilder(
-      this.outlineListener,
-      this.charOffset,
       KernelTypeBuilder returnType,
       List<TypeVariableBuilder> typeVariables,
       List<FormalParameterBuilder> formals)
@@ -71,12 +64,10 @@
         typeParameters.add(t.parameter);
       }
     }
-    var type = new FunctionType(positionalParameters, builtReturnType,
+    return new FunctionType(positionalParameters, builtReturnType,
         namedParameters: namedParameters ?? const <NamedType>[],
         typeParameters: typeParameters ?? const <TypeParameter>[],
         requiredParameterCount: requiredParameterCount);
-    outlineListener?.store(charOffset, false, type: type);
-    return type;
   }
 
   Supertype buildSupertype(
@@ -108,11 +99,7 @@
       clonedFormals[i] = formals[i].clone(newTypes);
     }
     KernelFunctionTypeBuilder newType = new KernelFunctionTypeBuilder(
-        outlineListener,
-        charOffset,
-        returnType.clone(newTypes),
-        clonedTypeVariables,
-        clonedFormals);
+        returnType.clone(newTypes), clonedTypeVariables, clonedFormals);
     newTypes.add(newType);
     return newType;
   }
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 d8d6de6..88a029a 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
@@ -158,9 +158,6 @@
   KernelLibraryBuilder get origin => actualOrigin ?? this;
 
   @override
-  bool get hasTarget => true;
-
-  @override
   Library get target => library;
 
   Uri get uri => library.importUri;
@@ -177,10 +174,7 @@
 
   KernelTypeBuilder addNamedType(
       Object name, List<KernelTypeBuilder> arguments, int charOffset) {
-    return addType(
-        new KernelNamedTypeBuilder(
-            outlineListener, charOffset, name, arguments),
-        charOffset);
+    return addType(new KernelNamedTypeBuilder(name, arguments), charOffset);
   }
 
   KernelTypeBuilder addMixinApplication(KernelTypeBuilder supertype,
@@ -206,9 +200,7 @@
       int startCharOffset,
       int charOffset,
       int charEndOffset,
-      int supertypeOffset,
-      int codeStartOffset,
-      int codeEndOffset) {
+      int supertypeOffset) {
     // Nested declaration began in `OutlineBuilder.beginClassDeclaration`.
     var declaration = endNestedDeclaration(className)
       ..resolveTypes(typeVariables, this);
@@ -242,8 +234,6 @@
         charEndOffset);
     loader.target.metadataCollector
         ?.setDocumentationComment(cls.target, documentationComment);
-    loader.target.metadataCollector
-        ?.setCodeStartEnd(cls.target, codeStartOffset, codeEndOffset);
 
     constructorReferences.clear();
     Map<String, TypeVariableBuilder> typeVariablesByName =
@@ -316,9 +306,7 @@
       String name,
       List<TypeVariableBuilder> typeVariables,
       int modifiers,
-      List<KernelTypeBuilder> interfaces,
-      int codeStartOffset,
-      int codeEndOffset}) {
+      List<KernelTypeBuilder> interfaces}) {
     if (name == null) {
       // The following parameters should only be used when building a named
       // mixin application.
@@ -498,8 +486,6 @@
         if (isNamedMixinApplication) {
           loader.target.metadataCollector?.setDocumentationComment(
               application.target, documentationComment);
-          loader.target.metadataCollector?.setCodeStartEnd(
-              application.target, codeStartOffset, codeEndOffset);
         }
         // TODO(ahe, kmillikin): Should always be true?
         // pkg/analyzer/test/src/summary/resynthesize_kernel_test.dart can't
@@ -523,9 +509,7 @@
       int modifiers,
       KernelTypeBuilder mixinApplication,
       List<KernelTypeBuilder> interfaces,
-      int charOffset,
-      int codeStartOffset,
-      int codeEndOffset) {
+      int charOffset) {
     // Nested declaration began in `OutlineBuilder.beginNamedMixinApplication`.
     endNestedDeclaration(name).resolveTypes(typeVariables, this);
     KernelNamedTypeBuilder supertype = applyMixins(
@@ -535,9 +519,7 @@
         name: name,
         typeVariables: typeVariables,
         modifiers: modifiers,
-        interfaces: interfaces,
-        codeStartOffset: codeStartOffset,
-        codeEndOffset: codeEndOffset);
+        interfaces: interfaces);
     checkTypeVariables(typeVariables, supertype.declaration);
   }
 
@@ -549,19 +531,13 @@
       KernelTypeBuilder type,
       String name,
       int charOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       Token initializerTokenForInference,
       bool hasInitializer) {
     var builder = new KernelFieldBuilder(metadata, type, name, modifiers, this,
         charOffset, initializerTokenForInference, hasInitializer);
     addBuilder(name, builder, charOffset);
-
-    var metadataCollector = loader.target.metadataCollector;
-    metadataCollector?.setDocumentationComment(
-        builder.target, documentationComment);
-    metadataCollector?.setCodeStartEnd(
-        builder.target, codeStartOffset, codeEndOffset);
+    loader.target.metadataCollector
+        ?.setDocumentationComment(builder.target, documentationComment);
   }
 
   void addConstructor(
@@ -577,8 +553,6 @@
       int charOffset,
       int charOpenParenOffset,
       int charEndOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       String nativeMethodName) {
     MetadataCollector metadataCollector = loader.target.metadataCollector;
     ProcedureBuilder procedure = new KernelConstructorBuilder(
@@ -597,8 +571,6 @@
     metadataCollector?.setDocumentationComment(
         procedure.target, documentationComment);
     metadataCollector?.setConstructorNameOffset(procedure.target, name);
-    metadataCollector?.setCodeStartEnd(
-        procedure.target, codeStartOffset, codeEndOffset);
     checkTypeVariables(typeVariables, procedure);
     addBuilder(constructorName, procedure, charOffset);
     if (nativeMethodName != null) {
@@ -620,8 +592,6 @@
       int charOpenParenOffset,
       int charEndOffset,
       String nativeMethodName,
-      int codeStartOffset,
-      int codeEndOffset,
       {bool isTopLevel}) {
     MetadataCollector metadataCollector = loader.target.metadataCollector;
     ProcedureBuilder procedure = new KernelProcedureBuilder(
@@ -640,8 +610,6 @@
         nativeMethodName);
     metadataCollector?.setDocumentationComment(
         procedure.target, documentationComment);
-    metadataCollector?.setCodeStartEnd(
-        procedure.target, codeStartOffset, codeEndOffset);
     checkTypeVariables(typeVariables, procedure);
     addBuilder(name, procedure, charOffset);
     if (nativeMethodName != null) {
@@ -660,8 +628,6 @@
       int charOffset,
       int charOpenParenOffset,
       int charEndOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       String nativeMethodName) {
     KernelTypeBuilder returnType = addNamedType(
         currentDeclaration.parent.name, <KernelTypeBuilder>[], charOffset);
@@ -720,8 +686,6 @@
     metadataCollector?.setDocumentationComment(
         procedure.target, documentationComment);
     metadataCollector?.setConstructorNameOffset(procedure.target, name);
-    metadataCollector?.setCodeStartEnd(
-        procedure.target, codeStartOffset, codeEndOffset);
 
     DeclarationBuilder<TypeBuilder> savedDeclaration = currentDeclaration;
     currentDeclaration = factoryDeclaration;
@@ -781,8 +745,8 @@
       List<TypeVariableBuilder> typeVariables,
       List<FormalParameterBuilder> formals,
       int charOffset) {
-    var builder = new KernelFunctionTypeBuilder(
-        outlineListener, charOffset, returnType, typeVariables, formals);
+    var builder =
+        new KernelFunctionTypeBuilder(returnType, typeVariables, formals);
     checkTypeVariables(typeVariables, null);
     // Nested declaration began in `OutlineBuilder.beginFunctionType` or
     // `OutlineBuilder.beginFunctionTypedFormalParameter`.
@@ -875,7 +839,6 @@
     // This is required for the DietListener to correctly match up metadata.
     int importIndex = 0;
     int exportIndex = 0;
-    MetadataCollector metadataCollector = loader.target.metadataCollector;
     while (importIndex < imports.length || exportIndex < exports.length) {
       if (exportIndex >= exports.length ||
           (importIndex < imports.length &&
@@ -890,18 +853,15 @@
           continue;
         }
 
-        LibraryDependency dependency;
         if (import.deferred && import.prefixBuilder?.dependency != null) {
-          dependency = import.prefixBuilder.dependency;
+          library.addDependency(import.prefixBuilder.dependency);
         } else {
-          dependency = new LibraryDependency.import(import.imported.target,
+          library.addDependency(new LibraryDependency.import(
+              import.imported.target,
               name: import.prefix,
               combinators: toKernelCombinators(import.combinators))
-            ..fileOffset = import.charOffset;
+            ..fileOffset = import.charOffset);
         }
-        library.addDependency(dependency);
-        metadataCollector?.setImportPrefixOffset(
-            dependency, import.prefixCharOffset);
       } else {
         // Add export
         Export export = exports[exportIndex++];
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 82b8297..4c3e69c 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
@@ -4,15 +4,13 @@
 
 library fasta.kernel_interface_type_builder;
 
-import 'package:kernel/ast.dart' show DartType, InvalidType, Supertype;
+import 'package:kernel/ast.dart' show DartType, Supertype;
 
 import '../fasta_codes.dart' show Message;
 
 import '../messages.dart'
     show noLength, templateSupertypeIsIllegal, templateSupertypeIsTypeVariable;
 
-import '../source/outline_listener.dart';
-
 import 'kernel_builder.dart'
     show
         KernelClassBuilder,
@@ -20,7 +18,6 @@
         KernelTypeBuilder,
         LibraryBuilder,
         NamedTypeBuilder,
-        QualifiedName,
         TypeBuilder,
         TypeDeclarationBuilder,
         TypeVariableBuilder;
@@ -28,11 +25,8 @@
 class KernelNamedTypeBuilder
     extends NamedTypeBuilder<KernelTypeBuilder, DartType>
     implements KernelTypeBuilder {
-  final int charOffset;
-
-  KernelNamedTypeBuilder(OutlineListener outlineListener, this.charOffset,
-      Object name, List<KernelTypeBuilder> arguments)
-      : super(outlineListener, name, arguments);
+  KernelNamedTypeBuilder(Object name, List<KernelTypeBuilder> arguments)
+      : super(name, arguments);
 
   KernelInvalidTypeBuilder buildInvalidType(int charOffset, Uri fileUri,
       [Message message]) {
@@ -52,28 +46,22 @@
   }
 
   DartType build(LibraryBuilder library) {
-    DartType type = declaration.buildType(library, arguments);
-    _storeType(library, type);
-    return type;
+    return declaration.buildType(library, arguments);
   }
 
   Supertype buildSupertype(
       LibraryBuilder library, int charOffset, Uri fileUri) {
     TypeDeclarationBuilder declaration = this.declaration;
     if (declaration is KernelClassBuilder) {
-      var supertype = declaration.buildSupertype(library, arguments);
-      _storeType(library, supertype.asInterfaceType);
-      return supertype;
+      return declaration.buildSupertype(library, arguments);
     } else if (declaration is KernelInvalidTypeBuilder) {
       library.addCompileTimeError(
           declaration.message.messageObject,
           declaration.message.charOffset,
           declaration.message.length,
           declaration.message.uri);
-      _storeType(library, const InvalidType());
       return null;
     } else {
-      _storeType(library, const InvalidType());
       return handleInvalidSupertype(library, charOffset, fileUri);
     }
   }
@@ -82,19 +70,15 @@
       LibraryBuilder library, int charOffset, Uri fileUri) {
     TypeDeclarationBuilder declaration = this.declaration;
     if (declaration is KernelClassBuilder) {
-      var supertype = declaration.buildMixedInType(library, arguments);
-      _storeType(library, supertype.asInterfaceType);
-      return supertype;
+      return declaration.buildMixedInType(library, arguments);
     } else if (declaration is KernelInvalidTypeBuilder) {
       library.addCompileTimeError(
           declaration.message.messageObject,
           declaration.message.charOffset,
           declaration.message.length,
           declaration.message.uri);
-      _storeType(library, const InvalidType());
       return null;
     } else {
-      _storeType(library, const InvalidType());
       return handleInvalidSupertype(library, charOffset, fileUri);
     }
   }
@@ -116,9 +100,7 @@
         i++;
       }
       if (arguments != null) {
-        return new KernelNamedTypeBuilder(
-            outlineListener, charOffset, name, arguments)
-          ..bind(declaration);
+        return new KernelNamedTypeBuilder(name, arguments)..bind(declaration);
       }
     }
     return this;
@@ -132,34 +114,9 @@
         clonedArguments[i] = arguments[i].clone(newTypes);
       }
     }
-    KernelNamedTypeBuilder newType = new KernelNamedTypeBuilder(
-        outlineListener, charOffset, name, clonedArguments);
+    KernelNamedTypeBuilder newType =
+        new KernelNamedTypeBuilder(name, clonedArguments);
     newTypes.add(newType);
     return newType;
   }
-
-  int get _storeOffset {
-    // TODO(scheglov) Can we always make charOffset the "suffix" offset?
-    var name = this.name;
-    return name is QualifiedName ? name.charOffset : charOffset;
-  }
-
-  void _storeType(LibraryBuilder library, DartType type) {
-    if (outlineListener != null) {
-      if (arguments != null && !this.declaration.buildsArguments) {
-        for (var argument in arguments) {
-          argument.build(library);
-        }
-      }
-      TypeDeclarationBuilder<KernelTypeBuilder, DartType> storeDeclaration;
-      if (actualDeclaration != null) {
-        storeDeclaration = actualDeclaration;
-        type = storeDeclaration.buildType(library, null);
-      } else {
-        storeDeclaration = declaration;
-      }
-      var target = storeDeclaration.hasTarget ? storeDeclaration.target : null;
-      outlineListener.store(_storeOffset, false, reference: target, type: type);
-    }
-  }
 }
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 06b3f80..c9fd115 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
@@ -485,9 +485,6 @@
     return super.buildFunction(library)..returnType = const VoidType();
   }
 
-  @override
-  bool get hasTarget => true;
-
   Constructor get target => origin.constructor;
 
   void injectInvalidInitializer(
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
index c6ab5e4..8bf8245 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_shadow_ast.dart
@@ -178,22 +178,16 @@
 
 /// Concrete shadow object representing a set of invocation arguments.
 class ArgumentsJudgment extends Arguments {
-  /// The end offset of the closing `)`.
-  final int fileEndOffset;
-
   bool _hasExplicitTypeArguments;
 
   List<ExpressionJudgment> get positionalJudgments => positional.cast();
 
   List<NamedExpressionJudgment> get namedJudgments => named.cast();
 
-  ArgumentsJudgment(
-      int fileOffset, this.fileEndOffset, List<Expression> positional,
+  ArgumentsJudgment(List<Expression> positional,
       {List<DartType> types, List<NamedExpression> named})
       : _hasExplicitTypeArguments = types != null && types.isNotEmpty,
-        super(positional, types: types, named: named) {
-    this.fileOffset = fileOffset;
-  }
+        super(positional, types: types, named: named);
 
   static void setNonInferrableArgumentTypes(
       ArgumentsJudgment arguments, List<DartType> types) {
@@ -211,12 +205,10 @@
 /// Shadow object for [AsExpression].
 class AsJudgment extends AsExpression implements ExpressionJudgment {
   final AsExpressionTokens tokens;
-  final Expression desugaredError;
 
   DartType inferredType;
 
-  AsJudgment(Expression operand, this.tokens, DartType type,
-      {this.desugaredError})
+  AsJudgment(Expression operand, this.tokens, DartType type)
       : super(operand, type);
 
   ExpressionJudgment get judgment => operand;
@@ -229,10 +221,6 @@
     inferredType = type;
     inferrer.listener
         .asExpression(this, fileOffset, null, tokens, null, inferredType);
-    if (desugaredError != null) {
-      parent.replaceChild(this, desugaredError);
-      parent = null;
-    }
     return null;
   }
 }
@@ -561,8 +549,7 @@
   /// pre-decrement.
   bool isPreIncDec = false;
 
-  ComplexAssignmentJudgment(this.rhs, {Expression desugared})
-      : super(desugared);
+  ComplexAssignmentJudgment(this.rhs) : super(null);
 
   String toString() {
     var parts = _getToStringParts();
@@ -1004,7 +991,7 @@
   @override
   InferenceNode inferenceNode;
 
-  ShadowTypeInferrer typeInferrer;
+  ShadowTypeInferrer _typeInferrer;
 
   final bool _isImplicitlyTyped;
 
@@ -1491,9 +1478,8 @@
   /// If `-1`, then there is no separate location for invalid assignment.
   final int assignmentOffset;
 
-  IllegalAssignmentJudgment(ExpressionJudgment rhs,
-      {this.assignmentOffset: -1, Expression desugared})
-      : super(rhs, desugared: desugared) {
+  IllegalAssignmentJudgment(ExpressionJudgment rhs, {this.assignmentOffset: -1})
+      : super(rhs) {
     rhs.parent = this;
   }
 
@@ -1605,8 +1591,8 @@
       _storeLetType(inferrer, replacedRead, readType);
     }
     var inferredResult = _inferRhs(inferrer, readType, writeContext);
-    inferrer.listener.indexAssign(this, write.fileOffset, receiverType,
-        writeMember, inferredResult.combiner, inferredType);
+    inferrer.listener.indexAssign(this, write.fileOffset, writeMember,
+        inferredResult.combiner, inferredType);
     _replaceWithDesugared();
     return null;
   }
@@ -1624,27 +1610,16 @@
 /// Concrete shadow object representing an integer literal in kernel form.
 class IntJudgment extends IntLiteral implements ExpressionJudgment {
   IntLiteralTokens tokens;
-  final kernel.Expression desugaredError;
-  final bool isSynthetic;
 
   DartType inferredType;
 
-  IntJudgment(this.tokens, int value,
-      {this.desugaredError, this.isSynthetic: false})
-      : super(value);
+  IntJudgment(this.tokens, int value) : super(value);
 
   @override
   Expression infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer, DartType typeContext) {
     inferredType = inferrer.coreTypes.intClass.rawType;
-    if (!isSynthetic) {
-      inferrer.listener
-          .intLiteral(this, fileOffset, tokens, value, inferredType);
-    }
-    if (desugaredError != null) {
-      parent.replaceChild(this, desugaredError);
-      parent = null;
-    }
+    inferrer.listener.intLiteral(this, fileOffset, tokens, value, inferredType);
     return null;
   }
 }
@@ -1665,7 +1640,7 @@
 /// Concrete shadow object representing an invalid initializer in kernel form.
 class ShadowInvalidFieldInitializer extends LocalInitializer
     implements InitializerJudgment {
-  final Node field;
+  final Field field;
   final Expression value;
 
   ShadowInvalidFieldInitializer(
@@ -1679,9 +1654,7 @@
   @override
   void infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer) {
-    var field = this.field;
-    var typeContext = field is Field ? field.type : const UnknownType();
-    inferrer.inferExpression(value, typeContext, false);
+    inferrer.inferExpression(value, field.type, false);
     inferrer.listener.fieldInitializer(
         this, fileOffset, null, null, null, null, null, field);
   }
@@ -2240,11 +2213,10 @@
   /// If this assignment uses null-aware access (`?.`), the conditional
   /// expression that guards the access; otherwise `null`.
   ConditionalExpression nullAwareGuard;
-  final bool isSyntheticLhs;
 
   PropertyAssignmentJudgment(
       ExpressionJudgment receiver, ExpressionJudgment rhs,
-      {bool isSuper: false, this.isSyntheticLhs: false})
+      {bool isSuper: false})
       : super(receiver, rhs, isSuper);
 
   @override
@@ -2294,8 +2266,6 @@
     inferrer.listener.propertyAssign(
         this,
         write.fileOffset,
-        isSyntheticLhs,
-        receiverType,
         inferrer.getRealTarget(writeMember),
         writeContext,
         inferredResult.combiner,
@@ -2804,7 +2774,7 @@
   @override
   Expression infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer, DartType typeContext) {
-    inferrer.listener.variableAssign(this, fileOffset, false, _variable.type,
+    inferrer.listener.variableAssign(this, fileOffset, _variable.type,
         _variable.createBinder(inferrer), null, _variable.type);
     return super.infer(inferrer, typeContext);
   }
@@ -2844,7 +2814,7 @@
       ShadowTypeInferrer inferrer, DartType typeContext) {
     var inferredType = member?.getterType ?? const DynamicType();
     inferrer.listener
-        .propertyGet(this, fileOffset, false, null, member, inferredType);
+        .propertyGet(this, fileOffset, false, member, inferredType);
     return super.infer(inferrer, typeContext);
   }
 }
@@ -2855,13 +2825,9 @@
 /// These expressions are removed by type inference and replaced with their
 /// desugared equivalents.
 class SyntheticExpressionJudgment extends Let implements ExpressionJudgment {
-  /// The original expression that is wrapped by this synthetic expression.
-  /// Its type will be inferred.
-  final Expression original;
-
   DartType inferredType;
 
-  SyntheticExpressionJudgment(Expression desugared, {this.original})
+  SyntheticExpressionJudgment(Expression desugared)
       : super(new VariableDeclaration('_', initializer: new NullLiteral()),
             desugared);
 
@@ -2876,9 +2842,6 @@
   @override
   Expression infer<Expression, Statement, Initializer, Type>(
       ShadowTypeInferrer inferrer, DartType typeContext) {
-    if (original != null) {
-      inferrer.inferExpression(original, typeContext, true);
-    }
     _replaceWithDesugared();
     inferredType = const DynamicType();
     return null;
@@ -3090,13 +3053,13 @@
       TypeInferenceListener<int, Node, int> listener,
       InterfaceType thisType,
       ShadowField field) {
-    return field.typeInferrer = new ShadowTypeInferrer._(
+    return field._typeInferrer = new ShadowTypeInferrer._(
         this, field.fileUri, listener, true, thisType, null);
   }
 
   @override
   ShadowTypeInferrer getFieldTypeInferrer(ShadowField field) {
-    return field.typeInferrer;
+    return field._typeInferrer;
   }
 }
 
@@ -3324,7 +3287,6 @@
     inferrer.listener.variableAssign(
         this,
         write.fileOffset,
-        false,
         writeContext,
         write is VariableSet
             ? (write.variable as VariableDeclarationJudgment)
@@ -3508,10 +3470,9 @@
 class UnresolvedVariableAssignmentJudgment extends SyntheticExpressionJudgment {
   final bool isCompound;
   final ExpressionJudgment rhs;
-  final bool isSyntheticLhs;
 
-  UnresolvedVariableAssignmentJudgment(kernel.Expression desugared,
-      this.isCompound, this.rhs, this.isSyntheticLhs)
+  UnresolvedVariableAssignmentJudgment(
+      kernel.Expression desugared, this.isCompound, this.rhs)
       : super(desugared);
 
   @override
@@ -3519,8 +3480,8 @@
       ShadowTypeInferrer inferrer, DartType typeContext) {
     inferrer.inferExpression(rhs, const UnknownType(), true);
     inferredType = isCompound ? const DynamicType() : rhs.inferredType;
-    inferrer.listener.variableAssign(this, fileOffset, isSyntheticLhs,
-        const DynamicType(), null, null, inferredType);
+    inferrer.listener.variableAssign(
+        this, fileOffset, const DynamicType(), null, null, inferredType);
     return super.infer(inferrer, typeContext);
   }
 }
@@ -3541,7 +3502,7 @@
     inferrer.listener.variableGet(
         this, offset, isSynthetic, false, null, const DynamicType());
     inferrer.listener.variableAssign(
-        this, fileOffset, false, const DynamicType(), null, null, inferredType);
+        this, fileOffset, const DynamicType(), null, null, inferredType);
     return super.infer(inferrer, typeContext);
   }
 }
@@ -3734,17 +3695,10 @@
 
 /// Concrete shadow object representing a named expression.
 class NamedExpressionJudgment extends NamedExpression {
-  final NamedExpressionTokens tokens;
+  NamedExpressionTokens tokens;
 
-  /// The original value that is wrapped by this synthetic named argument.
-  /// Its type will be inferred.
-  final Expression originalValue;
-
-  NamedExpressionJudgment(this.tokens, String nameLexeme, Expression value,
-      {this.originalValue})
-      : super(nameLexeme, value) {
-    originalValue?.parent = this;
-  }
+  NamedExpressionJudgment(this.tokens, String nameLexeme, Expression value)
+      : super(nameLexeme, value);
 
   ExpressionJudgment get judgment => value;
 }
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 0715e41..35f6e2a 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -119,14 +119,12 @@
 
   final List<LocatedMessage> errors = <LocatedMessage>[];
 
-  final TypeBuilder dynamicType =
-      new KernelNamedTypeBuilder(null, -1, "dynamic", null);
+  final TypeBuilder dynamicType = new KernelNamedTypeBuilder("dynamic", null);
 
   final NamedTypeBuilder objectType =
-      new KernelNamedTypeBuilder(null, -1, "Object", null);
+      new KernelNamedTypeBuilder("Object", null);
 
-  final TypeBuilder bottomType =
-      new KernelNamedTypeBuilder(null, -1, "Null", null);
+  final TypeBuilder bottomType = new KernelNamedTypeBuilder("Null", null);
 
   bool get strongMode => backendTarget.strongMode;
 
@@ -219,7 +217,7 @@
     cls.implementedTypes.clear();
     cls.supertype = null;
     cls.mixedInType = null;
-    builder.supertype = new KernelNamedTypeBuilder(null, -1, "Object", null)
+    builder.supertype = new KernelNamedTypeBuilder("Object", null)
       ..bind(objectClassBuilder);
     builder.interfaces = null;
     builder.mixedInType = null;
@@ -435,7 +433,7 @@
               if (cls != objectClass) {
                 cls.supertype ??= objectClass.asRawSupertype;
                 declaration.supertype ??=
-                    new KernelNamedTypeBuilder(null, -1, "Object", null)
+                    new KernelNamedTypeBuilder("Object", null)
                       ..bind(objectClassBuilder);
               }
               if (declaration.isMixinApplication) {
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 41a0d14..017c9fc 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
@@ -11,8 +11,6 @@
 
 import '../fasta_codes.dart' show templateTypeArgumentsOnTypeVariable;
 
-import '../source/outline_listener.dart';
-
 import 'kernel_builder.dart'
     show
         KernelClassBuilder,
@@ -25,7 +23,6 @@
 
 class KernelTypeVariableBuilder
     extends TypeVariableBuilder<KernelTypeBuilder, DartType> {
-  final OutlineListener outlineListener;
   final TypeParameter actualParameter;
 
   KernelTypeVariableBuilder actualOrigin;
@@ -37,16 +34,14 @@
       [KernelTypeBuilder bound, TypeParameter actual])
       // TODO(32378): We would like to use '??' here instead, but in conjuction
       // with '..', it crashes Dart2JS.
-      : outlineListener = compilationUnit?.outlineListener,
-        actualParameter = actual != null
+      : actualParameter = actual != null
             ? (actual..fileOffset = charOffset)
             : (new TypeParameter(name, null)..fileOffset = charOffset),
         super(name, bound, compilationUnit, charOffset);
 
   KernelTypeVariableBuilder.fromKernel(
       TypeParameter parameter, KernelLibraryBuilder compilationUnit)
-      : outlineListener = null,
-        actualParameter = parameter,
+      : actualParameter = parameter,
         super(parameter.name, null, compilationUnit, parameter.fileOffset);
 
   @override
@@ -54,9 +49,6 @@
 
   TypeParameter get parameter => origin.actualParameter;
 
-  @override
-  bool get hasTarget => true;
-
   TypeParameter get target => parameter;
 
   DartType buildType(
@@ -84,8 +76,7 @@
   }
 
   KernelTypeBuilder asTypeBuilder() {
-    return new KernelNamedTypeBuilder(outlineListener, charOffset, name, null)
-      ..bind(this);
+    return new KernelNamedTypeBuilder(name, null)..bind(this);
   }
 
   void finish(LibraryBuilder library, KernelClassBuilder object,
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_variable_builder.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_variable_builder.dart
index 5936507..fb688d1 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_variable_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_variable_builder.dart
@@ -28,9 +28,6 @@
 
   bool get isFinal => variable.isFinal;
 
-  @override
-  bool get hasTarget => true;
-
   VariableDeclaration get target => variable;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/kernel/metadata_collector.dart b/pkg/front_end/lib/src/fasta/kernel/metadata_collector.dart
index e56e209..6a15522 100644
--- a/pkg/front_end/lib/src/fasta/kernel/metadata_collector.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/metadata_collector.dart
@@ -2,8 +2,7 @@
 // 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 'package:kernel/kernel.dart'
-    show LibraryDependency, Member, MetadataRepository, NamedNode, TreeNode;
+import 'package:kernel/kernel.dart' show Member, MetadataRepository, NamedNode;
 
 /// The collector to add target specific metadata to.
 abstract class MetadataCollector {
@@ -11,11 +10,7 @@
   /// to a component, metadata is serialized with the component.
   MetadataRepository get repository;
 
-  void setCodeStartEnd(TreeNode node, int start, int end);
-
   void setConstructorNameOffset(Member node, Object name);
 
   void setDocumentationComment(NamedNode node, String comment);
-
-  void setImportPrefixOffset(LibraryDependency node, int offset);
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
index 13409e2..a45b739 100644
--- a/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/type_algorithms.dart
@@ -64,8 +64,7 @@
       }
     }
     if (arguments != null) {
-      return new KernelNamedTypeBuilder(
-          type.outlineListener, type.charOffset, type.name, arguments)
+      return new KernelNamedTypeBuilder(type.name, arguments)
         ..bind(type.declaration);
     }
     return type;
@@ -130,8 +129,7 @@
     }
 
     if (changed) {
-      return new KernelFunctionTypeBuilder(type.outlineListener,
-          type.charOffset, returnType, variables, formals);
+      return new KernelFunctionTypeBuilder(returnType, variables, formals);
     }
 
     return type;
diff --git a/pkg/front_end/lib/src/fasta/loader.dart b/pkg/front_end/lib/src/fasta/loader.dart
index e37afdc..9c6044c 100644
--- a/pkg/front_end/lib/src/fasta/loader.dart
+++ b/pkg/front_end/lib/src/fasta/loader.dart
@@ -26,12 +26,10 @@
 
 import 'problems.dart' show internalProblem;
 
-import 'rewrite_severity.dart' as rewrite_severity;
+import 'rewrite_severity.dart' show rewriteSeverity;
 
 import 'severity.dart' show Severity;
 
-import 'source/outline_listener.dart';
-
 import 'target_implementation.dart' show TargetImplementation;
 
 import 'ticker.dart' show Ticker;
@@ -181,8 +179,6 @@
     logSummary(outlineSummaryTemplate);
   }
 
-  OutlineListener createOutlineListener(Uri fileUri) => null;
-
   void logSummary(Template<SummaryTemplate> template) {
     ticker.log((Duration elapsed, Duration sinceStart) {
       int libraryCount = 0;
@@ -243,7 +239,7 @@
   bool addMessage(Message message, int charOffset, int length, Uri fileUri,
       Severity severity,
       {bool wasHandled: false, List<LocatedMessage> context}) {
-    severity = rewriteSeverity(severity, message, fileUri);
+    severity = rewriteSeverity(severity, message.code, fileUri);
     if (severity == Severity.ignored) return false;
     String trace = """
 message: ${message.message}
@@ -271,10 +267,6 @@
     return true;
   }
 
-  Severity rewriteSeverity(Severity severity, Message message, Uri fileUri) {
-    return rewrite_severity.rewriteSeverity(severity, message.code, fileUri);
-  }
-
   Declaration getAbstractClassInstantiationError() {
     return target.getAbstractClassInstantiationError(this);
   }
diff --git a/pkg/front_end/lib/src/fasta/parser.dart b/pkg/front_end/lib/src/fasta/parser.dart
index e5349ff..54082f1 100644
--- a/pkg/front_end/lib/src/fasta/parser.dart
+++ b/pkg/front_end/lib/src/fasta/parser.dart
@@ -33,12 +33,7 @@
 export 'parser/top_level_parser.dart' show TopLevelParser;
 
 export 'parser/util.dart'
-    show
-        endOffsetForToken,
-        lengthForToken,
-        lengthOfSpan,
-        offsetForToken,
-        optional;
+    show lengthForToken, lengthOfSpan, offsetForToken, optional;
 
 class ErrorCollectingListener extends Listener {
   final List<ParserError> recoverableErrors = <ParserError>[];
diff --git a/pkg/front_end/lib/src/fasta/parser/identifier_context.dart b/pkg/front_end/lib/src/fasta/parser/identifier_context.dart
index 83d9acd..460fec9 100644
--- a/pkg/front_end/lib/src/fasta/parser/identifier_context.dart
+++ b/pkg/front_end/lib/src/fasta/parser/identifier_context.dart
@@ -240,9 +240,6 @@
   /// expressions are required.
   final bool allowedInConstantExpression;
 
-  /// Indicated whether the `isSynthetic` flag is required for the identifier.
-  final bool requiresSyntheticFlag;
-
   final Template<_MessageWithArgument<Token>> recoveryTemplate;
 
   const IdentifierContext(this._name,
@@ -252,7 +249,6 @@
       this.isContinuation: false,
       this.isScopeReference: false,
       this.isBuiltInIdentifierAllowed: true,
-      this.requiresSyntheticFlag: false,
       bool allowedInConstantExpression,
       this.recoveryTemplate: templateExpectedIdentifier})
       : this.allowedInConstantExpression =
diff --git a/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart b/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart
index 078f2d6..9814c3b 100644
--- a/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart
+++ b/pkg/front_end/lib/src/fasta/parser/identifier_context_impl.dart
@@ -81,8 +81,7 @@
 
 /// See [IdentifierContext.combinator].
 class CombinatorIdentifierContext extends IdentifierContext {
-  const CombinatorIdentifierContext()
-      : super('combinator', requiresSyntheticFlag: true);
+  const CombinatorIdentifierContext() : super('combinator');
 
   @override
   Token ensureIdentifier(Token token, Parser parser) {
@@ -155,12 +154,10 @@
 
 /// See [IdentifierContext.dottedName].
 class DottedNameIdentifierContext extends IdentifierContext {
-  const DottedNameIdentifierContext()
-      : super('dottedName', requiresSyntheticFlag: true);
+  const DottedNameIdentifierContext() : super('dottedName');
 
   const DottedNameIdentifierContext.continuation()
-      : super('dottedNameContinuation',
-            isContinuation: true, requiresSyntheticFlag: true);
+      : super('dottedNameContinuation', isContinuation: true);
 
   @override
   Token ensureIdentifier(Token token, Parser parser) {
diff --git a/pkg/front_end/lib/src/fasta/parser/util.dart b/pkg/front_end/lib/src/fasta/parser/util.dart
index f617749..50937cb6 100644
--- a/pkg/front_end/lib/src/fasta/parser/util.dart
+++ b/pkg/front_end/lib/src/fasta/parser/util.dart
@@ -63,12 +63,6 @@
   return token == null ? TreeNode.noOffset : token.offset;
 }
 
-/// A null-aware alternative to `token.end`.  If [token] is `null`, returns
-/// `TreeNode.noOffset`.
-int endOffsetForToken(Token token) {
-  return token == null ? TreeNode.noOffset : token.end;
-}
-
 bool isDigit(int c) => c >= 0x30 && c <= 0x39;
 
 bool isLetter(int c) => c >= 0x41 && c <= 0x5A || c >= 0x61 && c <= 0x7A;
diff --git a/pkg/front_end/lib/src/fasta/source/diet_listener.dart b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
index f4159f2..fcab286 100644
--- a/pkg/front_end/lib/src/fasta/source/diet_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/diet_listener.dart
@@ -76,11 +76,6 @@
   int importExportDirectiveIndex = 0;
   int partDirectiveIndex = 0;
 
-  /// The unit currently being parsed, might be the same as [library] when
-  /// the defining unit of the library is being parsed, updated from outside
-  /// before parsing each part.
-  SourceLibraryBuilder currentUnit;
-
   ClassBuilder currentClass;
 
   /// For top-level declarations, this is the library scope. For class members,
@@ -126,8 +121,7 @@
       Token partKeyword, Token ofKeyword, Token semicolon, bool hasName) {
     debugEvent("PartOf");
     if (hasName) discard(1);
-    Token metadata = pop();
-    parseMetadata(currentUnit, metadata, currentUnit.target);
+    discard(1); // Metadata.
   }
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 1bf6d19..f094ef3 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -4,8 +4,6 @@
 
 library fasta.outline_builder;
 
-import 'dart:math' show min;
-
 import 'package:kernel/ast.dart' show ProcedureKind;
 
 import '../../scanner/token.dart' show Token;
@@ -14,7 +12,7 @@
 
 import '../builder/metadata_builder.dart' show ExpressionMetadataBuilder;
 
-import '../combinator.dart' show Combinator, CombinatorIdentifier;
+import '../combinator.dart' show Combinator;
 
 import '../fasta_codes.dart'
     show
@@ -114,14 +112,12 @@
 
   int popCharOffset() => pop();
 
-  List<CombinatorIdentifier> popIdentifierList(int count) {
+  List<String> popIdentifierList(int count) {
     if (count == 0) return null;
-    var list = new List<CombinatorIdentifier>.filled(count, null);
+    List<String> list = new List<String>.filled(count, null, growable: true);
     for (int i = count - 1; i >= 0; i--) {
-      bool isSynthetic = pop();
-      int offset = popCharOffset();
-      String name = pop();
-      list[i] = new CombinatorIdentifier(offset, name, isSynthetic);
+      popCharOffset();
+      list[i] = pop();
     }
     return list;
   }
@@ -151,50 +147,33 @@
   }
 
   @override
-  void beginMetadataStar(Token token) {
-    push(token);
-  }
-
-  @override
   void endMetadataStar(int count) {
     debugEvent("MetadataStar");
-    if (count == 0) {
-      pop();
-      push(NullValue.MetadataToken);
-      push(NullValue.Metadata);
-    } else {
-      push(popList(
-          count,
-          new List<ExpressionMetadataBuilder<TypeBuilder>>.filled(count, null,
-              growable: true)));
-    }
+    push(popList(
+            count,
+            new List<ExpressionMetadataBuilder<TypeBuilder>>.filled(count, null,
+                growable: true)) ??
+        NullValue.Metadata);
   }
 
   @override
   void handleInvalidTopLevelDeclaration(Token endToken) {
     debugEvent("InvalidTopLevelDeclaration");
     pop(); // metadata star
-    pop(); // metadataToken
   }
 
   @override
   void endHide(Token hideKeyword) {
     debugEvent("Hide");
-    List<CombinatorIdentifier> identifiers = pop();
-    List<String> names =
-        identifiers.map((identifier) => identifier.name).toList();
-    push(new Combinator.hide(
-        identifiers, names, hideKeyword.charOffset, library.fileUri));
+    List<String> names = pop();
+    push(new Combinator.hide(names, hideKeyword.charOffset, library.fileUri));
   }
 
   @override
   void endShow(Token showKeyword) {
     debugEvent("Show");
-    List<CombinatorIdentifier> identifiers = pop();
-    List<String> names =
-        identifiers.map((identifier) => identifier.name).toList();
-    push(new Combinator.show(
-        identifiers, names, showKeyword.charOffset, library.fileUri));
+    List<String> names = pop();
+    push(new Combinator.show(names, showKeyword.charOffset, library.fileUri));
   }
 
   @override
@@ -213,7 +192,6 @@
     int uriOffset = popCharOffset();
     String uri = pop();
     List<MetadataBuilder> metadata = pop();
-    pop(); // metadataToken
     library.addExport(metadata, uri, configurations, combinators,
         exportKeyword.charOffset, uriOffset);
     checkEmpty(exportKeyword.charOffset);
@@ -242,7 +220,6 @@
     int uriOffset = popCharOffset();
     String uri = pop(); // For a conditional import, this is the default URI.
     List<MetadataBuilder> metadata = pop();
-    pop(); // metadataToken
     library.addImport(
         metadata,
         uri,
@@ -279,9 +256,7 @@
   @override
   void handleDottedName(int count, Token firstIdentifier) {
     debugEvent("DottedName");
-    push(popIdentifierList(count)
-        .map((identifier) => identifier.name)
-        .join('.'));
+    push(popIdentifierList(count).join('.'));
   }
 
   @override
@@ -300,7 +275,6 @@
     int charOffset = popCharOffset();
     String uri = pop();
     List<MetadataBuilder> metadata = pop();
-    pop(); // metadataToken
     library.addPart(metadata, uri, charOffset);
     checkEmpty(partKeyword.charOffset);
   }
@@ -324,15 +298,12 @@
     if (context == IdentifierContext.enumValueDeclaration) {
       super.handleIdentifier(token, context);
       push(token.charOffset);
-      var docComment = documentationCommentBefore(token);
-      push(docComment?.text ?? NullValue.DocumentationComment);
+      String documentationComment = getDocumentationComment(token);
+      push(documentationComment ?? NullValue.DocumentationComment);
     } else {
       super.handleIdentifier(token, context);
       push(token.charOffset);
     }
-    if (context.requiresSyntheticFlag) {
-      push(token.isSynthetic);
-    }
     if (inConstructor && context == IdentifierContext.methodDeclaration) {
       inConstructorName = true;
     }
@@ -415,11 +386,10 @@
   void endLibraryName(Token libraryKeyword, Token semicolon) {
     debugEvent("endLibraryName");
     popCharOffset();
+    String documentationComment = getDocumentationComment(libraryKeyword);
     Object name = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(libraryKeyword, metadataToken);
-    library.documentationComment = docComment?.text;
+    library.documentationComment = documentationComment;
     library.name = "${name}";
     library.metadata = metadata;
   }
@@ -483,6 +453,7 @@
   @override
   void endClassDeclaration(Token beginToken, Token endToken) {
     debugEvent("endClassDeclaration");
+    String documentationComment = getDocumentationComment(beginToken);
     List<TypeBuilder> interfaces = pop(NullValue.TypeBuilderList);
     int supertypeOffset = pop();
     TypeBuilder supertype = pop();
@@ -494,18 +465,12 @@
       supertype.typeVariables = typeVariables;
     }
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
 
     final int startCharOffset =
         metadata == null ? beginToken.charOffset : metadata.first.charOffset;
 
-    int codeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    int codeEndOffset = endToken.end;
-
     library.addClass(
-        docComment?.text,
+        documentationComment,
         metadata,
         modifiers,
         name,
@@ -515,9 +480,7 @@
         startCharOffset,
         charOffset,
         endToken.charOffset,
-        supertypeOffset,
-        codeStartOffset,
-        codeEndOffset);
+        supertypeOffset);
     checkEmpty(beginToken.charOffset);
   }
 
@@ -558,21 +521,15 @@
       modifiers |= abstractMask;
     }
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
+    String documentationComment = getDocumentationComment(beginToken);
     checkEmpty(beginToken.charOffset);
     library
         .endNestedDeclaration("#method")
         .resolveTypes(typeVariables, library);
     final int startCharOffset =
         metadata == null ? beginToken.charOffset : metadata.first.charOffset;
-
-    int codeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    int codeEndOffset = endToken.end;
-
     library.addProcedure(
-        docComment?.text,
+        documentationComment,
         metadata,
         modifiers,
         returnType,
@@ -585,8 +542,6 @@
         formalsOffset,
         endToken.charOffset,
         nativeMethodName,
-        codeStartOffset,
-        codeEndOffset,
         isTopLevel: true);
     nativeMethodName = null;
   }
@@ -744,8 +699,7 @@
     bool isConst = (modifiers & constMask) != 0;
     int varFinalOrConstOffset = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
+    String documentationComment = getDocumentationComment(beginToken);
     library
         .endNestedDeclaration("#method")
         .resolveTypes(typeVariables, library);
@@ -767,13 +721,8 @@
       }
       final int startCharOffset =
           metadata == null ? beginToken.charOffset : metadata.first.charOffset;
-
-      int codeStartOffset =
-          _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-      int codeEndOffset = endToken.end;
-
       library.addConstructor(
-          docComment?.text,
+          documentationComment,
           metadata,
           modifiers,
           returnType,
@@ -785,8 +734,6 @@
           charOffset,
           formalsOffset,
           endToken.charOffset,
-          codeStartOffset,
-          codeEndOffset,
           nativeMethodName);
     } else {
       if (isConst) {
@@ -795,13 +742,8 @@
       }
       final int startCharOffset =
           metadata == null ? beginToken.charOffset : metadata.first.charOffset;
-
-      int codeStartOffset =
-          _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-      int codeEndOffset = endToken.end;
-
       library.addProcedure(
-          docComment?.text,
+          documentationComment,
           metadata,
           modifiers,
           returnType,
@@ -814,8 +756,6 @@
           formalsOffset,
           endToken.charOffset,
           nativeMethodName,
-          codeStartOffset,
-          codeEndOffset,
           isTopLevel: false);
     }
     nativeMethodName = null;
@@ -835,6 +775,7 @@
   void endNamedMixinApplication(Token beginToken, Token classKeyword,
       Token equals, Token implementsKeyword, Token endToken) {
     debugEvent("endNamedMixinApplication");
+    String documentationComment = getDocumentationComment(beginToken);
     List<TypeBuilder> interfaces = popIfNotNull(implementsKeyword);
     TypeBuilder mixinApplication = pop();
     int modifiers = pop();
@@ -842,24 +783,8 @@
     int charOffset = pop();
     String name = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
-
-    int codeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    int codeEndOffset = endToken.end;
-
-    library.addNamedMixinApplication(
-        docComment?.text,
-        metadata,
-        name,
-        typeVariables,
-        modifiers,
-        mixinApplication,
-        interfaces,
-        charOffset,
-        codeStartOffset,
-        codeEndOffset);
+    library.addNamedMixinApplication(documentationComment, metadata, name,
+        typeVariables, modifiers, mixinApplication, interfaces, charOffset);
     checkEmpty(beginToken.charOffset);
   }
 
@@ -923,7 +848,6 @@
     TypeBuilder type = pop();
     int modifiers = pop();
     List<MetadataBuilder> metadata = pop();
-    pop(); // metadataToken
     push(library.addFormalParameter(
         metadata, modifiers, type, name, thisKeyword != null, charOffset));
   }
@@ -1054,15 +978,14 @@
 
   @override
   void endEnum(Token enumKeyword, Token leftBrace, int count) {
+    String documentationComment = getDocumentationComment(enumKeyword);
     List<Object> constantNamesAndOffsets = popList(
-        count * 5, new List<Object>.filled(count * 5, null, growable: true));
+        count * 4, new List<Object>.filled(count * 4, null, growable: true));
     int charOffset = pop();
     String name = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(enumKeyword, metadataToken);
-    library.addEnum(docComment?.text, metadata, name, constantNamesAndOffsets,
-        charOffset, leftBrace?.endGroup?.charOffset);
+    library.addEnum(documentationComment, metadata, name,
+        constantNamesAndOffsets, charOffset, leftBrace?.endGroup?.charOffset);
     checkEmpty(enumKeyword.charOffset);
   }
 
@@ -1109,6 +1032,7 @@
   void endFunctionTypeAlias(
       Token typedefKeyword, Token equals, Token endToken) {
     debugEvent("endFunctionTypeAlias");
+    String documentationComment = getDocumentationComment(typedefKeyword);
     List<TypeVariableBuilder> typeVariables;
     String name;
     int charOffset;
@@ -1144,9 +1068,7 @@
       }
     }
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(typedefKeyword, metadataToken);
-    library.addFunctionTypeAlias(docComment?.text, metadata, name,
+    library.addFunctionTypeAlias(documentationComment, metadata, name,
         typeVariables, functionType, charOffset);
     checkEmpty(typedefKeyword.charOffset);
   }
@@ -1162,12 +1084,9 @@
         (covariantToken != null ? covariantMask : 0) |
         Modifier.validateVarFinalOrConst(varFinalOrConst?.lexeme);
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
-    int firstFieldCodeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    library.addFields(docComment?.text, metadata, modifiers, type, fieldsInfo,
-        firstFieldCodeStartOffset);
+    String documentationComment = getDocumentationComment(beginToken);
+    library.addFields(
+        documentationComment, metadata, modifiers, type, fieldsInfo);
     checkEmpty(beginToken.charOffset);
   }
 
@@ -1189,12 +1108,9 @@
       modifiers &= ~constMask;
     }
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
-    int firstFieldCodeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    library.addFields(docComment?.text, metadata, modifiers, type, fieldsInfo,
-        firstFieldCodeStartOffset);
+    String documentationComment = getDocumentationComment(beginToken);
+    library.addFields(
+        documentationComment, metadata, modifiers, type, fieldsInfo);
   }
 
   @override
@@ -1205,7 +1121,6 @@
     // TODO(paulberry): type variable metadata should not be ignored.  See
     // dartbug.com/28981.
     /* List<MetadataBuilder> metadata = */ pop();
-    pop(); // metadataToken
 
     push(library.addTypeVariable(name, null, charOffset));
   }
@@ -1245,7 +1160,6 @@
     int charOffset = popCharOffset();
     Object containingLibrary = pop();
     List<MetadataBuilder> metadata = pop();
-    pop(); // metadataToken
     if (hasName) {
       library.addPartOf(metadata, "$containingLibrary", null, charOffset);
     } else {
@@ -1291,15 +1205,9 @@
     Object name = pop();
     int modifiers = pop();
     List<MetadataBuilder> metadata = pop();
-    Token metadataToken = pop();
-    var docComment = documentationComment(beginToken, metadataToken);
-
-    int codeStartOffset =
-        _chooseCodeStartOffset(docComment, metadataToken, beginToken);
-    int codeEndOffset = endToken.end;
-
+    String documentationComment = getDocumentationComment(beginToken);
     library.addFactoryMethod(
-        docComment?.text,
+        documentationComment,
         metadata,
         modifiers,
         name,
@@ -1309,8 +1217,6 @@
         charOffset,
         formalsOffset,
         endToken.charOffset,
-        codeStartOffset,
-        codeEndOffset,
         nativeMethodName);
     nativeMethodName = null;
     inConstructor = false;
@@ -1364,7 +1270,6 @@
   void handleInvalidMember(Token endToken) {
     debugEvent("InvalidMember");
     pop(); // metadata star
-    pop(); // metadataToken
   }
 
   @override
@@ -1401,60 +1306,32 @@
     library.addProblem(message, charOffset, length, uri, context: context);
   }
 
-  static int _chooseCodeStartOffset(
-      _DocumentationComment docComment, Token metadataToken, Token beginToken) {
-    if (docComment != null && metadataToken != null) {
-      return min(docComment.offset, metadataToken.charOffset);
-    }
-    if (docComment != null) {
-      return docComment.offset;
-    }
-    if (metadataToken != null) {
-      return metadataToken.charOffset;
-    }
-    return beginToken.offset;
-  }
-
-  /// Return the documentation comment for the [beginToken] or [metadataToken],
-  /// or `null` if there is no preceding documentation comment in either of
-  /// these nodes.
-  static _DocumentationComment documentationComment(
-      Token beginToken, Token metadataToken) {
-    return documentationCommentBefore(beginToken) ??
-        documentationCommentBefore(metadataToken);
-  }
-
   /// Return the documentation comment for the entity that starts at the
   /// given [token], or `null` if there is no preceding documentation comment.
-  static _DocumentationComment documentationCommentBefore(Token token) {
-    Token commentToken = token?.precedingComments;
-    if (commentToken == null) return null;
+  static String getDocumentationComment(Token token) {
+    Token docToken = token.precedingComments;
+    if (docToken == null) return null;
     bool inSlash = false;
-    Token firstDocToken;
-    StringBuffer buffer;
-    while (commentToken != null) {
-      String lexeme = commentToken.lexeme;
+    var buffer = new StringBuffer();
+    while (docToken != null) {
+      String lexeme = docToken.lexeme;
       if (lexeme.startsWith('/**')) {
         inSlash = false;
-        firstDocToken = commentToken;
-        buffer = new StringBuffer();
+        buffer.clear();
         buffer.write(lexeme);
       } else if (lexeme.startsWith('///')) {
-        if (!inSlash || buffer == null) {
+        if (!inSlash) {
           inSlash = true;
-          firstDocToken = commentToken;
-          buffer = new StringBuffer();
+          buffer.clear();
         }
         if (buffer.isNotEmpty) {
           buffer.writeln();
         }
         buffer.write(lexeme);
       }
-      commentToken = commentToken.next;
+      docToken = docToken.next;
     }
-    if (buffer == null) return null;
-    return new _DocumentationComment(
-        firstDocToken.charOffset, buffer.toString());
+    return buffer.toString();
   }
 
   @override
@@ -1462,10 +1339,3 @@
     // printEvent('OutlineBuilder: $name');
   }
 }
-
-class _DocumentationComment {
-  final int offset;
-  final String text;
-
-  _DocumentationComment(this.offset, this.text);
-}
diff --git a/pkg/front_end/lib/src/fasta/source/outline_listener.dart b/pkg/front_end/lib/src/fasta/source/outline_listener.dart
deleted file mode 100644
index 0f77d6c..0000000
--- a/pkg/front_end/lib/src/fasta/source/outline_listener.dart
+++ /dev/null
@@ -1,29 +0,0 @@
-// Copyright (c) 2018, 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 '../kernel/kernel_ast_api.dart' show DartType, Node;
-
-/// Callback interface used by builders to report the results of resolution
-/// in library outlines to a client.
-class OutlineListener {
-  /// Stores given resolution data at the given [offset].
-  ///
-  /// If the token for which the data is stored is synthetic, then [isSynthetic]
-  /// is set to `true`.
-  ///
-  /// [importIndex] is the index of the import directive in the library, and
-  /// is used to store import prefixes.
-  ///
-  /// [reference] is the referenced declaration - a class, a typedef, a type
-  /// parameter, etc.
-  ///
-  /// [type] is the type that was build from the [reference], for example code
-  /// `List<int>` will have a reference to `List` and type `List<int>`, i.e.
-  /// with type arguments applied.
-  void store(int offset, bool isSynthetic,
-      {int importIndex,
-      bool isNamespaceCombinatorReference,
-      Node reference,
-      DartType type}) {}
-}
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index f699652..014686a 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -66,8 +66,6 @@
 
 import '../problems.dart' show unhandled;
 
-import '../source/outline_listener.dart' show OutlineListener;
-
 import 'source_loader.dart' show SourceLoader;
 
 abstract class SourceLibraryBuilder<T extends TypeBuilder, R>
@@ -116,8 +114,6 @@
 
   bool canAddImplementationBuilders = false;
 
-  final OutlineListener outlineListener;
-
   SourceLibraryBuilder(SourceLoader loader, Uri fileUri, Scope scope)
       : this.fromScopes(loader, fileUri, new DeclarationBuilder<T>.library(),
             scope ?? new Scope.top());
@@ -126,7 +122,6 @@
       this.loader, this.fileUri, this.libraryDeclaration, this.importScope)
       : disableTypeInference = loader.target.disableTypeInference,
         currentDeclaration = libraryDeclaration,
-        outlineListener = loader.createOutlineListener(fileUri),
         super(
             fileUri, libraryDeclaration.toScope(importScope), new Scope.top());
 
@@ -350,9 +345,7 @@
       int startCharOffset,
       int charOffset,
       int charEndOffset,
-      int supertypeOffset,
-      int codeStartOffset,
-      int codeEndOffset);
+      int supertypeOffset);
 
   void addNamedMixinApplication(
       String documentationComment,
@@ -362,9 +355,7 @@
       int modifiers,
       T mixinApplication,
       List<T> interfaces,
-      int charOffset,
-      int codeStartOffset,
-      int codeEndOffset);
+      int charOffset);
 
   void addField(
       String documentationComment,
@@ -373,47 +364,23 @@
       T type,
       String name,
       int charOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       Token initializerTokenForInference,
       bool hasInitializer);
 
-  void addFields(
-      String documentationComment,
-      List<MetadataBuilder> metadata,
-      int modifiers,
-      T type,
-      List<Object> fieldsInfo,
-      int firstFieldCodeStartOffset) {
+  void addFields(String documentationComment, List<MetadataBuilder> metadata,
+      int modifiers, T type, List<Object> fieldsInfo) {
     for (int i = 0; i < fieldsInfo.length; i += 4) {
       String name = fieldsInfo[i];
       int charOffset = fieldsInfo[i + 1];
       bool hasInitializer = fieldsInfo[i + 2] != null;
       Token initializerTokenForInference =
           type == null ? fieldsInfo[i + 2] : null;
-      Token beforeLast = fieldsInfo[i + 3];
       if (initializerTokenForInference != null) {
+        Token beforeLast = fieldsInfo[i + 3];
         beforeLast.setNext(new Token.eof(beforeLast.next.offset));
       }
-
-      int codeEndOffset;
-      if (beforeLast != null) {
-        codeEndOffset = beforeLast.next.offset;
-      } else {
-        codeEndOffset = charOffset + name.length;
-      }
-
-      addField(
-          documentationComment,
-          metadata,
-          modifiers,
-          type,
-          name,
-          charOffset,
-          i == 0 ? firstFieldCodeStartOffset : charOffset,
-          codeEndOffset,
-          initializerTokenForInference,
-          hasInitializer);
+      addField(documentationComment, metadata, modifiers, type, name,
+          charOffset, initializerTokenForInference, hasInitializer);
     }
   }
 
@@ -430,8 +397,6 @@
       int charOffset,
       int charOpenParenOffset,
       int charEndOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       String nativeMethodName);
 
   void addProcedure(
@@ -448,8 +413,6 @@
       int charOpenParenOffset,
       int charEndOffset,
       String nativeMethodName,
-      int codeStartOffset,
-      int codeEndOffset,
       {bool isTopLevel});
 
   void addEnum(
@@ -485,8 +448,6 @@
       int charOffset,
       int charOpenParenOffset,
       int charEndOffset,
-      int codeStartOffset,
-      int codeEndOffset,
       String nativeMethodName);
 
   FormalParameterBuilder addFormalParameter(List<MetadataBuilder> metadata,
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index 646eeef..a354e63 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -45,8 +45,6 @@
         NamedTypeBuilder,
         TypeBuilder;
 
-import '../combinator.dart';
-
 import '../deprecated_problems.dart' show deprecated_inputError;
 
 import '../export.dart' show Export;
@@ -104,8 +102,6 @@
 
 import 'outline_builder.dart' show OutlineBuilder;
 
-import 'outline_listener.dart' show OutlineListener;
-
 import 'source_class_builder.dart' show SourceClassBuilder;
 
 import 'source_library_builder.dart' show SourceLibraryBuilder;
@@ -213,13 +209,9 @@
       // time we suppress lexical errors.
       Token tokens = await tokenize(library, suppressLexicalErrors: true);
       if (tokens == null) return;
-
       DietListener listener = createDietListener(library);
       DietParser parser = new DietParser(listener);
-
-      listener.currentUnit = library;
       parser.parseUnit(tokens);
-
       for (SourceLibraryBuilder part in library.parts) {
         if (part.partOfLibrary != library) {
           // Part was included in multiple libraries. Skip it here.
@@ -227,7 +219,6 @@
         }
         Token tokens = await tokenize(part);
         if (tokens != null) {
-          listener.currentUnit = part;
           listener.uri = part.fileUri;
           listener.partDirectiveIndex = 0;
           parser.parseUnit(tokens);
@@ -348,21 +339,6 @@
       // and can lead to memory leaks.
       exportee.exporters.clear();
     }
-    for (var library in builders.values) {
-      if (library is SourceLibraryBuilder) {
-        OutlineListener outlineListener = library.outlineListener;
-        if (outlineListener != null) {
-          for (var import in library.imports) {
-            storeCombinatorIdentifiersResolution(
-                outlineListener, import.imported, import.combinators);
-          }
-          for (var export in library.exports) {
-            storeCombinatorIdentifiersResolution(
-                outlineListener, export.exported, export.combinators);
-          }
-        }
-      }
-    }
     ticker.logMs("Computed library scopes");
     // debugPrintExports();
   }
@@ -973,19 +949,4 @@
     hierarchy = null;
     typeInferenceEngine = null;
   }
-
-  void storeCombinatorIdentifiersResolution(OutlineListener outlineListener,
-      LibraryBuilder consumed, List<Combinator> combinators) {
-    if (combinators != null) {
-      for (var combinator in combinators) {
-        for (var identifier in combinator.identifiers) {
-          var declaration = consumed.exportScope.local[identifier.name];
-          declaration ??= consumed.exportScope.setters[identifier.name];
-          outlineListener.store(identifier.offset, identifier.isSynthetic,
-              isNamespaceCombinatorReference: true,
-              reference: declaration?.target);
-        }
-      }
-    }
-  }
 }
diff --git a/pkg/front_end/lib/src/fasta/source/stack_listener.dart b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
index 154b20a..c0a7db0 100644
--- a/pkg/front_end/lib/src/fasta/source/stack_listener.dart
+++ b/pkg/front_end/lib/src/fasta/source/stack_listener.dart
@@ -52,7 +52,6 @@
   IdentifierList,
   Initializers,
   Metadata,
-  MetadataToken,
   Modifiers,
   ParameterDefaultValue,
   Prefix,
diff --git a/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart b/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
index 1a05738..e6d1901 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/inference_helper.dart
@@ -2,10 +2,9 @@
 // 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 '../fasta_codes.dart' show LocatedMessage, Message;
+import 'package:kernel/ast.dart' show Arguments, Expression, FunctionType;
 
-import '../kernel/kernel_ast_api.dart'
-    show ArgumentsJudgment, Expression, FunctionType;
+import '../fasta_codes.dart' show LocatedMessage, Message;
 
 abstract class InferenceHelper {
   Expression wrapInCompileTimeError(Expression expression, Message message);
@@ -14,7 +13,7 @@
       {List<LocatedMessage> context});
 
   LocatedMessage checkArgumentsForType(
-      FunctionType function, ArgumentsJudgment arguments, int offset);
+      FunctionType function, Arguments arguments, int offset);
 
   void addProblem(Message message, int charOffset, int length,
       {List<LocatedMessage> context});
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
index b3c28bb..68a2f7a 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inference_listener.dart
@@ -545,13 +545,8 @@
       void thenStatement,
       void elseStatement);
 
-  void indexAssign(
-      ExpressionJudgment judgment,
-      Location location,
-      DartType receiverType,
-      Reference writeMember,
-      Reference combiner,
-      DartType inferredType);
+  void indexAssign(ExpressionJudgment judgment, Location location,
+      Reference writeMember, Reference combiner, DartType inferredType);
 
   void intLiteral(ExpressionJudgment judgment, Location location,
       IntLiteralTokens tokens, num value, DartType inferredType);
@@ -614,7 +609,6 @@
   void methodInvocation(
       ExpressionJudgment judgment,
       Location resultOffset,
-      DartType receiverType,
       List<DartType> argumentsTypes,
       bool isImplicitCall,
       Reference interfaceMember,
@@ -643,20 +637,13 @@
   void propertyAssign(
       ExpressionJudgment judgment,
       Location location,
-      bool isSyntheticLhs,
-      DartType receiverType,
       Reference writeMember,
       DartType writeContext,
       Reference combiner,
       DartType inferredType);
 
-  void propertyGet(
-      ExpressionJudgment judgment,
-      Location location,
-      bool forSyntheticToken,
-      DartType receiverType,
-      Reference member,
-      DartType inferredType);
+  void propertyGet(ExpressionJudgment judgment, Location location,
+      bool forSyntheticToken, Reference member, DartType inferredType);
 
   void propertyGetCall(
       ExpressionJudgment judgment, Location location, DartType inferredType);
@@ -760,7 +747,6 @@
   void variableAssign(
       ExpressionJudgment judgment,
       Location location,
-      bool isSyntheticLhs,
       DartType writeContext,
       covariant Object writeVariableBinder,
       Reference combiner,
@@ -964,8 +950,8 @@
       void elseStatement) {}
 
   @override
-  void indexAssign(ExpressionJudgment judgment, location, receiverType,
-      writeMember, combiner, DartType inferredType) {}
+  void indexAssign(ExpressionJudgment judgment, location, writeMember, combiner,
+      DartType inferredType) {}
 
   @override
   void intLiteral(ExpressionJudgment judgment, location,
@@ -1030,7 +1016,6 @@
   void methodInvocation(
       ExpressionJudgment judgment,
       resultOffset,
-      DartType receiverType,
       List<DartType> argumentsTypes,
       bool isImplicitCall,
       interfaceMember,
@@ -1061,19 +1046,12 @@
       NullLiteralTokens tokens, bool isSynthetic, DartType inferredType) {}
 
   @override
-  void propertyAssign(
-      ExpressionJudgment judgment,
-      location,
-      bool isSyntheticLhs,
-      receiverType,
-      writeMember,
-      DartType writeContext,
-      combiner,
-      DartType inferredType) {}
+  void propertyAssign(ExpressionJudgment judgment, location, writeMember,
+      DartType writeContext, combiner, DartType inferredType) {}
 
   @override
   void propertyGet(ExpressionJudgment judgment, location,
-      bool forSyntheticToken, receiverType, member, DartType inferredType) {}
+      bool forSyntheticToken, member, DartType inferredType) {}
 
   @override
   void propertyGetCall(
@@ -1192,7 +1170,6 @@
   void variableAssign(
       ExpressionJudgment judgment,
       location,
-      bool isSyntheticLhs,
       DartType writeContext,
       covariant void writeVariableBinder,
       combiner,
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index 6bd3c86..0094a71 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -1685,7 +1685,6 @@
       listener.methodInvocation(
           expression,
           resultOffset,
-          receiverType,
           arguments.types,
           isImplicitCall,
           getRealTarget(interfaceMember),
@@ -1760,7 +1759,7 @@
       listener.propertyGetCall(expression, expression.fileOffset, inferredType);
     } else {
       listener.propertyGet(expression, expression.fileOffset, forSyntheticToken,
-          receiverType, interfaceMember, inferredType);
+          interfaceMember, inferredType);
     }
     expression.inferredType = inferredType;
   }
@@ -1965,14 +1964,13 @@
     return new InterfaceType(class_, <DartType>[type ?? const DynamicType()]);
   }
 
-  void _forEachArgument(ArgumentsJudgment arguments,
-      void callback(String name, Expression expression)) {
+  void _forEachArgument(
+      Arguments arguments, void callback(String name, Expression expression)) {
     for (var expression in arguments.positional) {
       callback(null, expression);
     }
-    for (var namedExpression in arguments.namedJudgments) {
-      callback(namedExpression.name,
-          namedExpression.originalValue ?? namedExpression.value);
+    for (var namedExpression in arguments.named) {
+      callback(namedExpression.name, namedExpression.value);
     }
   }
 
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index eaac01d..fdcc60e 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -48,6 +48,8 @@
 ConflictsWithTypeVariable/example: Fail
 ConstAfterFactory/script1: Fail
 ConstAndCovariant/script2: Fail
+ConstAndFinal/declaration3: Fail
+ConstAndFinal/declaration4: Fail
 ConstAndVar/script1: Fail
 ConstConstructorInSubclassOfMixinApplication/example: Fail
 ConstConstructorNonFinalField/example: Fail
@@ -327,7 +329,6 @@
 ThisOrSuperAccessInFieldInitializer/example: Fail
 TooFewArguments/example: Fail
 TooManyArguments/example: Fail
-TooManyArgumentsCouldBeNamed/example: Fail
 TopLevelOperator/script1: Fail
 TopLevelOperator/script2: Fail
 TopLevelOperator/script3: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index a1be91c..49ac4bb 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -460,9 +460,11 @@
   template: "Members can't be declared to be both 'const' and 'final'."
   tip: "Try removing either the 'const' or 'final' keyword."
   analyzerCode: CONST_AND_FINAL
-  script:
+  declaration:
     - "class C { static const final int x = 5; }"
     - "class C { static final const int x = 5; }"
+    - "const final int x = 5;"
+    - "final const int x = 5;"
 
 ConstAndVar:
   template: "Members can't be declared to be both 'const' and 'var'."
@@ -1243,12 +1245,6 @@
   severity: ERROR_LEGACY_WARNING
   analyzerCode: EXTRA_POSITIONAL_ARGUMENTS
 
-TooManyArgumentsCouldBeNamed:
-  template: "Too many positional arguments: #count allowed, but #count2 found."
-  tip: "Try removing the extra positional arguments or specifying the name for named arguments."
-  severity: ERROR_LEGACY_WARNING
-  analyzerCode: EXTRA_POSITIONAL_ARGUMENTS_COULD_BE_NAMED
-
 NoSuchNamedParameter:
   template: "No named parameter with the name '#name'."
   severity: ERROR_LEGACY_WARNING
diff --git a/pkg/front_end/test/fasta/generator_to_string_test.dart b/pkg/front_end/test/fasta/generator_to_string_test.dart
index 9de0d3f..4beec7d 100644
--- a/pkg/front_end/test/fasta/generator_to_string_test.dart
+++ b/pkg/front_end/test/fasta/generator_to_string_test.dart
@@ -182,17 +182,17 @@
         " getter: $uri::myGetter, setter: $uri::mySetter,"
         " receiverVariable: null, indexVariable: null)",
         new KernelIndexedAccessGenerator.internal(
-            helper, token, token, expression, index, getter, setter));
+            helper, token, expression, index, getter, setter));
     check(
         "ThisIndexedAccessGenerator(offset: 4, index: index,"
         " getter: $uri::myGetter, setter: $uri::mySetter, indexVariable: null)",
         new KernelThisIndexedAccessGenerator(
-            helper, token, token, index, getter, setter));
+            helper, token, index, getter, setter));
     check(
         "SuperIndexedAccessGenerator(offset: 4, index: index,"
         " getter: $uri::myGetter, setter: $uri::mySetter, indexVariable: null)",
         new KernelSuperIndexedAccessGenerator(
-            helper, token, token, index, getter, setter));
+            helper, token, index, getter, setter));
     check(
         "StaticAccessGenerator(offset: 4, readTarget: $uri::myGetter,"
         " writeTarget: $uri::mySetter)",
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index 6e155d9..9b12575 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -225,22 +225,22 @@
 // pkg/front_end/testcases/rasta/super.dart:147:12: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     super.m(87);
-//            ^^^^
+//            ^
 //
 // pkg/front_end/testcases/rasta/super.dart:148:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     use(super.m(87));
-//                ^^^^
+//                ^
 //
 // pkg/front_end/testcases/rasta/super.dart:149:12: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     super.n(87);
-//            ^^^^
+//            ^
 //
 // pkg/front_end/testcases/rasta/super.dart:150:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     use(super.n(87));
-//                ^^^^
+//                ^
 //
 // pkg/front_end/testcases/rasta/super.dart:11:9: Error: Final field 'f' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
index 71e52ba..01ccbc1 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.direct.expect
@@ -5,7 +5,7 @@
 static method bad() → dynamic {
   for (core::int i = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final dynamic #t2 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null; ; false) {
+           ^" in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect b/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect
index 71e52ba..01ccbc1 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.direct.transformed.expect
@@ -5,7 +5,7 @@
 static method bad() → dynamic {
   for (core::int i = let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final dynamic #t2 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null; ; false) {
+           ^" in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
index 50d3af2..689db8c 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.expect
@@ -11,7 +11,7 @@
 static method bad() → dynamic {
   for (core::int i = (let final dynamic #t1 = let dynamic _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final dynamic #t2 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null) as{TypeError} core::int; ; false) {
+           ^" in let final dynamic #t2 = let dynamic _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null) as{TypeError} core::int; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
index 0cffebe..7db28e0 100644
--- a/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_29984.dart.strong.transformed.expect
@@ -11,7 +11,7 @@
 static method bad() → dynamic {
   for (core::int i = (let final dynamic #t1 = let<BottomType> _ = null in invalid-expression "pkg/front_end/testcases/regress/issue_29984.dart:6:12: Error: Can't declare 'i' because it was already used in this scope.
   for (int i = i;; false) {}
-           ^" in let final<BottomType> #t2 = throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null) as{TypeError} core::int; ; false) {
+           ^" in let final<BottomType> #t2 = let<BottomType> _ = null in throw new core::NoSuchMethodError::withInvocation(null, new core::_InvocationMirror::_withType(#i, 33, const <core::Type>[], const <dynamic>[], core::Map::unmodifiable<core::Symbol, dynamic>(const <core::Symbol, dynamic>{}))) in null) as{TypeError} core::int; ; false) {
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
index c8a8ea6..11b7715 100644
--- a/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31299.dart.strong.expect
@@ -3,11 +3,11 @@
 // pkg/front_end/testcases/regress/issue_31299.dart:18:12: Error: Too many positional arguments: 0 allowed, but 2 found.
 // Try removing the extra positional arguments.
 //   new A.foo(1, 2);
-//            ^^^^^^
+//            ^
 //
 // pkg/front_end/testcases/regress/issue_31299.dart:15:14: Error: Too few positional arguments: 2 required, 0 given.
 //   new A().foo();
-//              ^^
+//              ^
 
 library;
 import self as self;
diff --git a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
index 66896c4..a923b10 100644
--- a/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
+++ b/pkg/front_end/testcases/super_rasta_copy.dart.strong.expect
@@ -203,12 +203,12 @@
 // pkg/front_end/testcases/super_rasta_copy.dart:139:12: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     super.m(87);
-//            ^^^^
+//            ^
 //
 // pkg/front_end/testcases/super_rasta_copy.dart:140:16: Error: Too many positional arguments: 0 allowed, but 1 found.
 // Try removing the extra positional arguments.
 //     use(super.m(87));
-//                ^^^^
+//                ^
 //
 // pkg/front_end/testcases/super_rasta_copy.dart:14:9: Error: Final field 'f' is not initialized.
 // Try to initialize the field in the declaration or in every constructor.