diff --git a/pkg/analysis_server/test/analysis/notification_navigation_test.dart b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
index a7f279a..890f511 100644
--- a/pkg/analysis_server/test/analysis/notification_navigation_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_navigation_test.dart
@@ -1040,10 +1040,6 @@
 
   @failingTest
   @override
-  test_annotationField() async => super.test_annotationField();
-
-  @failingTest
-  @override
   test_inComment() async => super.test_inComment();
 
   @failingTest
diff --git a/pkg/analysis_server/test/analysis/notification_overrides_test.dart b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
index 23dee92..5942c7c 100644
--- a/pkg/analysis_server/test/analysis/notification_overrides_test.dart
+++ b/pkg/analysis_server/test/analysis/notification_overrides_test.dart
@@ -634,18 +634,6 @@
 
   @failingTest
   @override
-  test_super_fieldByField() async => super.test_super_fieldByField();
-
-  @failingTest
-  @override
-  test_super_fieldByGetter() async => super.test_super_fieldByGetter();
-
-  @failingTest
-  @override
-  test_super_fieldBySetter() async => super.test_super_fieldBySetter();
-
-  @failingTest
-  @override
   test_super_method_superTypeCycle() async {
     fail('Timeout');
 //    return callFailingTest(super.test_super_method_superTypeCycle);
diff --git a/pkg/analysis_server/test/integration/analysis/navigation_test.dart b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
index 1eb6b71..0337b72 100644
--- a/pkg/analysis_server/test/integration/analysis/navigation_test.dart
+++ b/pkg/analysis_server/test/integration/analysis/navigation_test.dart
@@ -139,8 +139,4 @@
 class AnalysisNavigationTest_UseCFE extends AnalysisNavigationTest {
   @override
   bool get useCFE => true;
-
-  @override
-  @failingTest
-  test_navigation() => super.test_navigation();
 }
diff --git a/pkg/analysis_server/test/search/type_hierarchy_test.dart b/pkg/analysis_server/test/search/type_hierarchy_test.dart
index d707da7..6c20bff 100644
--- a/pkg/analysis_server/test/search/type_hierarchy_test.dart
+++ b/pkg/analysis_server/test/search/type_hierarchy_test.dart
@@ -1105,28 +1105,6 @@
 
   @failingTest
   @override
-  test_member_fromField_toField() => super.test_member_fromField_toField();
-
-  @failingTest
-  @override
-  test_member_fromField_toGetter() => super.test_member_fromField_toGetter();
-
-  @failingTest
-  @override
-  test_member_fromField_toSetter() => super.test_member_fromField_toSetter();
-
-  @failingTest
-  @override
-  test_member_fromFinalField_toGetter() =>
-      super.test_member_fromFinalField_toGetter();
-
-  @failingTest
-  @override
-  test_member_fromFinalField_toSetter() =>
-      super.test_member_fromFinalField_toSetter();
-
-  @failingTest
-  @override
   test_member_getter() {
     fail('Timeout');
 //    return callFailingTest(super.test_member_getter);
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index 0872c30..792a447 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -8078,8 +8078,13 @@
   @override
   int get nameOffset {
     int offset = super.nameOffset;
-    if (offset == 0 && _unlinkedVariable != null) {
-      return _unlinkedVariable.nameOffset;
+    if (offset == 0) {
+      if (_kernel != null) {
+        return _kernel.fileOffset;
+      }
+      if (_unlinkedVariable != null) {
+        return _unlinkedVariable.nameOffset;
+      }
     }
     return offset;
   }
@@ -8446,14 +8451,19 @@
   @override
   int get nameOffset {
     int offset = super.nameOffset;
-    if (offset == 0 && unlinkedParam != null) {
-      if (isSynthetic ||
-          (unlinkedParam.name.isEmpty &&
-              unlinkedParam.kind != UnlinkedParamKind.named &&
-              enclosingElement is GenericFunctionTypeElement)) {
-        return -1;
+    if (offset == 0) {
+      if (_kernel != null) {
+        return _kernel.fileOffset;
       }
-      return unlinkedParam.nameOffset;
+      if (unlinkedParam != null) {
+        if (isSynthetic ||
+            (unlinkedParam.name.isEmpty &&
+                unlinkedParam.kind != UnlinkedParamKind.named &&
+                enclosingElement is GenericFunctionTypeElement)) {
+          return -1;
+        }
+        return unlinkedParam.nameOffset;
+      }
     }
     return offset;
   }
diff --git a/pkg/analyzer/test/src/summary/resynthesize_common.dart b/pkg/analyzer/test/src/summary/resynthesize_common.dart
index db674ca..38dd3ef 100644
--- a/pkg/analyzer/test/src/summary/resynthesize_common.dart
+++ b/pkg/analyzer/test/src/summary/resynthesize_common.dart
@@ -9023,6 +9023,16 @@
 ''');
   }
 
+  test_parameter() async {
+    var library = await checkLibrary('void main(int p) {}');
+    checkElementText(
+        library,
+        r'''
+void main@5(int p@14) {}
+''',
+        withOffsets: true);
+  }
+
   test_parameter_checked() async {
     // Note: due to dartbug.com/27393, the keyword "checked" is identified by
     // its presence in a library called "meta".  If that bug is fixed, this test
@@ -10445,6 +10455,19 @@
     }
   }
 
+  test_variable() async {
+    var library = await checkLibrary('int x = 0;');
+    checkElementText(
+        library,
+        r'''
+int x@4;
+synthetic int get x@4 {}
+synthetic void set x@4(int _x@4) {}
+''',
+        withOffsets: true,
+        withSyntheticAccessors: true);
+  }
+
   test_variable_const() async {
     var library = await checkLibrary('const int i = 0;');
     checkElementText(library, r'''
