Hi Josh, 

thank you a lot for informative answer.

2018 m. sausis 4 d., ketvirtadienis 15:34:37 UTC, Josh Humphries rašė:
>
> 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] <javascript:>
>
> On Thu, Jan 4, 2018 at 7:13 AM, Renatas M <[email protected] 
> <javascript:>> 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] <javascript:>.
>> To post to this group, send email to [email protected] 
>> <javascript:>.
>> 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