Elements. Write 'hasNonFinalField' flag into text expectations.

I plan to compute it during linking, store into summary, and manifest.

Change-Id: Iae69629a02df9e700919a0f9a50143e213c122be
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/445804
Reviewed-by: Johnni Winther <johnniwinther@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index c6e3849..7444953 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -229,43 +229,6 @@
   }
 
   @override
-  @trackedDirectlyExpensive
-  bool get hasNonFinalField {
-    globalResultRequirements?.record_classElement_hasNonFinalField(
-      element: this,
-    );
-
-    var classesToVisit = <InterfaceElementImpl>[];
-    var visitedClasses = <InterfaceElementImpl>{};
-    classesToVisit.add(this);
-    while (classesToVisit.isNotEmpty) {
-      var currentElement = classesToVisit.removeAt(0);
-      if (visitedClasses.add(currentElement)) {
-        // check fields
-        for (var field in currentElement.fields) {
-          if (!field.isFinal &&
-              !field.isConst &&
-              !field.isStatic &&
-              !field.isSynthetic) {
-            return true;
-          }
-        }
-        // check mixins
-        for (var mixinType in currentElement.mixins) {
-          classesToVisit.add(mixinType.element);
-        }
-        // check super
-        var supertype = currentElement.supertype;
-        if (supertype != null) {
-          classesToVisit.add(supertype.element);
-        }
-      }
-    }
-    // not found
-    return false;
-  }
-
-  @override
   @trackedIncludedInId
   bool get isAbstract {
     return hasModifier(Modifier.ABSTRACT);
@@ -4673,6 +4636,42 @@
     ];
   }
 
+  @trackedDirectlyExpensive
+  bool get hasNonFinalField {
+    globalResultRequirements?.record_interfaceElement_hasNonFinalField(
+      element: this,
+    );
+
+    var classesToVisit = <InterfaceElementImpl>[];
+    var visitedClasses = <InterfaceElementImpl>{};
+    classesToVisit.add(this);
+    while (classesToVisit.isNotEmpty) {
+      var currentElement = classesToVisit.removeAt(0);
+      if (visitedClasses.add(currentElement)) {
+        // check fields
+        for (var field in currentElement.fields) {
+          if (!field.isFinal &&
+              !field.isConst &&
+              !field.isStatic &&
+              !field.isSynthetic) {
+            return true;
+          }
+        }
+        // check mixins
+        for (var mixinType in currentElement.mixins) {
+          classesToVisit.add(mixinType.element);
+        }
+        // check super
+        var supertype = currentElement.supertype;
+        if (supertype != null) {
+          classesToVisit.add(supertype.element);
+        }
+      }
+    }
+    // not found
+    return false;
+  }
+
   InheritanceManager3 get inheritanceManager {
     return library.session.inheritanceManager;
   }
diff --git a/pkg/analyzer/lib/src/fine/requirements.dart b/pkg/analyzer/lib/src/fine/requirements.dart
index d247241..e9321e3 100644
--- a/pkg/analyzer/lib/src/fine/requirements.dart
+++ b/pkg/analyzer/lib/src/fine/requirements.dart
@@ -799,12 +799,6 @@
     // TODO(scheglov): implement.
   }
 
