diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart
index 5d865e5..0f7a698 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_key_test.dart
@@ -19,34 +19,44 @@
 @reflectiveTest
 class NonConstantMapKeyTest extends DriverResolutionTest {
   test_const_ifElement_thenTrue_elseFinal() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 final dynamic a = 0;
 const cond = true;
 var v = const {if (cond) 0: 1 else a : 0};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
-            ? [CompileTimeErrorCode.NON_CONSTANT_MAP_KEY]
-            : [CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT]);
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 75, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 55, 25),
+              ]);
   }
 
   test_const_ifElement_thenTrue_thenFinal() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 final dynamic a = 0;
 const cond = true;
 var v = const {if (cond) a : 0};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
-            ? [CompileTimeErrorCode.NON_CONSTANT_MAP_KEY]
-            : [CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT]);
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 65, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 55, 15),
+              ]);
   }
 
   test_const_topLevel() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 final dynamic a = 0;
 var v = const {a : 0};
-''', [CompileTimeErrorCode.NON_CONSTANT_MAP_KEY]);
+''', [
+      error(CompileTimeErrorCode.NON_CONSTANT_MAP_KEY, 36, 1),
+    ]);
   }
 }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
index 5e1e315..d116bb9 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_from_deferred_library_test.dart
@@ -24,17 +24,20 @@
     // reports wrong error code
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const int c = 1;''');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
 const cond = true;
 var v = const { if (cond) 'a': 'b' else 'c' : a.c};
-''', [CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY]);
+''', [
+      error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY,
+          99, 3),
+    ]);
   }
 
   test_const_ifElement_thenTrue_thenDeferred() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const int c = 1;''');
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 import 'lib1.dart' deferred as a;
 const cond = true;
@@ -42,28 +45,39 @@
 ''',
         analysisOptions.experimentStatus.constant_update_2018
             ? [
-                CompileTimeErrorCode
-                    .NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY
+                error(
+                    CompileTimeErrorCode
+                        .NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY,
+                    85,
+                    3),
               ]
-            : [CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 69, 19),
+              ]);
   }
 
   test_const_topLevel_deferred() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const int c = 1;''');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
 var v = const {'a' : a.c};
-''', [CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY]);
+''', [
+      error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY,
+          55, 3),
+    ]);
   }
 
   test_const_topLevel_deferred_nested() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const int c = 1;''');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
 var v = const {'a' : a.c + 1};
-''', [CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY]);
+''', [
+      error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE_FROM_DEFERRED_LIBRARY,
+          55, 7),
+    ]);
   }
 }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart
index eb75842..a448d9c 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_map_value_test.dart
@@ -19,37 +19,45 @@
 @reflectiveTest
 class NonConstantMapValueTest extends DriverResolutionTest {
   test_const_ifTrue_elseFinal() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 final dynamic a = 0;
 const cond = true;
 var v = const {if (cond) 'a': 'b', 'c' : a};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
-            ? [CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE]
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 81, 1),
+              ]
             : [
-                CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE,
-                CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 55, 18),
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 81, 1),
               ]);
   }
 
   test_const_ifTrue_thenFinal() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 final dynamic a = 0;
 const cond = true;
 var v = const {if (cond) 'a' : a};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
-            ? [CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE]
-            : [CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT]);
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 71, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 55, 17),
+              ]);
   }
 
   test_const_topLevel() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 final dynamic a = 0;
 var v = const {'a' : a};
-''', [CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE]);
+''', [
+      error(CompileTimeErrorCode.NON_CONSTANT_MAP_VALUE, 42, 1),
+    ]);
   }
 }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_set_element_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_set_element_from_deferred_library_test.dart
index f4d6ff7..7dd39c4 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_set_element_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_set_element_from_deferred_library_test.dart
@@ -25,17 +25,20 @@
     // reports wrong error code
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const int c = 1;''');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
 const cond = true;
 var v = const {if (cond) null else a.c};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT_FROM_DEFERRED_LIBRARY]);
+''', [
+      error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT_FROM_DEFERRED_LIBRARY,
+          88, 3),
+    ]);
   }
 
   test_const_ifElement_thenTrue_thenDeferred() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const int c = 1;''');
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 import 'lib1.dart' deferred as a;
 const cond = true;
@@ -43,28 +46,39 @@
 ''',
         analysisOptions.experimentStatus.constant_update_2018
             ? [
-                CompileTimeErrorCode
-                    .NON_CONSTANT_SET_ELEMENT_FROM_DEFERRED_LIBRARY
+                error(
+                    CompileTimeErrorCode
+                        .NON_CONSTANT_SET_ELEMENT_FROM_DEFERRED_LIBRARY,
+                    78,
+                    3),
               ]
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 68, 13),
+              ]);
   }
 
   test_const_topLevel_deferred() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const int c = 1;''');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
 var v = const {a.c};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT_FROM_DEFERRED_LIBRARY]);
+''', [
+      error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT_FROM_DEFERRED_LIBRARY,
+          49, 3),
+    ]);
   }
 
   test_const_topLevel_deferred_nested() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const int c = 1;''');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart' deferred as a;
 var v = const {a.c + 1};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT_FROM_DEFERRED_LIBRARY]);
+''', [
+      error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT_FROM_DEFERRED_LIBRARY,
+          49, 7),
+    ]);
   }
 }
 
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
index cb461c7..7793685 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_set_element_test.dart
@@ -19,88 +19,152 @@
 @reflectiveTest
 class NonConstantSetElementTest extends DriverResolutionTest {
   test_const_ifElement_thenElseFalse_finalElse() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode(
+        '''
 final dynamic a = 0;
 var v = const <int>{if (1 < 0) 0 else a};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+''',
+        analysisOptions.experimentStatus.constant_update_2018
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 59, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 19),
+              ]);
   }
 
   test_const_ifElement_thenElseFalse_finalThen() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode(
+        '''
 final dynamic a = 0;
 var v = const <int>{if (1 < 0) a else 0};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+''',
+        analysisOptions.experimentStatus.constant_update_2018
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 19),
+              ]);
   }
 
   test_const_ifElement_thenElseTrue_finalElse() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode(
+        '''
 final dynamic a = 0;
 var v = const <int>{if (1 > 0) 0 else a};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+''',
+        analysisOptions.experimentStatus.constant_update_2018
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 59, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 19),
+              ]);
   }
 
   test_const_ifElement_thenElseTrue_finalThen() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode(
+        '''
 final dynamic a = 0;
 var v = const <int>{if (1 > 0) a else 0};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+''',
+        analysisOptions.experimentStatus.constant_update_2018
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 19),
+              ]);
   }
 
   test_const_ifElement_thenFalse_constThen() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         '''
 const dynamic a = 0;
 var v = const <int>{if (1 < 0) a};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
             ? []
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 12),
+              ]);
   }
 
   test_const_ifElement_thenFalse_finalThen() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode(
+        '''
 final dynamic a = 0;
 var v = const <int>{if (1 < 0) a};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+''',
+        analysisOptions.experimentStatus.constant_update_2018
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 12),
+              ]);
   }
 
   test_const_ifElement_thenTrue_constThen() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         '''
 const dynamic a = 0;
 var v = const <int>{if (1 > 0) a};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
             ? []
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 12),
+              ]);
   }
 
   test_const_ifElement_thenTrue_finalThen() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode(
+        '''
 final dynamic a = 0;
 var v = const <int>{if (1 > 0) a};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+''',
+        analysisOptions.experimentStatus.constant_update_2018
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 52, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 12),
+              ]);
   }
 
   test_const_parameter() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 f(a) {
   return const {a};
-}''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+}''', [
+      error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 23, 1),
+    ]);
   }
 
   test_const_spread_final() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(
+        r'''
 final Set x = null;
 var v = const {...x};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+''',
+        analysisOptions.experimentStatus.constant_update_2018
+            ? [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 38, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 35, 4),
+              ]);
   }
 
   test_const_topVar() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 final dynamic a = 0;
 var v = const <int>{a};
-''', [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+''', [
+      error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 1),
+    ]);
   }
 
   test_nonConst_topVar() async {
diff --git a/pkg/analyzer/test/src/diagnostics/non_constant_spread_expression_from_deferred_library_test.dart b/pkg/analyzer/test/src/diagnostics/non_constant_spread_expression_from_deferred_library_test.dart
index ac6d136..b8ad8b4 100644
--- a/pkg/analyzer/test/src/diagnostics/non_constant_spread_expression_from_deferred_library_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/non_constant_spread_expression_from_deferred_library_test.dart
@@ -23,7 +23,7 @@
   test_inList_deferred() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const List c = [];''');
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 import 'lib1.dart' deferred as a;
 f() {
@@ -31,10 +31,15 @@
 }''',
         analysisOptions.experimentStatus.constant_update_2018
             ? [
-                CompileTimeErrorCode
-                    .NON_CONSTANT_SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY
+                error(
+                    CompileTimeErrorCode
+                        .NON_CONSTANT_SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY,
+                    59,
+                    3),
               ]
-            : [CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 56, 6),
+              ]);
   }
 
   test_inList_deferred_notConst() async {
@@ -50,7 +55,7 @@
   test_inList_notDeferred() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const List c = [];''');
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 import 'lib1.dart' as a;
 f() {
@@ -58,13 +63,15 @@
 }''',
         analysisOptions.experimentStatus.constant_update_2018
             ? []
-            : [CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_LIST_ELEMENT, 47, 6),
+              ]);
   }
 
   test_inMap_deferred() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const Map c = <int, int>{};''');
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 import 'lib1.dart' deferred as a;
 f() {
@@ -72,10 +79,15 @@
 }''',
         analysisOptions.experimentStatus.constant_update_2018
             ? [
-                CompileTimeErrorCode
-                    .NON_CONSTANT_SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY
+                error(
+                    CompileTimeErrorCode
+                        .NON_CONSTANT_SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY,
+                    59,
+                    3),
               ]
