anchor.diff:      compiler.cancel("Unexpected JS first argument", node: firstArg);
     }
   
  -  static NativeBehavior ofMethod(Element method, Compiler compiler) {
  -    DartType type = method.computeType(compiler);
  +  static NativeBehavior ofMethod(FunctionElement method, Compiler compiler) {
  +    FunctionType type = method.computeType(compiler);
       var behavior = new NativeBehavior();
       behavior.typesReturned.add(type.returnType);
       behavior._capture(type, compiler);
  
positive.code:       var fields = value.fields;
        // TODO(sra): Better validation of the constant.
        if (fields.length != 1 || fields[0] is! StringConstant) {
          compiler.cancel(
              'Annotations needs one string: ${annotation.parseNode(compiler)}');
        }
        String specString = fields[0].toDartString().slowToString();
        for (final typeString in specString.split('|')) {
  
negative.code:       return e.computeType(compiler);
      }
  
      NativeEnqueuerBase enqueuer = compiler.enqueuer.resolution.nativeEnqueuer;
      var creates = _collect(element, compiler, enqueuer.annotationCreatesClass,
                             lookup);
      var returns = _collect(element, compiler, enqueuer.annotationReturnsClass,
                             lookup);
  
      if (creates != null) {
        typesInstantiated..clear()..addAll(creates);
  