anchor.diff:        Map<ExtensionMemberDescriptor, Class> descriptorToClass,
         Map<Reference, Extension> staticInteropClassesWithExtensions,
         TypeEnvironment typeEnvironment) {
  -    assert(hasStaticInteropAnnotation(this));
  +    assert(js_interop.hasStaticInteropAnnotation(this));
       var classes = <Class>{};
       // Compute a map of all the possible descriptors available in this type and
       // the supertypes.
  
positive.code:         }
  
          // CFE creates static procedures for each extension member.
          var interopMember = interopDescriptor.member.node as Procedure;
          DartType getGetterFunctionType(DartType getterType) {
            return FunctionType([], getterType, Nullability.nonNullable);
          }
  
negative.code:       typeArgumentsError = true;
      }
      if (dartType is! InterfaceType ||
          dartType.declaredNullability != Nullability.nonNullable ||
          js_interop.hasJSInteropAnnotation(dartType.classNode) ||
          js_interop.hasStaticInteropAnnotation(dartType.classNode) ||
          js_interop.hasAnonymousAnnotation(dartType.classNode)) {
        _diagnosticReporter.report(
            templateJsInteropStaticInteropMockNotDartInterfaceType.withArguments(
                dartType, true),
  