-  void record_classElement_hasNonFinalField({
-    required ClassElementImpl element,
-  }) {
-    // TODO(scheglov): implement.
-  }
-
   void record_fieldElement_getter({
     required FieldElementImpl element,
     String? name,
@@ -1071,6 +1065,12 @@
     requirements.requestedConstructors[constructorName] = constructorId;
   }
 
+  void record_interfaceElement_hasNonFinalField({
+    required InterfaceElementImpl element,
+  }) {
+    // TODO(scheglov): implement.
+  }
+
   /// Record that all accessible extensions inside a [LibraryFragmentImpl]
   /// are requested, which means dependency on all extensions exported
   /// from [importedLibraries].
diff --git a/pkg/analyzer/test/src/summary/element_text.dart b/pkg/analyzer/test/src/summary/element_text.dart
index d4e42f6..49a6e5c 100644
--- a/pkg/analyzer/test/src/summary/element_text.dart
+++ b/pkg/analyzer/test/src/summary/element_text.dart
@@ -987,6 +987,7 @@
           _sink.writeIf(e.isInterface, 'interface ');
           _sink.writeIf(e.isFinal, 'final ');
           _writeNotSimplyBounded(e);
+          _sink.writeIf(e.hasNonFinalField, 'hasNonFinalField ');
           _sink.writeIf(e.isMixinClass, 'mixin ');
           _sink.write('class ');
           _sink.writeIf(e.isMixinApplication, 'alias ');
@@ -1009,6 +1010,7 @@
         case MixinElementImpl():
           _sink.writeIf(e.isBase, 'base ');
           _writeNotSimplyBounded(e);
+          _sink.writeIf(e.hasNonFinalField, 'hasNonFinalField ');
           _sink.write('mixin ');
       }
 
diff --git a/pkg/analyzer/test/src/summary/elements/class_test.dart b/pkg/analyzer/test/src/summary/elements/class_test.dart
index 58e0e19..222bb2c 100644
--- a/pkg/analyzer/test/src/summary/elements/class_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/class_test.dart
@@ -340,7 +340,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -409,7 +409,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -478,7 +478,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -555,7 +555,7 @@
                 #F8 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -636,7 +636,7 @@
                 #F8 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -722,7 +722,7 @@
                 #F10 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:23)
                   element: <testLibrary>::@class::C::@setter::f::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -811,7 +811,7 @@
                 #F11 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:35)
                   element: <testLibrary>::@class::C::@setter::x::@def::1::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -935,7 +935,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1004,7 +1004,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1073,7 +1073,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1142,7 +1142,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1211,7 +1211,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1280,7 +1280,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1349,7 +1349,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1422,7 +1422,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1494,7 +1494,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1567,7 +1567,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -7136,7 +7136,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
                   element: <testLibrary>::@class::C::@setter::i::@formalParameter::value
   classes
-    abstract class C
+    abstract hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -7304,7 +7304,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:26)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -7371,7 +7371,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:38)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -7441,7 +7441,7 @@
                 #F8 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::foo::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -7524,7 +7524,7 @@
                 #F9 _ (nameOffset:39) (firstTokenOffset:35) (offset:39)
                   element: <testLibrary>::@class::C::@setter::foo::@def::1::@formalParameter::_
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -7603,7 +7603,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:34)
                   element: <testLibrary>::@class::C::@setter::i::@formalParameter::value
   classes
-    abstract class C
+    abstract hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -7985,7 +7985,7 @@
             #F11 v (nameOffset:67) (firstTokenOffset:59) (offset:67)
               element: <testLibrary>::@class::D::@getter::v
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       supertype: D
@@ -8071,7 +8071,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -8132,7 +8132,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -8193,7 +8193,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::v::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -8254,7 +8254,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::v::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -8329,7 +8329,7 @@
             #F10 v (nameOffset:56) (firstTokenOffset:48) (offset:56)
               element: <testLibrary>::@class::D::@getter::v
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       supertype: D
@@ -9408,7 +9408,7 @@
 library
   reference: <testLibrary>
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
@@ -9437,7 +9437,7 @@
 library
   reference: <testLibrary>
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F0
       fields
@@ -9523,7 +9523,7 @@
                 #F10 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
                   element: <testLibrary>::@class::C::@setter::2::@formalParameter::value
   classes
-    abstract class C
+    abstract hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -9608,7 +9608,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:24)
                   element: <testLibrary>::@class::C::@setter::foo::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       typeParameters
@@ -9672,7 +9672,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:22)
                   element: <testLibrary>::@class::C::@setter::foo::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       typeParameters
