anchor.diff:              overriddenMember.classBuilder != classBuilder) {
             if (member is SourceFieldMember) {
               if (member.isFinal && overriddenMember.isSetter) {
  -              // TODO(johnniwinther): Enable this when we can handle
  -              // inference/infer_final_field_getter_and_setter
  -              //registerOverrideDependency(member, overriddenMember);
  +              registerOverrideDependency(member, overriddenMember);
                 hierarchy.registerOverrideCheck(
                     classBuilder, member, overriddenMember);
               } else {
  
positive.code:         if (inheritedType == null) {
            debug
                ?.log("Giving up (inheritedType == null)\n${StackTrace.current}");
            continue;
          }
          Substitution bSubstitution;
          if (classBuilder.cls != bTarget.enclosingClass) {
  
negative.code:       Iterable<ClassMember> overriddenMembers) {
      if (fieldBuilder.classBuilder == classBuilder &&
          fieldBuilder.type == null) {
        DartType inferredType;
  
        void inferFrom(ClassMember overriddenMember) {
          if (inferredType is InvalidType) return;
  
          assert(useConsolidated || !overriddenMember.hasDeclarations);
          Member bTarget = overriddenMember.getMember(hierarchy);
          DartType inheritedType;
  