anchor.diff:            addNoSuchMethodForwarderForProcedure(member, hierarchy);
           }
           existingForwardersNames.add(member.name);
  +      }
  +    }
  +
  +    List<Member> concreteSetters =
  +        hierarchy.getDispatchTargets(cls, setters: true);
  +    List<Member> declaredSetters =
  +        hierarchy.getDeclaredMembers(cls, setters: true);
  +    for (Member member in hierarchy.getInterfaceMembers(cls, setters: true)) {
  +      if (member is Procedure &&
  +          ClassHierarchy.findMemberByName(concreteSetters, member.name) ==
  +              null &&
  +          !existingSetterForwardersNames.contains(member.name)) {
  +        if (ClassHierarchy.findMemberByName(declaredSetters, member.name) !=
  +            null) {
  +          member.isNoSuchMethodForwarder = true;
  +        } else {
  +          addNoSuchMethodForwarderForProcedure(member, hierarchy);
  +        }
  +        existingSetterForwardersNames.add(member.name);
         }
       }
     }
  
positive.code:           existingForwardersNames.add(member.name);
          }
        }
      }
  
      List<Member> concrete = hierarchy.getDispatchTargets(cls);
      List<Member> declared = hierarchy.getDeclaredMembers(cls);
      for (Member member in hierarchy.getInterfaceMembers(cls)) {
        if ((member is Procedure) &&
            ClassHierarchy.findMemberByName(concrete, member.name) == null &&
            !existingForwardersNames.contains(member.name)) {
          if (ClassHierarchy.findMemberByName(declared, member.name) != null) {
  
negative.code:     }
  
      Set<Name> existingForwardersNames = new Set<Name>();
      Set<Name> existingSetterForwardersNames = new Set<Name>();
      if (cls.superclass != null &&
          hasUserDefinedNoSuchMethod(cls.superclass, hierarchy)) {
        List<Member> concrete = hierarchy.getDispatchTargets(cls.superclass);
  