@@ -10234,7 +10234,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::a::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -10300,7 +10300,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::foo::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -10452,7 +10452,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::a::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -10513,7 +10513,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -10574,7 +10574,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:14)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -10644,7 +10644,7 @@
                 #F10 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
                   element: <testLibrary>::@class::C::@setter::j::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -10729,7 +10729,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:21)
                   element: <testLibrary>::@class::C::@setter::foo::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -10932,7 +10932,7 @@
           reference: <testLibrary>::@class::A::@method::foo
           firstFragment: #F3
           returnType: int
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       supertype: A
@@ -11034,7 +11034,7 @@
           firstFragment: #F4
           returnType: int
           variable: <testLibrary>::@class::A::@field::foo
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F5
       supertype: A
@@ -15998,7 +15998,7 @@
                 #F19 p (nameOffset:123) (firstTokenOffset:123) (offset:123)
                   element: <testLibrary>::@class::D::@setter::t::@formalParameter::p
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -16028,7 +16028,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::t
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       supertype: A
@@ -16060,7 +16060,7 @@
               type: double
           returnType: void
           variable: <testLibrary>::@class::B::@field::t
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F13
       supertype: A
@@ -16071,7 +16071,7 @@
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F14
           superConstructor: <testLibrary>::@class::A::@constructor::new
-    class D
+    hasNonFinalField class D
       reference: <testLibrary>::@class::D
       firstFragment: #F15
       supertype: C
@@ -20185,7 +20185,7 @@
         synthetic new
           reference: <testLibrary>::@class::M::@constructor::new
           firstFragment: #F2
-    class alias MixinApp
+    hasNonFinalField class alias MixinApp
       reference: <testLibrary>::@class::MixinApp
       firstFragment: #F3
       supertype: Base
@@ -20661,7 +20661,7 @@
             #F16 f (nameOffset:92) (firstTokenOffset:87) (offset:92)
               element: <testLibrary>::@class::E::@method::f
   classes
-    class alias C
+    hasNonFinalField class alias C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       supertype: D
@@ -20686,7 +20686,7 @@
         synthetic new
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F4
-    class E
+    hasNonFinalField class E
       reference: <testLibrary>::@class::E
       firstFragment: #F5
       fields
@@ -20928,7 +20928,7 @@
                 #F9 this.foo (nameOffset:41) (firstTokenOffset:36) (offset:41)
                   element: <testLibrary>::@class::C::@setter::bar::@formalParameter::foo
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
diff --git a/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart b/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart
index d766bb1..c196cb9 100644
--- a/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/duplicate_declaration_test.dart
@@ -309,7 +309,7 @@
                 #F10 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:30)
                   element: <testLibrary>::@class::A::@setter::foo::@def::1::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -1164,7 +1164,7 @@
       firstFragment: #F1
       superclassConstraints
         Object
-    mixin A
+    hasNonFinalField mixin A
       reference: <testLibrary>::@mixin::A::@def::1
       firstFragment: #F2
       superclassConstraints
@@ -1192,7 +1192,7 @@
               type: dynamic
           returnType: void
           variable: <testLibrary>::@mixin::A::@def::1::@field::x
-    mixin A
+    hasNonFinalField mixin A
       reference: <testLibrary>::@mixin::A::@def::2
       firstFragment: #F7
       superclassConstraints
diff --git a/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart b/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
index 27c70f6..2226768 100644
--- a/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/formal_parameter_test.dart
@@ -716,7 +716,7 @@
                 #F9 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