-            : [CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 56, 6),
+              ]);
   }
 
   test_inMap_notConst() async {
@@ -91,7 +103,7 @@
   test_inMap_notDeferred() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const Map c = <int, int>{};''');
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 import 'lib1.dart' as a;
 f() {
@@ -99,13 +111,15 @@
 }''',
         analysisOptions.experimentStatus.constant_update_2018
             ? []
-            : [CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_MAP_ELEMENT, 47, 6),
+              ]);
   }
 
   test_inSet_deferred() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const Set c = <int>{};''');
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 import 'lib1.dart' deferred as a;
 f() {
@@ -113,10 +127,15 @@
 }''',
         analysisOptions.experimentStatus.constant_update_2018
             ? [
-                CompileTimeErrorCode
-                    .NON_CONSTANT_SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY
+                error(
+                    CompileTimeErrorCode
+                        .NON_CONSTANT_SPREAD_EXPRESSION_FROM_DEFERRED_LIBRARY,
+                    59,
+                    3),
               ]
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 56, 6),
+              ]);
   }
 
   test_inSet_notConst() async {
@@ -132,7 +151,7 @@
   test_inSet_notDeferred() async {
     newFile(convertPath('/test/lib/lib1.dart'), content: r'''
 const Set c = <int>{};''');
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         r'''
 import 'lib1.dart' as a;
 f() {
@@ -140,7 +159,9 @@
 }''',
         analysisOptions.experimentStatus.constant_update_2018
             ? []
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 47, 6),
+              ]);
   }
 }
 
diff --git a/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
index 129bb73..4b774e1 100644
--- a/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_iterable_spread_test.dart
@@ -29,30 +29,39 @@
   }
 
   test_notIterable_direct() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var a = 0;
 var v = [...a];
-''', [CompileTimeErrorCode.NOT_ITERABLE_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_ITERABLE_SPREAD, 23, 1),
+    ]);
   }
 
   test_notIterable_forElement() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var a = 0;
 var v = [for (var i in []) ...a];
-''', [CompileTimeErrorCode.NOT_ITERABLE_SPREAD]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 29, 1),
+      error(CompileTimeErrorCode.NOT_ITERABLE_SPREAD, 41, 1),
+    ]);
   }
 
   test_notIterable_ifElement_else() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var a = 0;
 var v = [if (1 > 0) ...[] else ...a];
-''', [CompileTimeErrorCode.NOT_ITERABLE_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_ITERABLE_SPREAD, 45, 1),
+    ]);
   }
 
   test_notIterable_ifElement_then() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var a = 0;
 var v = [if (1 > 0) ...a];
-''', [CompileTimeErrorCode.NOT_ITERABLE_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_ITERABLE_SPREAD, 34, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
index d5142c1..2f7e415 100644
--- a/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_map_spread_test.dart
@@ -29,30 +29,39 @@
   }
 
   test_notMap_direct() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var a = 0;
 var v = <int, int>{...a};
-''', [CompileTimeErrorCode.NOT_MAP_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_MAP_SPREAD, 33, 1),
+    ]);
   }
 
   test_notMap_forElement() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var a = 0;
 var v = <int, int>{for (var i in []) ...a};
-''', [CompileTimeErrorCode.NOT_MAP_SPREAD]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 39, 1),
+      error(CompileTimeErrorCode.NOT_MAP_SPREAD, 51, 1),
+    ]);
   }
 
   test_notMap_ifElement_else() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var a = 0;
 var v = <int, int>{if (1 > 0) ...<int, int>{} else ...a};
-''', [CompileTimeErrorCode.NOT_MAP_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_MAP_SPREAD, 65, 1),
+    ]);
   }
 
   test_notMap_ifElement_then() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var a = 0;
 var v = <int, int>{if (1 > 0) ...a};
-''', [CompileTimeErrorCode.NOT_MAP_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_MAP_SPREAD, 44, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart b/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart
index 56bcd2c..115ffde 100644
--- a/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/not_null_aware_null_spread_test.dart
@@ -16,16 +16,20 @@
 @reflectiveTest
 class NotNullAwareNullSpreadTest extends DriverResolutionTest {
   test_listLiteral_notNullAware_nullLiteral() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var v = [...null];
-''', [CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD, 12, 4),
+    ]);
   }
 
   test_listLiteral_notNullAware_nullTyped() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 Null a = null;
 var v = [...a];
-''', [CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD, 27, 1),
+    ]);
   }
 
   test_listLiteral_nullAware_nullLiteral() async {
@@ -42,16 +46,20 @@
   }
 
   test_mapLiteral_notNullAware_nullLiteral() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var v = <int, int>{...null};
-''', [CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD, 22, 4),
+    ]);
   }
 
   test_mapLiteral_notNullAware_nullType() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 Null a = null;
 var v = <int, int>{...a};
-''', [CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD, 37, 1),
+    ]);
   }
 
   test_mapLiteral_nullAware_nullLiteral() async {
@@ -68,16 +76,20 @@
   }
 
   test_setLiteral_notNullAware_nullLiteral() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var v = <int>{...null};
