Add an implementation of the UnresolvedNameGenerator for analyzer

Change-Id: I685dc6071980c2df4adb755d6e5e8daf9ecc211b
Reviewed-on: https://dart-review.googlesource.com/57420
Commit-Queue: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Dan Rubel <danrubel@google.com>
diff --git a/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart b/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart
new file mode 100644
index 0000000..54af172
--- /dev/null
+++ b/pkg/analyzer/lib/src/fasta/analyzer_expression_generator.dart
@@ -0,0 +1,174 @@
+// 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 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/ast/ast_factory.dart';
+import 'package:analyzer/src/fasta/ast_building_factory.dart';
+import 'package:front_end/src/fasta/kernel/expression_generator.dart' as fasta;
+import 'package:front_end/src/fasta/kernel/expression_generator_helper.dart';
+import 'package:front_end/src/fasta/kernel/forest.dart';
+import 'package:front_end/src/scanner/token.dart';
+import 'package:kernel/ast.dart' show DartType, Initializer, Name, Procedure;
+
+abstract class AnalyzerExpressionGenerator
+    implements Generator<Expression, Statement, Arguments> {
+  final ExpressionGeneratorHelper<Expression, Statement, Arguments> helper;
+
+  final AstFactory astFactory;
+
+  AnalyzerExpressionGenerator(this.helper, this.astFactory);
+
+  Forest<Expression, Statement, Token, Arguments> get forest => helper.forest;
+
+  @override
+// TODO: implement isInitializer
+  bool get isInitializer => throw new UnimplementedError();
+  @override
+// TODO: implement isThisPropertyAccess
+  bool get isThisPropertyAccess => throw new UnimplementedError();
+
+  @override
+// TODO: implement plainNameForRead
+  String get plainNameForRead => throw new UnimplementedError();
+
+  @override
+// TODO: implement plainNameForWrite
+  String get plainNameForWrite => throw new UnimplementedError();
+
+  @override
+// TODO: implement uri
+  Uri get uri => throw new UnimplementedError();
+
+  @override
+  Expression buildAssignment(Expression value, {bool voidContext}) {
+    // TODO: implement buildAssignment
+    throw new UnimplementedError();
+  }
+
+  @override
+  Expression buildCompoundAssignment(Name binaryOperator, Expression value,
+      {int offset,
+      bool voidContext,
+      Procedure interfaceTarget,
+      bool isPreIncDec}) {
+    // TODO: implement buildCompoundAssignment
+    throw new UnimplementedError();
+  }
+
+  @override
+  Initializer buildFieldInitializer(Map<String, int> initializedFields) {
+    // TODO: implement buildFieldInitializer
+    throw new UnimplementedError();
+  }
+
+  /// For most accessors, the AST structure will be the same whether the result
+  /// is being used for access or modification.
+  Expression buildForEffect() => buildSimpleRead();
+
+  @override
+  Expression buildNullAwareAssignment(
+      Expression value, DartType type, int offset,
+      {bool voidContext}) {
+    // TODO: implement buildNullAwareAssignment
+    throw new UnimplementedError();
+  }
+
+  @override
+  Expression buildPostfixIncrement(Name binaryOperator,
+      {int offset, bool voidContext, Procedure interfaceTarget}) {
+    // TODO: implement buildPostfixIncrement
+    throw new UnimplementedError();
+  }
+
+  @override
+  Expression buildPrefixIncrement(Name binaryOperator,
+      {int offset, bool voidContext, Procedure interfaceTarget}) {
+    // TODO: implement buildPrefixIncrement
+    throw new UnimplementedError();
+  }
+
+  @override
+  buildPropertyAccess(fasta.IncompleteSendGenerator send, int operatorOffset,
+      bool isNullAware) {
+    // TODO: implement buildPropertyAccess
+    throw new UnimplementedError();
+  }
+
+  @override
+  buildThrowNoSuchMethodError(Expression receiver, Arguments arguments,
+      {bool isSuper,
+      bool isGetter,
+      bool isSetter,
+      bool isStatic,
+      String name,
+      int offset,
+      /*LocatedMessage*/ argMessage}) {
+    // TODO: implement buildThrowNoSuchMethodError
+    throw new UnimplementedError();
+  }
+
+  @override
+  DartType buildTypeWithBuiltArguments(List<DartType> arguments,
+      {bool nonInstanceAccessIsError: false}) {
+    // TODO: implement buildTypeWithBuiltArguments
+    throw new UnimplementedError();
+  }
+
+  @override
+  doInvocation(int offset, Arguments arguments) {
+    // TODO: implement doInvocation
+    throw new UnimplementedError();
+  }
+
+  @override
+  Expression makeInvalidRead() {
+    // TODO: implement makeInvalidRead
+    throw new UnimplementedError();
+  }
+
+  @override
+  Expression makeInvalidWrite(Expression value) {
+    // TODO: implement makeInvalidWrite
+    throw new UnimplementedError();
+  }
+
+  @override
+  void printOn(StringSink sink) {
+    // TODO: implement printOn
+    throw new UnimplementedError();
+  }
+
+  @override
+  T storeOffset<T>(T node, int offset) {
+    // TODO: implement storeOffset
+    throw new UnimplementedError();
+  }
+}
+
+class AnalyzerUnresolvedNameGenerator extends AnalyzerExpressionGenerator
+    with
+        fasta.ErroneousExpressionGenerator<Expression, Statement, Arguments>,
+        fasta.UnresolvedNameGenerator<Expression, Statement, Arguments> {
+  @override
+  final Token token;
+
+  @override
+  final Name name;
+
+  AnalyzerUnresolvedNameGenerator(
+      ExpressionGeneratorHelper<dynamic, dynamic, dynamic> helper,
+      AstFactory astFactory,
+      this.token,
+      this.name)
+      : super(helper, astFactory);
+
+  @override
+  Expression buildSimpleRead() => astFactory.simpleIdentifier(token);
+
+  @override
+  void printOn(StringSink sink) {
+    sink.write(", name: ");
+    sink.write(name.name);
+  }
+}
diff --git a/pkg/analyzer/lib/src/fasta/ast_body_builder.dart b/pkg/analyzer/lib/src/fasta/ast_body_builder.dart
index 92c95b7..f79a164 100644
--- a/pkg/analyzer/lib/src/fasta/ast_body_builder.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_body_builder.dart
@@ -4,7 +4,7 @@
 
 import 'package:analyzer/dart/ast/ast.dart' show Expression, Statement;
 import 'package:analyzer/src/fasta/ast_building_factory.dart'