diff --git a/pkg/analyzer/test/src/summary/elements/metadata_test.dart b/pkg/analyzer/test/src/summary/elements/metadata_test.dart
index 6aea5a8..2942fef 100644
--- a/pkg/analyzer/test/src/summary/elements/metadata_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/metadata_test.dart
@@ -248,7 +248,7 @@
         #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1765,7 +1765,7 @@
         #F8 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1869,7 +1869,7 @@
         #F9 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1985,7 +1985,7 @@
         #F9 synthetic a (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::a
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -4481,7 +4481,7 @@
         #F14 synthetic foo (nameOffset:<null>) (firstTokenOffset:<null>) (offset:6)
           element: <testLibrary>::@getter::foo
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
diff --git a/pkg/analyzer/test/src/summary/elements/mixin_test.dart b/pkg/analyzer/test/src/summary/elements/mixin_test.dart
index f18cad3..ed9c7cc 100644
--- a/pkg/analyzer/test/src/summary/elements/mixin_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/mixin_test.dart
@@ -132,7 +132,7 @@
           reference: <testLibrary>::@class::D::@constructor::new
           firstFragment: #F8
   mixins
-    mixin M
+    hasNonFinalField mixin M
       reference: <testLibrary>::@mixin::M
       firstFragment: #F9
       typeParameters