-''', [CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD, 17, 4),
+    ]);
   }
 
   test_setLiteral_notNullAware_nullTyped() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 Null a = null;
 var v = <int>{...a};
-''', [CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD]);
+''', [
+      error(CompileTimeErrorCode.NOT_NULL_AWARE_NULL_SPREAD, 32, 1),
+    ]);
   }
 
   test_setLiteral_nullAware_nullLiteral() async {
diff --git a/pkg/analyzer/test/src/diagnostics/null_aware_before_operator_test.dart b/pkg/analyzer/test/src/diagnostics/null_aware_before_operator_test.dart
index 7f89a71..6b5be07 100644
--- a/pkg/analyzer/test/src/diagnostics/null_aware_before_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/null_aware_before_operator_test.dart
@@ -48,11 +48,13 @@
   }
 
   test_minus() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   x?.a - '';
 }
-''', [HintCode.NULL_AWARE_BEFORE_OPERATOR]);
+''', [
+      error(HintCode.NULL_AWARE_BEFORE_OPERATOR, 9, 4),
+    ]);
   }
 
   test_not_equal() async {
diff --git a/pkg/analyzer/test/src/diagnostics/null_aware_in_condition_test.dart b/pkg/analyzer/test/src/diagnostics/null_aware_in_condition_test.dart
index 89203f2..c057732 100644
--- a/pkg/analyzer/test/src/diagnostics/null_aware_in_condition_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/null_aware_in_condition_test.dart
@@ -16,58 +16,72 @@
 @reflectiveTest
 class NullAwareInConditionTest extends DriverResolutionTest {
   test_assert() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   assert (x?.a);
 }
-''', [HintCode.NULL_AWARE_IN_CONDITION]);
+''', [
+      error(HintCode.NULL_AWARE_IN_CONDITION, 17, 4),
+    ]);
   }
 
   test_conditionalExpression() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   return x?.a ? 0 : 1;
 }
-''', [HintCode.NULL_AWARE_IN_CONDITION]);
+''', [
+      error(HintCode.NULL_AWARE_IN_CONDITION, 16, 4),
+    ]);
   }
 
   test_do() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   do {} while (x?.a);
 }
-''', [HintCode.NULL_AWARE_IN_CONDITION]);
+''', [
+      error(HintCode.NULL_AWARE_IN_CONDITION, 22, 4),
+    ]);
   }
 
   test_for() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   for (var v = x; v?.a; v = v.next) {}
 }
-''', [HintCode.NULL_AWARE_IN_CONDITION]);
+''', [
+      error(HintCode.NULL_AWARE_IN_CONDITION, 25, 4),
+    ]);
   }
 
   test_if() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   if (x?.a) {}
 }
-''', [HintCode.NULL_AWARE_IN_CONDITION]);
+''', [
+      error(HintCode.NULL_AWARE_IN_CONDITION, 13, 4),
+    ]);
   }
 
   test_if_parenthesized() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   if ((x?.a)) {}
 }
-''', [HintCode.NULL_AWARE_IN_CONDITION]);
+''', [
+      error(HintCode.NULL_AWARE_IN_CONDITION, 13, 6),
+    ]);
   }
 
   test_while() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   while (x?.a) {}
 }
-''', [HintCode.NULL_AWARE_IN_CONDITION]);
+''', [
+      error(HintCode.NULL_AWARE_IN_CONDITION, 16, 4),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/null_aware_in_logical_operator_test.dart b/pkg/analyzer/test/src/diagnostics/null_aware_in_logical_operator_test.dart
index b60810e..d445199 100644
--- a/pkg/analyzer/test/src/diagnostics/null_aware_in_logical_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/null_aware_in_logical_operator_test.dart
@@ -16,51 +16,63 @@
 @reflectiveTest
 class NullAwareInLogicalOperatorTest extends DriverResolutionTest {
   test_conditionalAnd_first() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   x?.a && x.b;
 }
-''', [HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR]);
+''', [
+      error(HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR, 9, 4),
+    ]);
   }
 
   test_conditionalAnd_second() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   x.a && x?.b;
 }
-''', [HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR]);
+''', [
+      error(HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR, 16, 4),
+    ]);
   }
 
   test_conditionalAnd_third() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   x.a && x.b && x?.c;
 }
-''', [HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR]);
+''', [
+      error(HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR, 23, 4),
+    ]);
   }
 
   test_conditionalOr_first() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   x?.a || x.b;
 }
-''', [HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR]);
+''', [
+      error(HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR, 9, 4),
+    ]);
   }
 
   test_conditionalOr_second() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   x.a || x?.b;
 }
-''', [HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR]);
+''', [
+      error(HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR, 16, 4),
+    ]);
   }
 
   test_conditionalOr_third() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   x.a || x.b || x?.c;
 }
-''', [HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR]);
+''', [
+      error(HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR, 23, 4),
+    ]);
   }
 
   test_for_noCondition() async {
@@ -80,10 +92,12 @@
   }
 
   test_not() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(x) {
   !x?.a;
 }
-''', [HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR]);
+''', [
+      error(HintCode.NULL_AWARE_IN_LOGICAL_OPERATOR, 10, 4),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/nullable_type_in_extends_clause_test.dart b/pkg/analyzer/test/src/diagnostics/nullable_type_in_extends_clause_test.dart
index 2478d79..b2f454b 100644
--- a/pkg/analyzer/test/src/diagnostics/nullable_type_in_extends_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/nullable_type_in_extends_clause_test.dart
@@ -29,10 +29,12 @@
   }
 
   test_class_nullable() async {
-    assertErrorCodesInCode('''
+    assertErrorsInCode('''
 class A {}
 class B extends A? {}
-''', [CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE]);
+''', [
+      error(CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE, 27, 2),
+    ]);
   }
 
   test_classAlias_withClass_nonNullable() async {
@@ -44,11 +46,13 @@
   }
 
   test_classAlias_withClass_nullable() async {
-    assertErrorCodesInCode('''
+    assertErrorsInCode('''
 class A {}
 class B {}
 class C = A? with B;
-''', [CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE]);
+''', [
+      error(CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE, 32, 2),
+    ]);
   }
 
   test_classAlias_withMixin_nonNullable() async {
@@ -60,10 +64,12 @@
   }
 
   test_classAlias_withMixin_nullable() async {
-    assertErrorCodesInCode('''
+    assertErrorsInCode('''
 class A {}
 mixin B {}
 class C = A? with B;
-''', [CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE]);
+''', [
+      error(CompileTimeErrorCode.NULLABLE_TYPE_IN_EXTENDS_CLAUSE, 32, 2),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/nullable_type_in_implements_clause_test.dart b/pkg/analyzer/test/src/diagnostics/nullable_type_in_implements_clause_test.dart
index ec81d73..39ffb8e 100644
--- a/pkg/analyzer/test/src/diagnostics/nullable_type_in_implements_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/nullable_type_in_implements_clause_test.dart
@@ -29,10 +29,12 @@
   }
 
   test_class_nullable() async {
-    assertErrorCodesInCode('''
+    assertErrorsInCode('''
 class A {}
 class B implements A? {}
-''', [CompileTimeErrorCode.NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE]);
+''', [
+      error(CompileTimeErrorCode.NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE, 30, 2),
+    ]);
   }
 
   test_mixin_nonNullable() async {
@@ -43,9 +45,11 @@
   }
 
   test_mixin_nullable() async {
-    assertErrorCodesInCode('''
+    assertErrorsInCode('''
 class A {}
 mixin B implements A? {}
-''', [CompileTimeErrorCode.NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE]);
+''', [
+      error(CompileTimeErrorCode.NULLABLE_TYPE_IN_IMPLEMENTS_CLAUSE, 30, 2),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/nullable_type_in_on_clause_test.dart b/pkg/analyzer/test/src/diagnostics/nullable_type_in_on_clause_test.dart
index d9613ee..60e319a 100644
--- a/pkg/analyzer/test/src/diagnostics/nullable_type_in_on_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/nullable_type_in_on_clause_test.dart
@@ -29,9 +29,11 @@
   }
 
   test_nullable() async {
-    assertErrorCodesInCode('''
+    assertErrorsInCode('''
 class A {}
 mixin B on A? {}
-''', [CompileTimeErrorCode.NULLABLE_TYPE_IN_ON_CLAUSE]);
+''', [
+      error(CompileTimeErrorCode.NULLABLE_TYPE_IN_ON_CLAUSE, 22, 2),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/nullable_type_in_with_clause_test.dart b/pkg/analyzer/test/src/diagnostics/nullable_type_in_with_clause_test.dart
index d25ad1f..c05909c 100644
--- a/pkg/analyzer/test/src/diagnostics/nullable_type_in_with_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/nullable_type_in_with_clause_test.dart
@@ -29,10 +29,12 @@
   }
 
   test_class_nullable() async {
-    assertErrorCodesInCode('''
+    assertErrorsInCode('''
 class A {}
 class B with A? {}
-''', [CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE]);
+''', [
+      error(CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE, 24, 2),
+    ]);
   }
 
   test_classAlias_withClass_nonNullable() async {
@@ -44,11 +46,13 @@
   }
 
   test_classAlias_withClass_nullable() async {
-    assertErrorCodesInCode('''
+    assertErrorsInCode('''
 class A {}
 class B {}
 class C = A with B?;
-''', [CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE]);
+''', [
+      error(CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE, 39, 2),
+    ]);
   }
 
   test_classAlias_withMixin_nonNullable() async {
@@ -60,10 +64,12 @@
   }
 
   test_classAlias_withMixin_nullable() async {
-    assertErrorCodesInCode('''
+    assertErrorsInCode('''
 class A {}
 mixin B {}
 class C = A with B?;
-''', [CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE]);
+''', [
+      error(CompileTimeErrorCode.NULLABLE_TYPE_IN_WITH_CLAUSE, 39, 2),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/override_equals_but_not_hashcode_test.dart b/pkg/analyzer/test/src/diagnostics/override_equals_but_not_hashcode_test.dart
index 7ecb535..7def0c4 100644
--- a/pkg/analyzer/test/src/diagnostics/override_equals_but_not_hashcode_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/override_equals_but_not_hashcode_test.dart
@@ -25,9 +25,11 @@
 
   @failingTest
   test_overrideEquals_andNotHashCode() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   bool operator ==(x) {}
-}''', [HintCode.OVERRIDE_EQUALS_BUT_NOT_HASH_CODE]);
+}''', [
+      error(HintCode.OVERRIDE_EQUALS_BUT_NOT_HASH_CODE, 6, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart
index 514ad99..2a978fe 100644
--- a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_field_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class OverrideOnNonOverridingFieldTest extends DriverResolutionTest {
   test_inInterface() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   int get a => 0;
   void set b(_) {}
@@ -29,11 +29,13 @@
   int b;
   @override
   int c;
-}''', [CompileTimeErrorCode.INVALID_OVERRIDE]);
+}''', [
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 126, 5),
+    ]);
   }
 
   test_inSuperclass() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   int get a => 0;
   void set b(_) {}
@@ -46,16 +48,20 @@
   int b;
   @override
   int c;
-}''', [CompileTimeErrorCode.INVALID_OVERRIDE]);
+}''', [
+      error(CompileTimeErrorCode.INVALID_OVERRIDE, 123, 5),
+    ]);
   }
 
   test_invalid() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
 }
 class B extends A {
   @override
   final int m = 1;
-}''', [HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD]);
+}''', [
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_FIELD, 56, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_getter_test.dart b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_getter_test.dart
index 58dfef6..3a3345c 100644
--- a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_getter_test.dart
@@ -38,12 +38,14 @@
   }
 
   test_invalid() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
 }
 class B extends A {
   @override
   int get m => 1;
-}''', [HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER]);
+}''', [
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_GETTER, 54, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_method_test.dart b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_method_test.dart
index 608295d..19a2cbd 100644
--- a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_method_test.dart
@@ -65,12 +65,14 @@
   }
 
   test_invalid() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
 }
 class B extends A {
   @override
   int m() => 1;
-}''', [HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD]);
+}''', [
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_METHOD, 50, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_setter_test.dart b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_setter_test.dart
index 0625741..748aa24 100644
--- a/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/override_on_non_overriding_setter_test.dart
@@ -38,12 +38,14 @@
   }
 
   test_invalid() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
 }
 class B extends A {
   @override
   set m(int x) {}
-}''', [HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER]);
+}''', [
+      error(HintCode.OVERRIDE_ON_NON_OVERRIDING_SETTER, 50, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_constraint_verifier_support.dart b/pkg/analyzer/test/src/diagnostics/sdk_constraint_verifier_support.dart
index feb02f5..8bd294a 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_constraint_verifier_support.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_constraint_verifier_support.dart
@@ -2,10 +2,10 @@
 // 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/error/error.dart';
 import 'package:pub_semver/pub_semver.dart';
 
 import '../dart/resolution/driver_resolution.dart';
+import '../../generated/test_support.dart';
 
 /// A base class designed to be used by tests of the hints produced by the
 /// SdkConstraintVerifier.
@@ -13,10 +13,10 @@
   /// Verify that the [errorCodes] are produced if the [source] is analyzed in
   /// a context that specifies the minimum SDK version to be [version].
   verifyVersion(String version, String source,
-      {List<ErrorCode> errorCodes}) async {
+      {List<ExpectedError> expectedErrors}) async {
     driver.configure(
         analysisOptions: analysisOptions
           ..sdkVersionConstraint = VersionConstraint.parse(version));
-    await assertErrorCodesInCode(source, errorCodes ?? []);
+    await assertErrorsInCode(source, expectedErrors ?? []);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_as_expression_in_const_context_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_as_expression_in_const_context_test.dart
index 2dc0373..106093c 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_as_expression_in_const_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_as_expression_in_const_context_test.dart
@@ -33,6 +33,8 @@
     verifyVersion('2.2.0', '''
 const dynamic a = 2;
 const c = (a as int) + 2;
