Don't generate the *Count method in java protobuf

According to protobuf documentation

Repeated fields have some extra methods – a Count method

so something like this:

// repeated .tutorial.Person.PhoneNumber phone = 4;
public List<PhoneNumber> getPhoneList();
public int getPhoneCount();
public PhoneNumber getPhone(int index);

Is it possible to suppress the generation of getPhoneCount? I don't want it in the resulting java class. Is it possible to not generate it?

EDIT: To make clear what my problem is, we have .proto file with something like this

message Bar {
    ...
    optional int32 entries_count = 123
    ...
    repeated Foo entries = 456
    ...
}

Because of that, both entries_count and entries tries to generate function getEntriesCount(), which is obviously not possible. So it's generated instead as getEntriesCount123() and getEntriesCount456(), which is not exactly user friendly. So I would like to suppress generation of one of them, since they are supposed to return same value anyway.

Sadly I'm not really sure how feasible is changing the format, too many things around may depend on it :/

Jon Skeet
people
quotationmark

No, there's no way of doing this.

If you look at the generator code (primitive fields, message fields, enum fields etc) you can see that the ...Count() methods (both interface and implementation) are written unconditionally.

Options:

  1. Live with the existing generation code
  2. Use your own fork of protoc
  3. Create a pull request for the main project

I'd strongly recommend option 1. With option 2 you'll be forever having to do work to keep it up to date, and I'd be quite surprised if you managed to get option 3 accepted into the codebase... the bar for adding an extra option is pretty high.

Basically, you should remove your entries_count field. It's an obvious place where data can get out of sync - and the real value is always available to clients anyway, in all platforms I'm aware of. If you want it to mean something other than just "the number of values in entries" (e.g. some estimated total count, where you've only got some sample) then you should rename it to be more specific, at which point your existing problem will go away at the same time.

people

See more on this question at Stackoverflow