@@ -293,6 +293,65 @@
 ''');
   }
 
+  test_mixin_field_inferredType() async {
+    var library = await buildLibrary('''
+mixin M {
+  var x = 0;
+}
+''');
+    checkElementText(library, r'''
+library
+  reference: <testLibrary>
+  fragments
+    #F0 <testLibraryFragment>
+      element: <testLibrary>
+      mixins
+        #F1 mixin M (nameOffset:6) (firstTokenOffset:0) (offset:6)
+          element: <testLibrary>::@mixin::M
+          fields
+            #F2 hasInitializer x (nameOffset:16) (firstTokenOffset:16) (offset:16)
+              element: <testLibrary>::@mixin::M::@field::x
+          getters
+            #F3 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+              element: <testLibrary>::@mixin::M::@getter::x
+          setters
+            #F4 synthetic x (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+              element: <testLibrary>::@mixin::M::@setter::x
+              formalParameters
+                #F5 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
+                  element: <testLibrary>::@mixin::M::@setter::x::@formalParameter::value
+  mixins
+    hasNonFinalField mixin M
+      reference: <testLibrary>::@mixin::M
+      firstFragment: #F1
+      superclassConstraints
+        Object
+      fields
+        hasInitializer x
+          reference: <testLibrary>::@mixin::M::@field::x
+          firstFragment: #F2
+          type: int
+          getter: <testLibrary>::@mixin::M::@getter::x
+          setter: <testLibrary>::@mixin::M::@setter::x
+      getters
+        synthetic x
+          reference: <testLibrary>::@mixin::M::@getter::x
+          firstFragment: #F3
+          returnType: int
+          variable: <testLibrary>::@mixin::M::@field::x
+      setters
+        synthetic x
+          reference: <testLibrary>::@mixin::M::@setter::x
+          firstFragment: #F4
+          formalParameters
+            #E0 requiredPositional value
+              firstFragment: #F5
+              type: int
+          returnType: void
+          variable: <testLibrary>::@mixin::M::@field::x
+''');
+  }
+
   test_mixin_field_inferredType_final() async {
     var library = await buildLibrary('''
 mixin M {
diff --git a/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart b/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart
index ab6ab37..cb7ed05 100644
--- a/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/non_synthetic_test.dart
@@ -49,7 +49,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::foo::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -341,7 +341,7 @@
                 #F5 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@mixin::M::@setter::foo::@formalParameter::value
   mixins
-    mixin M
+    hasNonFinalField mixin M
       reference: <testLibrary>::@mixin::M
       firstFragment: #F1
       superclassConstraints
diff --git a/pkg/analyzer/test/src/summary/elements/offsets_test.dart b/pkg/analyzer/test/src/summary/elements/offsets_test.dart
index 497a40b..5c8cf50 100644
--- a/pkg/analyzer/test/src/summary/elements/offsets_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/offsets_test.dart
@@ -948,7 +948,7 @@
                 #F22 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:94)
                   element: <testLibrary>::@class::C::@setter::multiWithInit2::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1195,7 +1195,7 @@
                 #F42 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:409)
                   element: <testLibrary>::@class::C::@setter::commentAroundAnnotation2::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -2765,7 +2765,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::A::@setter::foo::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
diff --git a/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart b/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart
index c9a9260..73dc855 100644
--- a/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/since_sdk_version_test.dart
@@ -114,7 +114,7 @@
                 #F5 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:57)
                   element: dart:foo::@class::A::@setter::foo::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: dart:foo::@class::A
       firstFragment: #F1
       sinceSdkVersion: 2.15.0
diff --git a/pkg/analyzer/test/src/summary/elements/type_alias_test.dart b/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
index 879b96a..5bb9aa8 100644
--- a/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/type_alias_test.dart
@@ -1777,7 +1777,7 @@
             #F8 S (nameOffset:12) (firstTokenOffset:12) (offset:12)
               element: #E0 S
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
diff --git a/pkg/analyzer/test/src/summary/elements/type_inference_test.dart b/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
index 658875b..17ebcfc 100644
--- a/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/type_inference_test.dart
@@ -622,7 +622,7 @@
             #F24 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:128)
               element: <testLibrary>::@setter::x::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -908,7 +908,7 @@
             #F14 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:40)
               element: <testLibrary>::@setter::y::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1911,7 +1911,7 @@
         #F11 F (nameOffset:12) (firstTokenOffset:0) (offset:12)
           element: <testLibrary>::@typeAlias::F
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       supertype: D
@@ -2238,7 +2238,7 @@
             #F13 v (nameOffset:83) (firstTokenOffset:69) (offset:83)
               element: <testLibrary>::@class::D::@getter::v
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       typeParameters
@@ -3363,7 +3363,7 @@
         synthetic new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F8
-    abstract class D
+    abstract hasNonFinalField class D
       reference: <testLibrary>::@class::D
       firstFragment: #F9
       supertype: C
@@ -3467,7 +3467,7 @@
           reference: <testLibrary>::@class::A::@method::call
           firstFragment: #F3
           returnType: double
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       fields
@@ -4012,7 +4012,7 @@
                 #F14 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:61)
                   element: <testLibrary>::@class::B::@setter::a::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       typeParameters
@@ -4052,7 +4052,7 @@
               type: T
           returnType: void
           variable: <testLibrary>::@class::A::@field::value
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F9
       fields
@@ -4167,7 +4167,7 @@
         #F19 mixin M (nameOffset:112) (firstTokenOffset:106) (offset:112)
           element: <testLibrary>::@mixin::M
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       typeParameters
@@ -4207,7 +4207,7 @@
               type: T
           returnType: void
           variable: <testLibrary>::@class::A::@field::value
-    class alias B
+    hasNonFinalField class alias B
       reference: <testLibrary>::@class::B
       firstFragment: #F9
       typeParameters
@@ -4239,7 +4239,7 @@
           superConstructor: ConstructorMember
             baseElement: <testLibrary>::@class::A::@constructor::new
             substitution: {T: T}
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F13
       fields
@@ -4318,7 +4318,7 @@
                 #F8 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:19)
                   element: <testLibrary>::@class::A::@setter::f::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       typeParameters
@@ -5493,7 +5493,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:17)
                   element: <testLibrary>::@class::C::@setter::t::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       typeParameters
@@ -5567,7 +5567,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:18)
                   element: <testLibrary>::@class::C::@setter::t::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       typeParameters
diff --git a/pkg/analyzer/test/src/summary/elements/types_test.dart b/pkg/analyzer/test/src/summary/elements/types_test.dart
index 8db906a..baa276a 100644
--- a/pkg/analyzer/test/src/summary/elements/types_test.dart
+++ b/pkg/analyzer/test/src/summary/elements/types_test.dart
@@ -727,7 +727,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::C::@setter::v::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -1063,7 +1063,7 @@
         synthetic new
           reference: <testLibrary>::@class::C::@constructor::new
           firstFragment: #F3
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F4
       fields