-''', errorCodes: [HintCode.SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_AS_EXPRESSION_IN_CONST_CONTEXT, 32, 8),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_async_exported_from_core_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_async_exported_from_core_test.dart
index 7e04d6d..2a296e2 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_async_exported_from_core_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_async_exported_from_core_test.dart
@@ -72,7 +72,9 @@
 import 'dart:core' show Future, int;
 
 Future<int> zero() async => 0;
-''', errorCodes: [HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE, 38, 6),
+    ]);
   }
 
   test_lessThan_explicitImportOfExportingLibrary() async {
@@ -89,7 +91,9 @@
   test_lessThan_implicitImportOfCore() async {
     await verifyVersion('2.0.0', '''
 Future<int> zero() async => 0;
-''', errorCodes: [HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE, 0, 6),
+    ]);
   }
 
   test_lessThan_implicitImportOfCore_inPart() async {
@@ -100,7 +104,9 @@
 part of lib;
 
 Future<int> zero() async => 0;
-''', errorCodes: [HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_ASYNC_EXPORTED_FROM_CORE, 14, 6),
+    ]);
   }
 
   test_lessThan_onlyReferencedInExport_hide() async {
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_bool_operator_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_bool_operator_test.dart
index 29f4773..4183627 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_bool_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_bool_operator_test.dart
@@ -30,7 +30,9 @@
   test_and_const_lessThan() {
     verifyVersion('2.2.0', '''
 const c = true & false;
-''', errorCodes: [HintCode.SDK_VERSION_BOOL_OPERATOR]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_BOOL_OPERATOR, 15, 1),
+    ]);
   }
 
   test_and_nonConst_equals() {
@@ -54,7 +56,9 @@
   test_or_const_lessThan() {
     verifyVersion('2.2.0', '''
 const c = true | false;
-''', errorCodes: [HintCode.SDK_VERSION_BOOL_OPERATOR]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_BOOL_OPERATOR, 15, 1),
+    ]);
   }
 
   test_or_nonConst_equals() {
@@ -78,7 +82,9 @@
   test_xor_const_lessThan() {
     verifyVersion('2.2.0', '''
 const c = true ^ false;
-''', errorCodes: [HintCode.SDK_VERSION_BOOL_OPERATOR]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_BOOL_OPERATOR, 15, 1),
+    ]);
   }
 
   test_xor_nonConst_equals() {
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart
index f8093af..e1814bb 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_eq_eq_operator_test.dart
@@ -38,7 +38,9 @@
 }
 const A a = A();
 const c = a == null;
-''', errorCodes: [HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT, 54, 2),
+    ]);
   }
 
   test_right_equals() {
@@ -58,6 +60,8 @@
 }
 const A a = A();
 const c = null == a;
-''', errorCodes: [HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_EQ_EQ_OPERATOR_IN_CONST_CONTEXT, 57, 2),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_gt_gt_gt_operator_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_gt_gt_gt_operator_test.dart
index 38d71f0..ed8c441 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_gt_gt_gt_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_gt_gt_gt_operator_test.dart
@@ -26,7 +26,9 @@
     //  UNDEFINED_OPERATOR when triple_shift is enabled by default.
     verifyVersion('2.3.2', '''
 const a = 42 >>> 3;
-''', errorCodes: [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+''', expectedErrors: [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 13, 3),
+    ]);
   }
 
   test_const_lessThan() {
@@ -34,9 +36,9 @@
     //  UNDEFINED_OPERATOR when triple_shift is enabled by default.
     verifyVersion('2.2.0', '''
 const a = 42 >>> 3;
-''', errorCodes: [
-      StaticTypeWarningCode.UNDEFINED_OPERATOR,
-      HintCode.SDK_VERSION_GT_GT_GT_OPERATOR
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_GT_GT_GT_OPERATOR, 13, 3),
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 13, 3),
     ]);
   }
 
@@ -53,7 +55,9 @@
 class A {
   A operator >>>(A a) => this;
 }
-''', errorCodes: [HintCode.SDK_VERSION_GT_GT_GT_OPERATOR]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_GT_GT_GT_OPERATOR, 23, 3),
+    ]);
   }
 
   test_nonConst_equals() {
@@ -61,7 +65,9 @@
     //  UNDEFINED_OPERATOR when constant update is enabled by default.
     verifyVersion('2.3.2', '''
 var a = 42 >>> 3;
-''', errorCodes: [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+''', expectedErrors: [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 11, 3),
+    ]);
   }
 
   test_nonConst_lessThan() {
@@ -69,9 +75,9 @@
     //  UNDEFINED_OPERATOR when constant update is enabled by default.
     verifyVersion('2.2.0', '''
 var a = 42 >>> 3;
-''', errorCodes: [
-      StaticTypeWarningCode.UNDEFINED_OPERATOR,
-      HintCode.SDK_VERSION_GT_GT_GT_OPERATOR
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_GT_GT_GT_OPERATOR, 11, 3),
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 11, 3),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_is_expression_in_const_context_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_is_expression_in_const_context_test.dart
index 9b19e3c..fb7197a 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_is_expression_in_const_context_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_is_expression_in_const_context_test.dart
@@ -33,6 +33,8 @@
     verifyVersion('2.2.0', '''
 const dynamic a = 2;
 const c = a is int;
-''', errorCodes: [HintCode.SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_IS_EXPRESSION_IN_CONST_CONTEXT, 31, 8),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
index 749e00f..f9703db 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_never_test.dart
@@ -43,6 +43,8 @@
   test_lessThan() async {
     await verifyVersion('2.3.0', '''
 Never sink;
-''', errorCodes: [HintCode.SDK_VERSION_NEVER]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_NEVER, 0, 5),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_set_literal_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_set_literal_test.dart
index 4a7b294..8164001 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_set_literal_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_set_literal_test.dart
@@ -30,6 +30,8 @@
   test_lessThan() async {
     await verifyVersion('2.1.0', '''
 Set<int> zero() => <int>{0};
-''', errorCodes: [HintCode.SDK_VERSION_SET_LITERAL]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_SET_LITERAL, 19, 8),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/sdk_version_ui_as_code_test.dart b/pkg/analyzer/test/src/diagnostics/sdk_version_ui_as_code_test.dart
index 53017da..b75a1a6 100644
--- a/pkg/analyzer/test/src/diagnostics/sdk_version_ui_as_code_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/sdk_version_ui_as_code_test.dart
@@ -30,6 +30,8 @@
   test_lessThan() async {
     await verifyVersion('2.2.1', '''
 List<int> zero() => [if (0 < 1) 0];
-''', errorCodes: [HintCode.SDK_VERSION_UI_AS_CODE]);
+''', expectedErrors: [
+      error(HintCode.SDK_VERSION_UI_AS_CODE, 21, 12),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart b/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart
index 641a352..caac598 100644
--- a/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/set_element_type_not_assignable_test.dart
@@ -19,7 +19,7 @@
 @reflectiveTest
 class SetElementTypeNotAssignableTest extends DriverResolutionTest {
   test_const_ifElement_thenElseFalse_intInt() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         '''
 const dynamic a = 0;
 const dynamic b = 0;
@@ -27,81 +27,101 @@
 ''',
         analysisOptions.experimentStatus.constant_update_2018
             ? []
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 62, 19),
+              ]);
   }
 
   test_const_ifElement_thenElseFalse_intString() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         '''
 const dynamic a = 0;
 const dynamic b = 'b';
 var v = const <int>{if (1 < 0) a else b};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
-            ? [StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE]
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            ? [
+                error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 82, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 64, 19),
+              ]);
   }
 
   test_const_ifElement_thenFalse_intString() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         '''
 var v = const <int>{if (1 < 0) 'a'};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
-            ? [StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE]
+            ? [
+                error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 31, 3),
+              ]
             : [
-                StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE,
-                CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 20, 14),
+                error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 31, 3),
               ]);
   }
 
   test_const_ifElement_thenFalse_intString_dynamic() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         '''
 const dynamic a = 'a';
 var v = const <int>{if (1 < 0) a};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
             ? []
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 43, 12),
+              ]);
   }
 
   test_const_ifElement_thenTrue_intInt() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         '''
 const dynamic a = 0;
 var v = const <int>{if (true) a};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
             ? []
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 41, 11),
+              ]);
   }
 
   test_const_ifElement_thenTrue_intString() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         '''
 const dynamic a = 'a';
 var v = const <int>{if (true) a};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
-            ? [StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE]
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            ? [
+                error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 53, 1),
+              ]
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 43, 11),
+              ]);
   }
 
   test_const_spread_intInt() async {
-    await assertErrorCodesInCode(
+    await assertErrorsInCode(
         '''
 var v = const <int>{...[0, 1]};
 ''',
         analysisOptions.experimentStatus.constant_update_2018
             ? []
-            : [CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT]);
+            : [
+                error(CompileTimeErrorCode.NON_CONSTANT_SET_ELEMENT, 20, 9),
+              ]);
   }
 
   test_explicitTypeArgs_const() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var v = const <String>{42};
-''', [StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE]);
+''', [
+      error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 23, 2),
+    ]);
   }
 
   test_explicitTypeArgs_const_actualTypeMatch() async {
@@ -112,16 +132,20 @@
   }
 
   test_explicitTypeArgs_const_actualTypeMismatch() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 const dynamic x = 42;
 var v = const <String>{x};
