anchor.diff:  
   import 'package:analyzer/dart/ast/ast.dart';
   import 'package:analyzer/dart/element/element.dart';
  +import 'package:analyzer/dart/element/type.dart';
   import 'package:analyzer/error/listener.dart';
   import 'package:analyzer/src/dart/element/element.dart';
   import 'package:analyzer/src/dart/error/hint_codes.dart';
  
positive.code:     var classElement = element.enclosingElement as ClassElement;
      String name = element.name;
  
      bool isConcrete(ClassElement element) =>
          element.lookUpConcreteMethod(name, element.library) != null;
  
      if (classElement.mixins.map((i) => i.element).any(isConcrete)) {
        return true;
      }
      if (classElement.superclassConstraints
          .map((i) => i.element)
          .any(isConcrete)) {
        return true;
      }
  
      var supertype = classElement.supertype;
      if (supertype != null && isConcrete(supertype.element)) {
        return true;
      }
  
  
negative.code:     return;
    }
  }
  
  extension on InterfaceType? {
    bool isConcrete(String name) {
      var self = this;
      if (self == null) return false;
      var element = self.element;
      return element.lookUpConcreteMethod(name, element.library) != null;
    }
  }
  