anchor.diff:      emit("'");
     }
   
  -  void emitElementExpr(int depth, DartType tp) {
  +  void emitElementExpr(int depth, DartType tp, {RhsFilter rhsFilter}) {
       if (currentMethod != null) {
  -      emitExpr(depth, tp);
  +      emitExpr(depth, tp, rhsFilter: rhsFilter);
       } else {
  -      emitLiteral(depth, tp);
  -    }
  -  }
  -
  -  void emitElement(int depth, DartType tp) {
  +      emitLiteral(depth, tp, rhsFilter: rhsFilter);
  +    }
  +  }
  +
  +  void emitElement(int depth, DartType tp, {RhsFilter rhsFilter}) {
       if (tp == DartType.INT_STRING_MAP) {
         emitSmallPositiveInt();
         emit(' : ');
  -      emitElementExpr(depth, DartType.STRING);
  +      emitElementExpr(depth, DartType.STRING, rhsFilter: rhsFilter);
       } else {
  -      emitElementExpr(depth, DartType.INT);
  -    }
  -  }
  -
  -  void emitCollectionElement(int depth, DartType tp) {
  +      emitElementExpr(depth, DartType.INT, rhsFilter: rhsFilter);
  +    }
  +  }
  +
  +  void emitCollectionElement(int depth, DartType tp, {RhsFilter rhsFilter}) {
       int r = depth <= exprDepth ? rand.nextInt(10) : 10;
       switch (r) {
         // Favors elements over control-flow collections.
  
positive.code:       emit('(');
        if (proto[1] != 'V') {
          for (int i = 1; i < proto.length; i++) {
            emitArg(depth + 1, proto[i]);
            if (i != (proto.length - 1)) {
              emit(', ');
            }
  
negative.code:   }
  
    // Emit method call within the program.
    void emitMethodCall(int depth, DartType tp, {RhsFilter rhsFilter}) {
      // Only call backward to avoid infinite recursion.
      if (currentClass == null) {
        // Outside a class but inside a method: call backward in global methods.
        if (currentMethod != null &&
            pickedCall(depth, tp, methodName, globalMethods, currentMethod,
                rhsFilter: rhsFilter)) {
          return;
        }
      } else {
  