-''', [StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE]);
+''', [
+      error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 45, 1),
+    ]);
   }
 
   test_explicitTypeArgs_notConst() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var v = <String>{42};
-''', [StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE]);
+''', [
+      error(StaticWarningCode.SET_ELEMENT_TYPE_NOT_ASSIGNABLE, 17, 2),
+    ]);
   }
 
   test_nonConst_ifElement_thenElseFalse_intDynamic() async {
@@ -141,9 +165,11 @@
   }
 
   test_nonConst_ifElement_thenFalse_intString() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 var v = <int>[if (1 < 0) 'a'];
-''', [StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE]);
+''', [
+      error(StaticWarningCode.LIST_ELEMENT_TYPE_NOT_ASSIGNABLE, 25, 3),
+    ]);
   }
 
   test_nonConst_ifElement_thenTrue_intDynamic() async {
diff --git a/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart b/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart
index 2a28469..ceb09b7 100644
--- a/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/top_level_instance_getter_test.dart
@@ -89,64 +89,76 @@
   }
 
   test_implicitlyTyped() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   get g => 0;
 }
 var b = new A().g;
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 42, 1),
+    ]);
   }
 
   test_implicitlyTyped_call() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   get g => () => 0;
 }
 var a = new A();
 var b = a.g();
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 57, 5),
+    ]);
   }
 
   test_implicitlyTyped_field() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   var g = 0;
 }
 var b = new A().g;
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 41, 1),
+    ]);
   }
 
   test_implicitlyTyped_field_call() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   var g = () => 0;
 }
 var a = new A();
 var b = a.g();
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 56, 5),
+    ]);
   }
 
   test_implicitlyTyped_field_prefixedIdentifier() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   var g = 0;
 }
 var a = new A();
 var b = a.g;
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 52, 1),
+    ]);
   }
 
   test_implicitlyTyped_fn() async {
     // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because f is
     // generic, so the type of a.x might affect the type of b.
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   var x = 0;
 }
 int f<T>(x) => 0;
 var a = new A();
 var b = f(a.x);
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 72, 1),
+    ]);
   }
 
   test_implicitlyTyped_fn_explicit_type_params() async {
@@ -191,13 +203,15 @@
   test_implicitlyTyped_invoke() async {
     // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because the
     // closure is generic, so the type of a.x might affect the type of b.
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   var x = 0;
 }
 var a = new A();
 var b = (<T>(y) => 0)(a.x);
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 66, 1),
+    ]);
   }
 
   test_implicitlyTyped_invoke_explicit_type_params() async {
@@ -227,14 +241,16 @@
   test_implicitlyTyped_method() async {
     // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because f is
     // generic, so the type of a.x might affect the type of b.
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   var x = 0;
   int f<T>(int x) => 0;
 }
 var a = new A();
 var b = a.f(a.x);
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 80, 1),
+    ]);
   }
 
   test_implicitlyTyped_method_explicit_type_params() async {
@@ -266,7 +282,7 @@
   test_implicitlyTyped_new() async {
     // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because B is
     // generic, so the type of a.x might affect the type of b.
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   var x = 0;
 }
@@ -275,7 +291,9 @@
 }
 var a = new A();
 var b = new B(a.x);
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 81, 1),
+    ]);
   }
 
   test_implicitlyTyped_new_explicit_type_params() async {
@@ -329,7 +347,7 @@
   test_implicitlyTyped_new_named() async {
     // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because B is
     // generic, so the type of a.x might affect the type of b.
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   var x = 0;
 }
@@ -338,7 +356,9 @@
 }
 var a = new A();
 var b = new B.named(a.x);
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 93, 1),
+    ]);
   }
 
   test_implicitlyTyped_new_not_generic() async {
@@ -397,30 +417,34 @@
 ''');
     // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because B is
     // generic, so the type of a.x might affect the type of b.
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 import 'lib1.dart' as foo;
 class A {
   var x = 0;
 }
 var a = new A();
 var b = new foo.B(a.x);
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 89, 1),
+    ]);
   }
 
   test_implicitlyTyped_prefixedIdentifier() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   get g => 0;
 }
 var a = new A();
 var b = a.g;
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 53, 1),
+    ]);
   }
 
   test_implicitlyTyped_propertyAccessLhs() async {
     // The reference to a.x triggers TOP_LEVEL_INSTANCE_GETTER because the type
     // of a.x affects the lookup of y, which in turn affects the type of b.
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   var x = new B();
   int operator[](int value) => 0;
@@ -430,7 +454,9 @@
 }
 var a = new A();
 var b = (a.x).y;
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_GETTER]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_GETTER, 114, 1),
+    ]);
   }
 
   test_prefixedIdentifier() async {
diff --git a/pkg/analyzer/test/src/diagnostics/top_level_instance_method_test.dart b/pkg/analyzer/test/src/diagnostics/top_level_instance_method_test.dart
index 221a7f0..00a78e1 100644
--- a/pkg/analyzer/test/src/diagnostics/top_level_instance_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/top_level_instance_method_test.dart
@@ -16,12 +16,14 @@
 @reflectiveTest
 class TopLevelInstanceMethodTest extends DriverResolutionTest {
   test_noParameter() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   f() => 0;
 }
 var x = new A().f();
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_METHOD, 32, 11),
+    ]);
   }
 
   test_parameter() async {
@@ -34,12 +36,14 @@
   }
 
   test_parameter_generic() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   int f<T>(v) => 0;
 }
 var x = new A().f(0);
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_METHOD, 40, 12),
+    ]);
   }
 
   test_parameter_generic_explicit() async {
@@ -61,21 +65,25 @@
   }
 
   test_tearOff() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   f() => 0;
 }
 var x = new A().f;
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_METHOD, 40, 1),
+    ]);
   }
 
   test_tearOff_parameter() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 class A {
   int f(v) => 0;
 }
 var x = new A().f;
-''', [StrongModeCode.TOP_LEVEL_INSTANCE_METHOD]);
+''', [
+      error(StrongModeCode.TOP_LEVEL_INSTANCE_METHOD, 45, 1),
+    ]);
   }
 
   test_tearoff_static() async {
diff --git a/pkg/analyzer/test/src/diagnostics/type_check_is_not_null_test.dart b/pkg/analyzer/test/src/diagnostics/type_check_is_not_null_test.dart
index 9a473f0..e5e14a3 100644
--- a/pkg/analyzer/test/src/diagnostics/type_check_is_not_null_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_check_is_not_null_test.dart
@@ -16,10 +16,12 @@
 @reflectiveTest
 class TypeCheckIsNotNullTest extends DriverResolutionTest {
   test_not_Null() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 bool m(i) {
   return i is! Null;
 }
-''', [HintCode.TYPE_CHECK_IS_NOT_NULL]);
+''', [
+      error(HintCode.TYPE_CHECK_IS_NOT_NULL, 21, 10),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/type_check_is_null_test.dart b/pkg/analyzer/test/src/diagnostics/type_check_is_null_test.dart
index 42d8555..19d804b 100644
--- a/pkg/analyzer/test/src/diagnostics/type_check_is_null_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/type_check_is_null_test.dart
@@ -16,10 +16,12 @@
 @reflectiveTest
 class TypeCheckIsNullTest extends DriverResolutionTest {
   test_is_Null() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 bool m(i) {
   return i is Null;
 }
-''', [HintCode.TYPE_CHECK_IS_NULL]);
+''', [
+      error(HintCode.TYPE_CHECK_IS_NULL, 21, 9),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unchecked_use_of_nullable_value_test.dart b/pkg/analyzer/test/src/diagnostics/unchecked_use_of_nullable_value_test.dart
index 08ffb33..6dc6cfc 100644
--- a/pkg/analyzer/test/src/diagnostics/unchecked_use_of_nullable_value_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unchecked_use_of_nullable_value_test.dart
@@ -31,12 +31,14 @@
   }
 
   test_and_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   bool? x;
   if(x && true) {}
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 22, 1),
+    ]);
   }
 
   test_as_nullable() async {
@@ -58,12 +60,14 @@
   }
 
   test_assert_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   bool? x;
   assert(x);
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 26, 1),
+    ]);
   }
 
   test_await_nonNullable() async {
@@ -94,12 +98,14 @@
   }
 
   test_cascade_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   x..isEven;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+    ]);
   }
 
   test_eq_nullable() async {
@@ -121,12 +127,15 @@
   }
 
   test_forLoop_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   List? x;
   for (var y in x) {}
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 28, 1),
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 33, 1),
+    ]);
   }
 
   test_if_nonNullable() async {
@@ -139,12 +148,14 @@
   }
 
   test_if_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   bool? x;
   if (x) {}
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 23, 1),
+    ]);
   }
 
   test_index_nonNullable() async {
@@ -157,12 +168,14 @@
   }
 
   test_index_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   List? x;
   x[0];
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
+    ]);
   }
 
   test_invoke_dynamicFunctionType_nonNullable() async {
@@ -175,12 +188,14 @@
   }
 
   test_invoke_dynamicFunctionType_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   Function? x;
   x();
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 23, 1),
+    ]);
   }
 
   test_invoke_nonNullable() async {
@@ -193,12 +208,14 @@
   }
 
   test_invoke_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   Function()? x;
   x();
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 25, 1),
+    ]);
   }
 
   test_invoke_parenthesized_nonNullable() async {
@@ -247,12 +264,14 @@
   }
 
   test_member_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   x.isEven;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+    ]);
   }
 
   test_member_parenthesized_hashCode_nullable() async {
@@ -265,12 +284,14 @@
   }
 
   test_member_parenthesized_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   (x).isEven;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 3),
+    ]);
   }
 
   test_member_parenthesized_runtimeType_nullable() async {
@@ -283,21 +304,25 @@
   }
 
   test_member_potentiallyNullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m<T extends int?>() {
   T x;
   x.isEven;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 31, 1),
+    ]);
   }
 
   test_member_potentiallyNullable_called() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m<T extends Function>() {
   List<T?> x;
   x.first();
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 44, 5),
+    ]);
   }
 
   test_member_questionDot_nullable() async {
@@ -337,12 +362,14 @@
   }
 
   test_method_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   x.round();
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+    ]);
   }
 
   test_method_questionDot_nullable() async {
@@ -373,12 +400,15 @@
   }
 
   test_minusEq_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   x -= 1;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+    ]);
   }
 
   test_not_nonNullable() async {
@@ -391,12 +421,14 @@
   }
 
   test_not_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   bool? x;
   if(!x) {}
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 23, 1),
+    ]);
   }
 
   test_notEq_nullable() async {
@@ -418,12 +450,14 @@
   }
 
   test_operatorMinus_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   x - 3;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+    ]);
   }
 
   test_operatorPlus_nonNullable() async {
@@ -436,12 +470,14 @@
   }
 
   test_operatorPlus_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   x + 3;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+    ]);
   }
 
   test_operatorPostfixDec_nonNullable() async {
@@ -454,12 +490,15 @@
   }
 
   test_operatorPostfixDec_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   x--;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+    ]);
   }
 
   test_operatorPostfixInc_nonNullable() async {
@@ -472,12 +511,15 @@
   }
 
   test_operatorPostfixInc_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   x++;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+    ]);
   }
 
   test_operatorPrefixDec_nonNullable() async {
@@ -490,12 +532,15 @@
   }
 
   test_operatorPrefixDec_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   --x;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 20, 1),
+    ]);
   }
 
   test_operatorPrefixInc_nonNullable() async {
@@ -508,12 +553,15 @@
   }
 
   test_operatorPrefixInc_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   ++x;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 20, 1),
+    ]);
   }
 
   test_operatorUnaryMinus_nonNullable() async {
@@ -526,12 +574,15 @@
   }
 
   test_operatorUnaryMinus_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   -x;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
+    ]);
   }
 
   test_or_nonNullable() async {
@@ -544,12 +595,14 @@
   }
 
   test_or_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   bool? x;
   if(x || false) {}
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 22, 1),
+    ]);
   }
 
   test_plusEq_nonNullable() async {
@@ -562,21 +615,26 @@
   }
 
   test_plusEq_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   int? x;
   x += 1;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 13, 1),
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 18, 1),
+    ]);
   }
 
   test_ternary_condition_nullable() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m() {
   bool? x;
   x ? 0 : 1;
 }
-''', [StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE]);
+''', [
+      error(StaticWarningCode.UNCHECKED_USE_OF_NULLABLE_VALUE, 19, 1),
+    ]);
   }
 
   test_ternary_lhs_nullable() async {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
index 3713aef..6feaae5 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_getter_test.dart
@@ -16,11 +16,13 @@
 @reflectiveTest
 class UndefinedGetterTest extends DriverResolutionTest {
   test_ifElement_inList_notPromoted() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 f(int x) {
   return [if (x is String) x.length];
 }
-''', [StaticTypeWarningCode.UNDEFINED_GETTER]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_GETTER, 40, 6),
+    ]);
   }
 
   test_ifElement_inList_promoted() async {
@@ -32,11 +34,13 @@
   }
 
   test_ifElement_inMap_notPromoted() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 f(int x) {
   return {if (x is String) x : x.length};
 }
