| Collections and proto builders which are created and mutated but never used may | |
| be a sign of a bug, for example: | |
| ```java | |
| MyProto.Builder builder = MyProto.newBuilder(); | |
| if (field != null) { | |
| MyProto.NestedField.Builder nestedBuilder = MyProto.NestedField.newBuilder(); | |
| nestedBuilder.setValue(field); | |
| // Oops--forgot to do anything with nestedBuilder. | |
| } | |
| return builder.build(); | |
| ``` | |
| Likewise, converting a proto to a builder and modifying it is a no-op unless | |
| something is done with the return value: | |
| ```java | |
| void setFoo(MyProto proto, String foo) { | |
| proto.toBuilder().setFoo(foo).build(); | |
| } | |
| ``` | |
| As protos are immutable, either the return value must be used: | |
| ```java | |
| @CheckReturnValue | |
| MyProto withFoo(MyProto proto, String foo) { | |
| return proto.toBuilder().setFoo(foo).build(); | |
| } | |
| ``` | |
| or the Builder modified in place: | |
| ```java | |
| void setFoo(MyProto.Builder protoBuilder, String foo) { | |
| protoBuilder.setFoo(foo); | |
| } | |
| ``` |