-    show AstBuildingForest;
+    show Arguments, AstBuildingForest;
 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
 import 'package:front_end/src/fasta/kernel/body_builder.dart' show BodyBuilder;
 import 'package:front_end/src/fasta/kernel/kernel_builder.dart'
@@ -17,7 +17,7 @@
 export 'package:front_end/src/fasta/kernel/unlinked_scope.dart'
     show UnlinkedScope;
 
-class AstBodyBuilder extends BodyBuilder<Expression, Statement, dynamic> {
+class AstBodyBuilder extends BodyBuilder<Expression, Statement, Arguments> {
   @override
   final AstBuildingForest forest;
 
diff --git a/pkg/analyzer/lib/src/fasta/ast_building_factory.dart b/pkg/analyzer/lib/src/fasta/ast_building_factory.dart
index d794f10..9ffd99a 100644
--- a/pkg/analyzer/lib/src/fasta/ast_building_factory.dart
+++ b/pkg/analyzer/lib/src/fasta/ast_building_factory.dart
@@ -5,14 +5,22 @@
 import 'package:analyzer/dart/ast/ast.dart' hide Identifier;
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/src/dart/ast/ast_factory.dart';
+import 'package:analyzer/src/fasta/analyzer_expression_generator.dart';
 import 'package:analyzer/src/generated/resolver.dart' show TypeProvider;
 import 'package:front_end/src/fasta/kernel/body_builder.dart' show LabelTarget;
 import 'package:front_end/src/fasta/kernel/forest.dart';
 import 'package:kernel/ast.dart' as kernel;
 
+/// A data holder used to conform to the [Forest] API.
+class Arguments {
+  List<TypeAnnotation> typeArguments = <TypeAnnotation>[];
+  List<Expression> positionalArguments = <Expression>[];
+  List<Expression> namedArguments = <Expression>[];
+}
+
 /// An implementation of a [Forest] that can be used to build an AST structure.
 class AstBuildingForest
-    implements Forest<Expression, Statement, Token, _Arguments> {
+    implements Forest<Expression, Statement, Token, Arguments> {
   /// The type provider used to resolve the types of literal nodes, or `null` if
   /// type resolution is not being performed.
   final TypeProvider _typeProvider;
@@ -24,9 +32,9 @@
   AstBuildingForest(this._typeProvider);
 
   @override
-  _Arguments arguments(List<Expression> positional, Token location,
+  Arguments arguments(List<Expression> positional, Token location,
       {covariant List types, covariant List named}) {
-    _Arguments arguments = new _Arguments();
+    Arguments arguments = new Arguments();
     if (types != null) {
       arguments.typeArguments = types.cast<TypeAnnotation>();
     }
@@ -38,22 +46,22 @@
   }
 
   @override
-  _Arguments argumentsEmpty(Token location) => new _Arguments();
+  Arguments argumentsEmpty(Token location) => new Arguments();
 
   @override
-  List argumentsNamed(_Arguments arguments) => arguments.namedArguments;
+  List argumentsNamed(Arguments arguments) => arguments.namedArguments;
 
   @override
-  List<Expression> argumentsPositional(_Arguments arguments) =>
+  List<Expression> argumentsPositional(Arguments arguments) =>
       arguments.positionalArguments;
 
   @override
-  void argumentsSetTypeArguments(_Arguments arguments, covariant List types) {
+  void argumentsSetTypeArguments(Arguments arguments, covariant List types) {
     arguments.typeArguments = types.cast<TypeAnnotation>();
   }
 
   @override
-  List argumentsTypeArguments(_Arguments arguments) => arguments.typeArguments;
+  List argumentsTypeArguments(Arguments arguments) => arguments.typeArguments;
 
   @override
   Expression asExpression(Expression expression, type, Token location) =>
@@ -98,7 +106,7 @@
           breakKeyword, astFactory.simpleIdentifier(label.token), semicolon);
 
   @override
-  kernel.Arguments castArguments(_Arguments arguments) {
+  kernel.Arguments castArguments(Arguments arguments) {
     // TODO(brianwilkerson) Implement this or remove it from the API.
     throw new UnimplementedError();
   }
@@ -164,11 +172,11 @@
           continueKeyword, astFactory.simpleIdentifier(label.token), semicolon);
 
   @override
-  Generator<Expression, Statement, _Arguments> deferredAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> deferredAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       PrefixBuilder builder,
-      Generator<Expression, Statement, _Arguments> generator) {
+      Generator<Expression, Statement, Arguments> generator) {
     // TODO(brianwilkerson) Implement this.
     throw new UnimplementedError();
   }
@@ -269,8 +277,8 @@
           elseStatement);
 
   @override
-  Generator<Expression, Statement, _Arguments> indexedAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> indexedAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       Expression receiver,
       Expression index,
@@ -318,8 +326,8 @@
       astFactory.labeledStatement(target.labels.cast<Label>(), statement);
 
   @override
-  Generator<Expression, Statement, _Arguments> largeIntAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> largeIntAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token) {
     // TODO(brianwilkerson) Implement this.
     throw new UnimplementedError();
@@ -410,8 +418,8 @@
   }
 
   @override
-  Generator<Expression, Statement, _Arguments> loadLibraryGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> loadLibraryGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       LoadLibraryBuilder builder) {
     // TODO(brianwilkerson) Implement this.
@@ -436,8 +444,8 @@
         ..staticType = _typeProvider?.boolType;
 
   @override
-  Generator<Expression, Statement, _Arguments> nullAwarePropertyAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> nullAwarePropertyAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       Expression receiverExpression,
       kernel.Name name,
@@ -455,8 +463,8 @@
           leftParenthesis, expression, rightParenthesis);
 
   @override
-  Generator<Expression, Statement, _Arguments> propertyAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> propertyAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       Expression receiver,
       kernel.Name name,
@@ -470,8 +478,8 @@
   int readOffset(AstNode node) => node.offset;
 
   @override
-  Generator<Expression, Statement, _Arguments> readOnlyAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> readOnlyAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       Expression expression,
       String plainNameForRead) {
@@ -510,8 +518,8 @@
   }
 
   @override
