private void emitCollectionBinding(StringBuilder builder, CollectionBinding binding, int[] ids) {
    builder.append("    target.").append(binding.getName()).append(" = ");

    switch (binding.getKind()) {
      case ARRAY:
        builder.append("Finder.arrayOf(");
        break;
      case LIST:
        builder.append("Finder.listOf(");
        break;
      default:
        throw new IllegalStateException("Unknown kind: " + binding.getKind());
    }

    for (int i = 0; i < ids.length; i++) {
      if (i > 0) {
        builder.append(',');
      }
      builder.append("\n        ");
      emitCastIfNeeded(builder, binding.getType());
      if (binding.isRequired()) {
        builder
            .append("finder.findRequiredView(source, ")
            .append(ids[i])
            .append(", \"")
            .append(binding.getName())
            .append("\")");
      } else {
        builder.append("finder.findOptionalView(source, ").append(ids[i]).append(")");
      }
    }

    builder.append("\n    );");
  }