@@ -1693,7 +1693,7 @@
                 #F6 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:50)
                   element: <testLibrary>::@class::C::@setter::v::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -2422,7 +2422,7 @@
         #F9 f (nameOffset:74) (firstTokenOffset:69) (offset:74)
           element: <testLibrary>::@function::f
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       typeParameters
diff --git a/pkg/analyzer/test/src/summary/top_level_inference_test.dart b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
index a68abf6..2708e1e 100644
--- a/pkg/analyzer/test/src/summary/top_level_inference_test.dart
+++ b/pkg/analyzer/test/src/summary/top_level_inference_test.dart
@@ -948,7 +948,7 @@
             #F18 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:62)
               element: <testLibrary>::@setter::t2::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -1116,7 +1116,7 @@
             #F20 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:83)
               element: <testLibrary>::@setter::t2::@formalParameter::value
   classes
-    class I
+    hasNonFinalField class I
       reference: <testLibrary>::@class::I
       firstFragment: #F1
       fields
@@ -1287,7 +1287,7 @@
         #F17 getC (nameOffset:56) (firstTokenOffset:54) (offset:56)
           element: <testLibrary>::@function::getC
   classes
-    class I
+    hasNonFinalField class I
       reference: <testLibrary>::@class::I
       firstFragment: #F1
       fields
@@ -1711,7 +1711,7 @@
             #F19 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:105)
               element: <testLibrary>::@setter::vBoth::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -2031,7 +2031,7 @@
         #F71 newC (nameOffset:374) (firstTokenOffset:372) (offset:374)
           element: <testLibrary>::@function::newC
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -2061,7 +2061,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::f
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       fields
@@ -2091,7 +2091,7 @@
               type: A
           returnType: void
           variable: <testLibrary>::@class::B::@field::a
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F13
       fields
@@ -2121,7 +2121,7 @@
               type: B
           returnType: void
           variable: <testLibrary>::@class::C::@field::b
-    class X
+    hasNonFinalField class X
       reference: <testLibrary>::@class::X
       firstFragment: #F19
       fields
@@ -2848,7 +2848,7 @@
             #F10 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -3062,7 +3062,7 @@
             #F10 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:29)
               element: <testLibrary>::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -3228,7 +3228,7 @@
                 #F12 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:44)
                   element: <testLibrary>::@class::B::@setter::t::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -3346,7 +3346,7 @@
             #F14 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:31)
               element: <testLibrary>::@setter::x::@formalParameter::value
   classes
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F1
       fields
@@ -3484,7 +3484,7 @@
             #F16 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:64)
               element: <testLibrary>::@setter::x::@formalParameter::value
   classes
-    class I
+    hasNonFinalField class I
       reference: <testLibrary>::@class::I
       firstFragment: #F1
       fields
@@ -3625,7 +3625,7 @@
         #F13 f (nameOffset:57) (firstTokenOffset:55) (offset:57)
           element: <testLibrary>::@function::f
   classes
-    class I
+    hasNonFinalField class I
       reference: <testLibrary>::@class::I
       firstFragment: #F1
       fields
@@ -7857,7 +7857,7 @@
               type: D
           returnType: void
           variable: <testLibrary>::@class::C::@field::d
-    class D
+    hasNonFinalField class D
       reference: <testLibrary>::@class::D
       firstFragment: #F7
       fields
@@ -7981,7 +7981,7 @@
           firstFragment: #F4
           returnType: D
           variable: <testLibrary>::@class::C::@field::d
-    class D
+    hasNonFinalField class D
       reference: <testLibrary>::@class::D
       firstFragment: #F5
       fields
@@ -8235,7 +8235,7 @@
                 #F11 <null-name> (nameOffset:<null>) (firstTokenOffset:61) (offset:61)
                   element: <testLibrary>::@class::B::@setter::x::@formalParameter::<null-name>
   classes