-  Generator<Expression, Statement, _Arguments> staticAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> staticAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       kernel.Member getter,
       kernel.Member setter) {
@@ -525,8 +533,8 @@
       astFactory.adjacentStrings(strings.cast<StringLiteral>());
 
   @override
-  Generator<Expression, Statement, _Arguments> superIndexedAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> superIndexedAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       Expression index,
       kernel.Member getter,
@@ -536,8 +544,8 @@
   }
 
   @override
-  Generator<Expression, Statement, _Arguments> superPropertyAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> superPropertyAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       kernel.Name name,
       kernel.Member getter,
@@ -554,8 +562,8 @@
       astFactory.thisExpression(thisKeyword);
 
   @override
-  Generator<Expression, Statement, _Arguments> thisIndexedAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> thisIndexedAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       Expression index,
       kernel.Procedure getter,
@@ -565,8 +573,8 @@
   }
 
   @override
-  Generator<Expression, Statement, _Arguments> thisPropertyAccessGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> thisPropertyAccessGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token location,
       kernel.Name name,
       kernel.Member getter,
@@ -590,8 +598,8 @@
           tryKeyword, body, catchClauses, finallyKeyword, finallyBlock);
 
   @override
-  Generator<Expression, Statement, _Arguments> typeUseGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> typeUseGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       PrefixBuilder prefix,
       int declarationReferenceOffset,
@@ -602,8 +610,8 @@
   }
 
   @override
-  Generator<Expression, Statement, _Arguments> unlinkedGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> unlinkedGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       UnlinkedDeclaration declaration) {
     // TODO(brianwilkerson) Implement this.
@@ -611,12 +619,11 @@
   }
 
   @override