-''', [StaticTypeWarningCode.UNDEFINED_GETTER]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_GETTER, 44, 6),
+    ]);
   }
 
   test_ifElement_inMap_promoted() async {
@@ -48,11 +52,13 @@
   }
 
   test_ifElement_inSet_notPromoted() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 f(int x) {
   return {if (x is String) x.length};
 }
-''', [StaticTypeWarningCode.UNDEFINED_GETTER]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_GETTER, 40, 6),
+    ]);
   }
 
   test_ifElement_inSet_promoted() async {
@@ -64,13 +70,15 @@
   }
 
   test_ifStatement_notPromoted() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 f(int x) {
   if (x is String) {
     x.length;
   }
 }
-''', [StaticTypeWarningCode.UNDEFINED_GETTER]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_GETTER, 38, 6),
+    ]);
   }
 
   test_ifStatement_promoted() async {
@@ -84,12 +92,14 @@
   }
 
   test_promotedTypeParameter_regress35305() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 void f<X extends num, Y extends X>(Y y) {
   if (y is int) {
     y.isEven;
   }
 }
-''', [StaticTypeWarningCode.UNDEFINED_GETTER]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_GETTER, 66, 6),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
index 888721c..94e0131 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_hidden_name_test.dart
@@ -17,15 +17,20 @@
 class UndefinedHiddenNameTest extends DriverResolutionTest {
   test_export() async {
     newFile('/test/lib/lib1.dart');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 export 'lib1.dart' hide a;
-''', [HintCode.UNDEFINED_HIDDEN_NAME]);
+''', [
+      error(HintCode.UNDEFINED_HIDDEN_NAME, 24, 1),
+    ]);
   }
 
   test_import() async {
     newFile('/test/lib/lib1.dart');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart' hide a;
-''', [HintCode.UNUSED_IMPORT, HintCode.UNDEFINED_HIDDEN_NAME]);
+''', [
+      error(HintCode.UNUSED_IMPORT, 7, 11),
+      error(HintCode.UNDEFINED_HIDDEN_NAME, 24, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
index 3a8e91f..895322a 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_identifier_test.dart
@@ -24,11 +24,14 @@
   }
 
   test_forElement_inList_outsideElement() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 f() {
   return [for (int x in []) null, x];
 }
-''', [StaticWarningCode.UNDEFINED_IDENTIFIER]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 25, 1),
+      error(StaticWarningCode.UNDEFINED_IDENTIFIER, 40, 1),
+    ]);
   }
 
   test_forStatement_inBody() async {
@@ -42,11 +45,14 @@
   }
 
   test_forStatement_outsideBody() async {
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 f() {
   for (int x in []) {}
   x;
 }
-''', [StaticWarningCode.UNDEFINED_IDENTIFIER]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 17, 1),
+      error(StaticWarningCode.UNDEFINED_IDENTIFIER, 31, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
index a10a3ee..8ce6206 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_operator_test.dart
@@ -16,18 +16,20 @@
 @reflectiveTest
 class UndefinedOperatorTest extends DriverResolutionTest {
   test_binaryExpression() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {}
 f(var a) {
   if (a is A) {
     a + 1;
   }
 }
-''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 44, 1),
+    ]);
   }
 
   test_binaryExpression_inSubtype() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {}
 class B extends A {
   operator +(B b) {}
@@ -37,11 +39,13 @@
     a + 1;
   }
 }
-''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 87, 1),
+    ]);
   }
 
   test_indexBoth() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {}
 f(var a) {
   if (a is A) {
@@ -49,13 +53,13 @@
   }
 }
 ''', [
-      StaticTypeWarningCode.UNDEFINED_OPERATOR,
-      StaticTypeWarningCode.UNDEFINED_OPERATOR,
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 43, 3),
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 43, 3),
     ]);
   }
 
   test_indexBoth_inSubtype() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {}
 class B extends A {
   operator [](int index) {}
@@ -66,24 +70,26 @@
   }
 }
 ''', [
-      StaticTypeWarningCode.UNDEFINED_OPERATOR,
-      StaticTypeWarningCode.UNDEFINED_OPERATOR,
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 93, 3),
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 93, 3),
     ]);
   }
 
   test_indexGetter() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {}
 f(var a) {
   if (a is A) {
     a[0];
   }
 }
-''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 43, 3),
+    ]);
   }
 
   test_indexGetter_inSubtype() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {}
 class B extends A {
   operator [](int index) {}
@@ -93,22 +99,26 @@
     a[0];
   }
 }
-''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 93, 3),
+    ]);
   }
 
   test_indexSetter() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {}
 f(var a) {
   if (a is A) {
     a[0] = 1;
   }
 }
-''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 43, 3),
+    ]);
   }
 
   test_indexSetter_inSubtype() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {}
 class B extends A {
   operator []=(i, v) {}
@@ -118,7 +128,9 @@
     a[0] = 1;
   }
 }
-''', [StaticTypeWarningCode.UNDEFINED_OPERATOR]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_OPERATOR, 89, 3),
+    ]);
   }
 
   test_postfixExpression() async {
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
index 6de8429..3485b60 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_prefixed_name_test.dart
@@ -17,19 +17,23 @@
 class UndefinedPrefixedNameTest extends DriverResolutionTest {
   test_getterContext() async {
     newFile('/test/lib/lib.dart');
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 import 'lib.dart' as p;
 f() => p.c;
-''', [StaticTypeWarningCode.UNDEFINED_PREFIXED_NAME]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_PREFIXED_NAME, 33, 1),
+    ]);
   }
 
   test_setterContext() async {
     newFile('/test/lib/lib.dart');
-    await assertErrorCodesInCode('''
+    await assertErrorsInCode('''
 import 'lib.dart' as p;
 f() {
   p.c = 0;
 }
-''', [StaticTypeWarningCode.UNDEFINED_PREFIXED_NAME]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_PREFIXED_NAME, 34, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
index 7306c0e..827b77e 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_setter_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class UndefinedSetterTest extends DriverResolutionTest {
   test_inSubtype() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {}
 class B extends A {
   set b(x) {}
@@ -26,17 +26,21 @@
     a.b = 0;
   }
 }
-''', [StaticTypeWarningCode.UNDEFINED_SETTER]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_SETTER, 80, 1),
+    ]);
   }
 
   test_inType() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {}
 f(var a) {
   if(a is A) {
     a.m = 0;
   }
 }
