What you're asking for is not currently do-able. There is an existing
request to add this functionality though:
https://github.com/google/protobuf/issues/2055

In the meantime, you can accomplish this using a custom plugin that is run
in addition to the normal java code-gen. Plugins can generate extra code
into existing Java source files using insertion points
<https://github.com/google/protobuf/blob/master/src/google/protobuf/compiler/plugin.proto#L161>.
So you could generate overloaded forms of the setter methods into the
relevant builder classes (via "builder_scope" insertion points).

----
*Josh Humphries*
[email protected]

On Thu, Jan 4, 2018 at 7:13 AM, Renatas M <[email protected]> wrote:

> Lets say I have test.proto file:
>
>     syntax = "proto3";
>
>     option java_package = "testing";
>     option java_outer_classname = "Test_v1";
>
>     import "google/protobuf/wrappers.proto";
>
>     message TestMessage {
>         .google.protobuf.Int32Value integerField = 1;
>     }
>
>
> If I compile (using protoc v3.5.0) it to c# code I will get nullable type
> properties:
>
>     public int? IntegerField {
>        get { return integerField_; }
>        set { integerField_ = value; }
>      }
>
>
> But if I compile it to Java code, fields will be of well-known type:
>
>     public Builder setIntegerField(com.google.protobuf.Int32Value value) {
>       if (integerFieldBuilder_ == null) {
>         if (value == null) {
>           throw new NullPointerException();
>         }
>         integerField_ = value;
>         onChanged();
>       } else {
>         integerFieldBuilder_.setMessage(value);
>      }
>
>
> I am moving project from proto2 to proto3 so I would like to avoid using
> well-known types, because it will require a lot of work to change related
> code. With c# projects I will not require to modify anything but in Java I
> will need to do as in the following example:
>
>     TestMessage.Builder builder = TestMessage.newBuilder();
>     builder.setIntegerField(5); //<-- instead of this (with proto2)
>     builder.setIntegerField(Int32Value.newBuilder().setValue(5)); //<-- I
> will need to change to something like this (with proto3)
>
>
> Is there a way to compile proto file to Java so setters would accept
> primitive classes/wrappers (String, Integer, etc.) as parameters?
>
> --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected].
> To post to this group, send email to [email protected].
> Visit this group at https://groups.google.com/group/protobuf.
> For more options, visit https://groups.google.com/d/optout.
>

-- 
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to