-  Generator<Expression, Statement, _Arguments> unresolvedNameGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> unresolvedNameGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       kernel.Name name) {
-    // TODO(brianwilkerson) Implement this.
-    throw new UnimplementedError();
+    return new AnalyzerUnresolvedNameGenerator(helper, astFactory, token, name);
   }
 
   @override
@@ -632,8 +639,8 @@
       variablesDeclaration.variables.variables;
 
   @override
-  Generator<Expression, Statement, _Arguments> variableUseGenerator(
-      ExpressionGeneratorHelper<Expression, Statement, _Arguments> helper,
+  Generator<Expression, Statement, Arguments> variableUseGenerator(
+      ExpressionGeneratorHelper<Expression, Statement, Arguments> helper,
       Token token,
       VariableDeclarationStatement variable,
       kernel.DartType promotedType) {
@@ -654,10 +661,3 @@
           Expression expression, Token semicolon) =>
       astFactory.yieldStatement(yieldKeyword, star, expression, semicolon);
 }
-
-/// A data holder used to conform to the [Forest] API.
-class _Arguments {
-  List<TypeAnnotation> typeArguments = <TypeAnnotation>[];
-  List<Expression> positionalArguments = <Expression>[];
-  List<Expression> namedArguments = <Expression>[];
-}
diff --git a/pkg/analyzer/test/generated/parser_forest_test.dart b/pkg/analyzer/test/generated/parser_forest_test.dart
index 5908df2..be1221a 100644
--- a/pkg/analyzer/test/generated/parser_forest_test.dart
+++ b/pkg/analyzer/test/generated/parser_forest_test.dart
@@ -627,6 +627,8 @@
   @failingTest
   void test_logicalAndExpression() {
     super.test_logicalAndExpression();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -647,16 +649,22 @@
   @failingTest
   void test_logicalOrExpression() {
     super.test_logicalOrExpression();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
   void test_logicalOrExpression_precedence_logicalAnd_left() {
     super.test_logicalOrExpression_precedence_logicalAnd_left();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
   void test_logicalOrExpression_precedence_logicalAnd_right() {
     super.test_logicalOrExpression_precedence_logicalAnd_right();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -677,6 +685,8 @@
   @failingTest
   void test_multipleLabels_statement() {
     super.test_multipleLabels_statement();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -1769,6 +1779,8 @@
   @failingTest
   void test_missingAssignableSelector_identifiersAssigned() {
     super.test_missingAssignableSelector_identifiersAssigned();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -1794,6 +1806,8 @@
   @failingTest
   void test_missingAssignableSelector_superPropertyAccessAssigned() {
     super.test_missingAssignableSelector_superPropertyAccessAssigned();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -2819,6 +2833,8 @@
   @failingTest
   void test_parseConditionalExpression() {
     super.test_parseConditionalExpression();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -3070,11 +3086,15 @@
   @failingTest
   void test_parseLogicalAndExpression() {
     super.test_parseLogicalAndExpression();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
   void test_parseLogicalOrExpression() {
     super.test_parseLogicalOrExpression();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -4041,11 +4061,15 @@
   @failingTest
   void test_conditionalExpression_missingElse() {
     super.test_conditionalExpression_missingElse();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
   void test_conditionalExpression_missingThen() {
     super.test_conditionalExpression_missingThen();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -4136,6 +4160,8 @@
   @failingTest
   void test_incomplete_conditionalExpression() {
     super.test_incomplete_conditionalExpression();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -4316,16 +4342,22 @@
   @failingTest
   void test_logicalAndExpression_missing_LHS() {
     super.test_logicalAndExpression_missing_LHS();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
   void test_logicalAndExpression_missing_LHS_RHS() {
     super.test_logicalAndExpression_missing_LHS_RHS();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
   void test_logicalAndExpression_missing_RHS() {
     super.test_logicalAndExpression_missing_RHS();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -4341,26 +4373,36 @@
   @failingTest
   void test_logicalOrExpression_missing_LHS() {
     super.test_logicalOrExpression_missing_LHS();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
   void test_logicalOrExpression_missing_LHS_RHS() {
     super.test_logicalOrExpression_missing_LHS_RHS();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
   void test_logicalOrExpression_missing_RHS() {
     super.test_logicalOrExpression_missing_RHS();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
   void test_logicalOrExpression_precedence_logicalAnd_left() {
     super.test_logicalOrExpression_precedence_logicalAnd_left();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
   void test_logicalOrExpression_precedence_logicalAnd_right() {
     super.test_logicalOrExpression_precedence_logicalAnd_right();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest
@@ -5363,6 +5405,8 @@
   @failingTest
   void test_parseStatement_multipleLabels() {
     super.test_parseStatement_multipleLabels();
+    fail(
+        'This passes under Dart 1, but fails under Dart 2 because of a cast exception');
   }
 
   @failingTest