-''', [StaticTypeWarningCode.UNDEFINED_SETTER]);
+''', [
+      error(StaticTypeWarningCode.UNDEFINED_SETTER, 43, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
index 3243bb2..121fbda 100644
--- a/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/undefined_shown_name_test.dart
@@ -17,15 +17,20 @@
 class UndefinedShownNameTest extends DriverResolutionTest {
   test_export() async {
     newFile('/test/lib/lib1.dart');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 export 'lib1.dart' show a;
-''', [HintCode.UNDEFINED_SHOWN_NAME]);
+''', [
+      error(HintCode.UNDEFINED_SHOWN_NAME, 24, 1),
+    ]);
   }
 
   test_import() async {
     newFile('/test/lib/lib1.dart');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart' show a;
-''', [HintCode.UNUSED_IMPORT, HintCode.UNDEFINED_SHOWN_NAME]);
+''', [
+      error(HintCode.UNUSED_IMPORT, 7, 11),
+      error(HintCode.UNDEFINED_SHOWN_NAME, 24, 1),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
index 0d89796..a7a5c1a 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_cast_test.dart
@@ -59,13 +59,15 @@
 
   test_generics() async {
     // dartbug.com/18953
-    assertErrorCodesInCode(r'''
+    assertErrorsInCode(r'''
 import 'dart:async';
 Future<int> f() => new Future.value(0);
 void g(bool c) {
   (c ? f(): new Future.value(0) as Future<int>).then((int value) {});
 }
-''', [HintCode.UNNECESSARY_CAST]);
+''', [
+      error(HintCode.UNNECESSARY_CAST, 90, 34),
+    ]);
   }
 
   test_parameter_A() async {
@@ -92,18 +94,24 @@
   }
 
   test_type_supertype() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(int i) {
   var b = i as Object;
 }
-''', [HintCode.UNNECESSARY_CAST]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 17, 1),
+      error(HintCode.UNNECESSARY_CAST, 21, 11),
+    ]);
   }
 
   test_type_type() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(num i) {
   var b = i as num;
 }
-''', [HintCode.UNNECESSARY_CAST]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 17, 1),
+      error(HintCode.UNNECESSARY_CAST, 21, 8),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_no_such_method_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_no_such_method_test.dart
index 0801ae0..d443e12 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_no_such_method_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_no_such_method_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class UnnecessaryNoSuchMethodTest extends DriverResolutionTest {
   test_blockBody() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   noSuchMethod(x) => super.noSuchMethod(x);
 }
@@ -26,7 +26,9 @@
     return super.noSuchMethod(y);
   }
 }
-''', [HintCode.UNNECESSARY_NO_SUCH_METHOD]);
+''', [
+      error(HintCode.UNNECESSARY_NO_SUCH_METHOD, 87, 55),
+    ]);
   }
 
   test_blockBody_notReturnStatement() async {
@@ -59,7 +61,7 @@
   }
 
   test_expressionBody() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   noSuchMethod(x) => super.noSuchMethod(x);
 }
@@ -67,7 +69,9 @@
   mmm();
   noSuchMethod(y) => super.noSuchMethod(y);
 }
-''', [HintCode.UNNECESSARY_NO_SUCH_METHOD]);
+''', [
+      error(HintCode.UNNECESSARY_NO_SUCH_METHOD, 87, 41),
+    ]);
   }
 
   test_expressionBody_notNoSuchMethod() async {
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_false_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_false_test.dart
index e3316ad..727f808 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_false_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_false_test.dart
@@ -16,24 +16,32 @@
 @reflectiveTest
 class UnnecessaryTypeCheckFalseTest extends DriverResolutionTest {
   test_null_not_Null() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 bool b = null is! Null;
-''', [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]);
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 9, 13),
+    ]);
   }
 
   test_type_not_dynamic() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(i) {
   bool b = i is! dynamic;
 }
-''', [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
+      error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 18, 13),
+    ]);
   }
 
   test_type_not_object() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(i) {
   bool b = i is! Object;
 }
-''', [HintCode.UNNECESSARY_TYPE_CHECK_FALSE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
+      error(HintCode.UNNECESSARY_TYPE_CHECK_FALSE, 18, 12),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_true_test.dart b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_true_test.dart
index 269d39a..daae87f 100644
--- a/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_true_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unnecessary_type_check_true_test.dart
@@ -16,24 +16,32 @@
 @reflectiveTest
 class UnnecessaryTypeCheckTrueTest extends DriverResolutionTest {
   test_null_is_Null() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 bool b = null is Null;
-''', [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]);
+''', [
+      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 9, 12),
+    ]);
   }
 
   test_type_is_dynamic() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(i) {
   bool b = i is dynamic;
 }
-''', [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
+      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 18, 12),
+    ]);
   }
 
   test_type_is_object() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 m(i) {
   bool b = i is Object;
 }