-    abstract class A
+    abstract hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -8333,7 +8333,7 @@
                 #F7 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:16)
                   element: <testLibrary>::@class::A::@setter::f::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -8459,7 +8459,7 @@
                 #F25 _ (nameOffset:105) (firstTokenOffset:105) (offset:105)
                   element: <testLibrary>::@class::B::@setter::z::@formalParameter::_
   classes
-    abstract class A
+    abstract hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -8529,7 +8529,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::z
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F15
       interfaces
@@ -8641,7 +8641,7 @@
                 #F12 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:63)
                   element: <testLibrary>::@class::B::@setter::x::@formalParameter::value
   classes
-    abstract class A
+    abstract hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -8671,7 +8671,7 @@
               type: dynamic
           returnType: void
           variable: <testLibrary>::@class::A::@field::x
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       interfaces
@@ -8760,7 +8760,7 @@
                 #F12 _ (nameOffset:83) (firstTokenOffset:83) (offset:83)
                   element: <testLibrary>::@class::B::@setter::foo::@formalParameter::_
   classes
-    abstract class A
+    abstract hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -8917,7 +8917,7 @@
                 #F27 _ (nameOffset:108) (firstTokenOffset:108) (offset:108)
                   element: <testLibrary>::@class::B::@setter::z::@formalParameter::_
   classes
-    abstract class A
+    abstract hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       typeParameters
@@ -8999,7 +8999,7 @@
               type: E
           returnType: void
           variable: <testLibrary>::@class::A::@field::z
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F16
       typeParameters
@@ -9121,7 +9121,7 @@
                 #F12 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
                   element: <testLibrary>::@class::B::@setter::x::@formalParameter::value
   classes
-    abstract class A
+    abstract hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -9151,7 +9151,7 @@
               type: dynamic
           returnType: void
           variable: <testLibrary>::@class::A::@field::x
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       interfaces
@@ -9239,7 +9239,7 @@
                 #F12 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:59)
                   element: <testLibrary>::@class::B::@setter::x::@formalParameter::value
   classes
-    abstract class A
+    abstract hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -9269,7 +9269,7 @@
               type: num
           returnType: void
           variable: <testLibrary>::@class::A::@field::x
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       interfaces
@@ -9413,7 +9413,7 @@
           firstFragment: #F8
           returnType: int
           variable: <testLibrary>::@class::A::@field::z
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F9
       interfaces
@@ -9596,7 +9596,7 @@
           hasEnclosingTypeParameterReference: true
           returnType: E
           variable: <testLibrary>::@class::A::@field::z
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F10
       typeParameters
@@ -10396,7 +10396,7 @@
               type: String
           returnType: void
           variable: <testLibrary>::@class::B::@field::y
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F15
       interfaces
@@ -10809,7 +10809,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::B::@field::x
-    class C
+    hasNonFinalField class C
       reference: <testLibrary>::@class::C
       firstFragment: #F10
       interfaces
@@ -11234,7 +11234,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::z
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F12
       interfaces
@@ -11798,7 +11798,7 @@
               type: num
           returnType: void
           variable: <testLibrary>::@class::A::@field::x
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       interfaces
@@ -11994,7 +11994,7 @@
                 #F14 value (nameOffset:<null>) (firstTokenOffset:<null>) (offset:46)
                   element: <testLibrary>::@class::A::@setter::t3::@formalParameter::value
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -13093,7 +13093,7 @@
                 #F10 a (nameOffset:50) (firstTokenOffset:50) (offset:50)
                   element: <testLibrary>::@class::B::@method::m::@formalParameter::a
   classes
-    class A
+    hasNonFinalField class A
       reference: <testLibrary>::@class::A
       firstFragment: #F1
       fields
@@ -13123,7 +13123,7 @@
               type: int
           returnType: void
           variable: <testLibrary>::@class::A::@field::m
-    class B
+    hasNonFinalField class B
       reference: <testLibrary>::@class::B
       firstFragment: #F7
       supertype: A