-''', [HintCode.UNNECESSARY_TYPE_CHECK_TRUE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 14, 1),
+      error(HintCode.UNNECESSARY_TYPE_CHECK_TRUE, 18, 11),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unused_catch_clause_test.dart b/pkg/analyzer/test/src/diagnostics/unused_catch_clause_test.dart
index de74c41..9eefe4c 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_catch_clause_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_catch_clause_test.dart
@@ -19,13 +19,15 @@
   bool get enableUnusedLocalVariable => true;
 
   test_on_unusedException() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 main() {
   try {
   } on String catch (exception) {
   }
 }
-''', [HintCode.UNUSED_CATCH_CLAUSE]);
+''', [
+      error(HintCode.UNUSED_CATCH_CLAUSE, 38, 9),
+    ]);
   }
 
   test_on_usedException() async {
diff --git a/pkg/analyzer/test/src/diagnostics/unused_catch_stack_test.dart b/pkg/analyzer/test/src/diagnostics/unused_catch_stack_test.dart
index 84303fa..9ee0541 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_catch_stack_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_catch_stack_test.dart
@@ -19,13 +19,15 @@
   bool get enableUnusedLocalVariable => true;
 
   test_on_unusedStack() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 main() {
   try {
   } on String catch (exception, stackTrace) {
   }
 }
-''', [HintCode.UNUSED_CATCH_STACK]);
+''', [
+      error(HintCode.UNUSED_CATCH_STACK, 49, 10),
+    ]);
   }
 
   test_on_usedStack() async {
@@ -40,13 +42,15 @@
   }
 
   test_unusedStack() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 main() {
   try {
   } catch (exception, stackTrace) {
   }
 }
-''', [HintCode.UNUSED_CATCH_STACK]);
+''', [
+      error(HintCode.UNUSED_CATCH_STACK, 39, 10),
+    ]);
   }
 
   test_usedStack() async {
diff --git a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
index 8f16748..ef38d33 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_element_test.dart
@@ -85,7 +85,7 @@
   }
 
   test_class_notUsed_inClassMember() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class _A {
   static staticMethod() {
     new _A();
@@ -94,45 +94,55 @@
     new _A();
   }
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 6, 2),
+    ]);
   }
 
   test_class_notUsed_inConstructorName() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class _A {
   _A() {}
   _A.named() {}
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 6, 2),
+    ]);
   }
 
   test_class_notUsed_isExpression() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class _A {}
 main(p) {
   if (p is _A) {
   }
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 6, 2),
+    ]);
   }
 
   test_class_notUsed_noReference() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class _A {}
 main() {
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 6, 2),
+    ]);
   }
 
   test_class_notUsed_variableDeclaration() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class _A {}
 main() {
   _A v;
   print(v);
 }
 print(x) {}
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 6, 2),
+    ]);
   }
 
   test_enum_isUsed_fieldReference() async {
@@ -145,11 +155,13 @@
   }
 
   test_enum_notUsed_noReference() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 enum _MyEnum {A, B, C}
 main() {
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 5, 7),
+    ]);
   }
 
   test_functionLocal_isUsed_closure() async {
@@ -181,21 +193,25 @@
   }
 
   test_functionLocal_notUsed_noReference() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 main() {
   f() {}
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 11, 1),
+    ]);
   }
 
   test_functionLocal_notUsed_referenceFromItself() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 main() {
   _f(int p) {
     _f(p - 1);
   }
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 11, 2),
+    ]);
   }
 
   test_functionTop_isUsed_invocation() async {
@@ -218,21 +234,25 @@
   }
 
   test_functionTop_notUsed_noReference() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 _f() {}
 main() {
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 0, 2),
+    ]);
   }
 
   test_functionTop_notUsed_referenceFromItself() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 _f(int p) {
   _f(p - 1);
 }
 main() {
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 0, 2),
+    ]);
   }
 
   test_functionTypeAlias_isUsed_isExpression() async {
@@ -274,11 +294,13 @@
   }
 
   test_functionTypeAlias_notUsed_noReference() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 typedef _F(a, b);
 main() {
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 8, 2),
+    ]);
   }
 
   test_getter_isUsed_invocation_implicitThis() async {
@@ -315,21 +337,25 @@
   }
 
   test_getter_notUsed_noReference() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   get _g => null;
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 16, 2),
+    ]);
   }
 
   test_getter_notUsed_referenceFromItself() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   get _g {
     return _g;
   }
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 16, 2),
+    ]);
   }
 
   test_method_isUsed_hasReference_implicitThis() async {
@@ -477,21 +503,25 @@
   }
 
   test_method_notUsed_noReference() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   static _m() {}
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 19, 2),
+    ]);
   }
 
   test_method_notUsed_referenceFromItself() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   static _m(int p) {
     _m(p - 1);
   }
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 19, 2),
+    ]);
   }
 
   test_setter_isUsed_invocation_implicitThis() async {
@@ -528,15 +558,17 @@
   }
 
   test_setter_notUsed_noReference() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   set _s(x) {}
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 16, 2),
+    ]);
   }
 
   test_setter_notUsed_referenceFromItself() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   set _s(int x) {
     if (x > 5) {
@@ -544,7 +576,9 @@
     }
   }
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 16, 2),
+    ]);
   }
 
   test_topLevelVariable_isUsed() async {
@@ -567,11 +601,13 @@
   }
 
   test_topLevelVariable_notUsed() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 int _a = 1;
 main() {
   _a = 2;
 }
-''', [HintCode.UNUSED_ELEMENT]);
+''', [
+      error(HintCode.UNUSED_ELEMENT, 4, 2),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unused_field_test.dart b/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
index a0dacdb..fa17061 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_field_test.dart
@@ -105,40 +105,48 @@
   }
 
   test_unusedField_notUsed_compoundAssign() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   int _f;
   main() {
     _f += 2;
   }
 }
-''', [HintCode.UNUSED_FIELD]);
+''', [
+      error(HintCode.UNUSED_FIELD, 16, 2),
+    ]);
   }
 
   test_unusedField_notUsed_constructorFieldInitializers() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   int _f;
   A() : _f = 0;
 }
-''', [HintCode.UNUSED_FIELD]);
+''', [
+      error(HintCode.UNUSED_FIELD, 16, 2),
+    ]);
   }
 
   test_unusedField_notUsed_fieldFormalParameter() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   int _f;
   A(this._f);
 }
-''', [HintCode.UNUSED_FIELD]);
+''', [
+      error(HintCode.UNUSED_FIELD, 16, 2),
+    ]);
   }
 
   test_unusedField_notUsed_noReference() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   int _f;
 }
-''', [HintCode.UNUSED_FIELD]);
+''', [
+      error(HintCode.UNUSED_FIELD, 16, 2),
+    ]);
   }
 
   test_unusedField_notUsed_nullAssign() async {
@@ -154,29 +162,33 @@
   }
 
   test_unusedField_notUsed_postfixExpr() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   int _f = 0;
   main() {
     _f++;
   }
 }
-''', [HintCode.UNUSED_FIELD]);
+''', [
+      error(HintCode.UNUSED_FIELD, 16, 2),
+    ]);
   }
 
   test_unusedField_notUsed_prefixExpr() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   int _f = 0;
   main() {
     ++_f;
   }
 }
-''', [HintCode.UNUSED_FIELD]);
+''', [
+      error(HintCode.UNUSED_FIELD, 16, 2),
+    ]);
   }
 
   test_unusedField_notUsed_simpleAssignment() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   int _f;
   m() {
@@ -186,6 +198,8 @@
 main(A a) {
   a._f = 2;
 }
-''', [HintCode.UNUSED_FIELD]);
+''', [
+      error(HintCode.UNUSED_FIELD, 16, 2),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
index 84ac848..2159a68 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_import_test.dart
@@ -31,11 +31,13 @@
     newFile('/test/lib/lib1.dart', content: r'''
 class A {}
 ''');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart';
 import 'lib1.dart' as one;
 one.A a;
-''', [HintCode.UNUSED_IMPORT]);
+''', [
+      error(HintCode.UNUSED_IMPORT, 7, 11),
+    ]);
   }
 
   test_as_equalPrefixes_referenced() async {
@@ -63,11 +65,13 @@
     newFile('/test/lib/lib2.dart', content: r'''
 class B {}
 ''');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart' as one;
 import 'lib2.dart' as one;
 one.A a;
-''', [HintCode.UNUSED_IMPORT]);
+''', [
+      error(HintCode.UNUSED_IMPORT, 32, 11),
+    ]);
   }
 
   test_core_library() async {
@@ -131,11 +135,13 @@
     newFile('/test/lib/lib1.dart', content: r'''
 class A {}
 ''');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart';
 import 'lib1.dart' hide A;
 A a;
-''', [HintCode.UNUSED_IMPORT]);
+''', [
+      error(HintCode.UNUSED_IMPORT, 27, 11),
+    ]);
   }
 
   test_inComment_libraryDirective() async {
@@ -200,17 +206,21 @@
 class A {}
 class B {}
 ''');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart' show A;
 import 'lib1.dart' show B;
 A a;
-''', [HintCode.UNUSED_IMPORT]);
+''', [
+      error(HintCode.UNUSED_IMPORT, 34, 11),
+    ]);
   }
 
   test_unusedImport() async {
     newFile('/test/lib/lib1.dart');
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 import 'lib1.dart';
-''', [HintCode.UNUSED_IMPORT]);
+''', [
+      error(HintCode.UNUSED_IMPORT, 7, 11),
+    ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/unused_label_test.dart b/pkg/analyzer/test/src/diagnostics/unused_label_test.dart
index 3322685..4d1c338 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_label_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_label_test.dart
@@ -16,7 +16,7 @@
 @reflectiveTest
 class UnusedLabelTest extends DriverResolutionTest {
   test_unused_inSwitch() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 f(x) {
   switch (x) {
     label: case 0:
@@ -25,17 +25,21 @@
       break;
   }
 }
-''', [HintCode.UNUSED_LABEL]);
+''', [
+      error(HintCode.UNUSED_LABEL, 26, 6),
+    ]);
   }
 
   test_unused_onWhile() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 f(condition()) {
   label: while (condition()) {
     break;
   }
 }
-''', [HintCode.UNUSED_LABEL]);
+''', [
+      error(HintCode.UNUSED_LABEL, 19, 6),
+    ]);
   }
 
   test_used_inSwitch() async {
diff --git a/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart b/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart
index d4281bc..5bf524c 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_local_variable_test.dart
@@ -31,23 +31,27 @@
   }
 
   test_inFunction() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 main() {
   var v = 1;
   v = 2;
 }
-''', [HintCode.UNUSED_LOCAL_VARIABLE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 15, 1),
+    ]);
   }
 
   test_inMethod() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 class A {
   foo() {
     var v = 1;
     v = 2;
   }
 }
-''', [HintCode.UNUSED_LOCAL_VARIABLE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 28, 1),
+    ]);
   }
 
   test_isInvoked() async {
@@ -72,30 +76,36 @@
   }
 
   test_isRead_notUsed_compoundAssign() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 main() {
   var v = 1;
   v += 2;
 }
-''', [HintCode.UNUSED_LOCAL_VARIABLE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 15, 1),
+    ]);
   }
 
   test_isRead_notUsed_postfixExpr() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 main() {
   var v = 1;
   v++;
 }
-''', [HintCode.UNUSED_LOCAL_VARIABLE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 15, 1),
+    ]);
   }
 
   test_isRead_notUsed_prefixExpr() async {
-    await assertErrorCodesInCode(r'''
+    await assertErrorsInCode(r'''
 main() {
   var v = 1;
   ++v;
 }
-''', [HintCode.UNUSED_LOCAL_VARIABLE]);
+''', [
+      error(HintCode.UNUSED_LOCAL_VARIABLE, 15, 1),
+    ]);
   }
 
   test_isRead_usedArgument() async {
diff --git a/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart b/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
index fd823b1..99b749b 100644
--- a/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/unused_shown_name_test.dart
@@ -20,10 +20,12 @@
 class A {}
 class B {}
 ''');
-    assertErrorCodesInCode(r'''
+    assertErrorsInCode(r'''
 import 'lib1.dart' show A, B;
 A a;
-''', [HintCode.UNUSED_SHOWN_NAME]);
+''', [
+      error(HintCode.UNUSED_SHOWN_NAME, 27, 1),
+    ]);
   }
 
   test_unusedShownName_as() async {
@@ -31,10 +33,12 @@
 class A {}
 class B {}
 ''');
-    assertErrorCodesInCode(r'''
+    assertErrorsInCode(r'''
 import 'lib1.dart' as p show A, B;
 p.A a;
-''', [HintCode.UNUSED_SHOWN_NAME]);
+''', [
+      error(HintCode.UNUSED_SHOWN_NAME, 32, 1),
+    ]);
   }
 
   test_unusedShownName_duplicates() async {
@@ -44,12 +48,15 @@
 class C {}
 class D {}
 ''');
-    assertErrorCodesInCode(r'''
+    assertErrorsInCode(r'''
 import 'lib1.dart' show A, B;
 import 'lib1.dart' show C, D;
 A a;
 C c;
-''', [HintCode.UNUSED_SHOWN_NAME, HintCode.UNUSED_SHOWN_NAME]);
+''', [
+      error(HintCode.UNUSED_SHOWN_NAME, 27, 1),
+      error(HintCode.UNUSED_SHOWN_NAME, 57, 1),
+    ]);
   }
 
   test_unusedShownName_topLevelVariable() async {
@@ -59,12 +66,14 @@
 const int var3 = 3;
 const int var4 = 4;
 ''');
-    assertErrorCodesInCode(r'''
+    assertErrorsInCode(r'''
 import 'lib1.dart' show var1, var2;
 import 'lib1.dart' show var3, var4;
 int a = var1;
 int b = var2;
 int c = var3;
-''', [HintCode.UNUSED_SHOWN_NAME]);
+''', [
+      error(HintCode.UNUSED_SHOWN_NAME, 66, 4),
+    ]);
   }
 }
