Fixes extra whitespace on generated comments. (#1950)

Fixes extra whitespace on generated comments.
pull/1975/head
Sergio Campamá 8 years ago committed by Jisi Liu
parent a989501f47
commit 62f2ff86b5
  1. 2
      objectivec/GPBExtensionRegistry.h
  2. 34
      objectivec/google/protobuf/Any.pbobjc.h
  3. 36
      objectivec/google/protobuf/Api.pbobjc.h
  4. 16
      objectivec/google/protobuf/Duration.pbobjc.h
  5. 4
      objectivec/google/protobuf/Empty.pbobjc.h
  6. 96
      objectivec/google/protobuf/FieldMask.pbobjc.h
  7. 8
      objectivec/google/protobuf/Struct.pbobjc.h
  8. 28
      objectivec/google/protobuf/Timestamp.pbobjc.h
  9. 18
      objectivec/google/protobuf/Wrappers.pbobjc.h
  10. 12
      src/google/protobuf/compiler/objectivec/objectivec_helpers.cc

@ -77,7 +77,7 @@ NS_ASSUME_NONNULL_BEGIN
* @param descriptor The descriptor to look for a registered extension on. * @param descriptor The descriptor to look for a registered extension on.
* @param fieldNumber The field number of the extension to look for. * @param fieldNumber The field number of the extension to look for.
* *
* @return The registered GPBExtensionDescripto or nil if none was found. * @return The registered GPBExtensionDescriptor or nil if none was found.
**/ **/
- (nullable GPBExtensionDescriptor *)extensionForDescriptor:(GPBDescriptor *)descriptor - (nullable GPBExtensionDescriptor *)extensionForDescriptor:(GPBDescriptor *)descriptor
fieldNumber:(NSInteger)fieldNumber; fieldNumber:(NSInteger)fieldNumber;

@ -51,12 +51,12 @@ typedef GPB_ENUM(GPBAny_FieldNumber) {
/** /**
* `Any` contains an arbitrary serialized protocol buffer message along with a * `Any` contains an arbitrary serialized protocol buffer message along with a
* URL that describes the type of the serialized message. * URL that describes the type of the serialized message.
* *
* Protobuf library provides support to pack/unpack Any values in the form * Protobuf library provides support to pack/unpack Any values in the form
* of utility functions or additional generated methods of the Any type. * of utility functions or additional generated methods of the Any type.
* *
* Example 1: Pack and unpack a message in C++. * Example 1: Pack and unpack a message in C++.
* *
* Foo foo = ...; * Foo foo = ...;
* Any any; * Any any;
* any.PackFrom(foo); * any.PackFrom(foo);
@ -64,18 +64,18 @@ typedef GPB_ENUM(GPBAny_FieldNumber) {
* if (any.UnpackTo(&foo)) { * if (any.UnpackTo(&foo)) {
* ... * ...
* } * }
* *
* Example 2: Pack and unpack a message in Java. * Example 2: Pack and unpack a message in Java.
* *
* Foo foo = ...; * Foo foo = ...;
* Any any = Any.pack(foo); * Any any = Any.pack(foo);
* ... * ...
* if (any.is(Foo.class)) { * if (any.is(Foo.class)) {
* foo = any.unpack(Foo.class); * foo = any.unpack(Foo.class);
* } * }
* *
* Example 3: Pack and unpack a message in Python. * Example 3: Pack and unpack a message in Python.
* *
* foo = Foo(...) * foo = Foo(...)
* any = Any() * any = Any()
* any.Pack(foo) * any.Pack(foo)
@ -83,37 +83,37 @@ typedef GPB_ENUM(GPBAny_FieldNumber) {
* if any.Is(Foo.DESCRIPTOR): * if any.Is(Foo.DESCRIPTOR):
* any.Unpack(foo) * any.Unpack(foo)
* ... * ...
* *
* The pack methods provided by protobuf library will by default use * The pack methods provided by protobuf library will by default use
* 'type.googleapis.com/full.type.name' as the type URL and the unpack * 'type.googleapis.com/full.type.name' as the type URL and the unpack
* methods only use the fully qualified type name after the last '/' * methods only use the fully qualified type name after the last '/'
* in the type URL, for example "foo.bar.com/x/y.z" will yield type * in the type URL, for example "foo.bar.com/x/y.z" will yield type
* name "y.z". * name "y.z".
* *
* *
* JSON * JSON
* ==== * ====
* The JSON representation of an `Any` value uses the regular * The JSON representation of an `Any` value uses the regular
* representation of the deserialized, embedded message, with an * representation of the deserialized, embedded message, with an
* additional field `\@type` which contains the type URL. Example: * additional field `\@type` which contains the type URL. Example:
* *
* package google.profile; * package google.profile;
* message Person { * message Person {
* string first_name = 1; * string first_name = 1;
* string last_name = 2; * string last_name = 2;
* } * }
* *
* { * {
* "\@type": "type.googleapis.com/google.profile.Person", * "\@type": "type.googleapis.com/google.profile.Person",
* "firstName": <string>, * "firstName": <string>,
* "lastName": <string> * "lastName": <string>
* } * }
* *
* If the embedded message type is well-known and has a custom JSON * If the embedded message type is well-known and has a custom JSON
* representation, that representation will be embedded adding a field * representation, that representation will be embedded adding a field
* `value` which holds the custom JSON in addition to the `\@type` * `value` which holds the custom JSON in addition to the `\@type`
* field. Example (for message [google.protobuf.Duration][]): * field. Example (for message [google.protobuf.Duration][]):
* *
* { * {
* "\@type": "type.googleapis.com/google.protobuf.Duration", * "\@type": "type.googleapis.com/google.protobuf.Duration",
* "value": "1.212s" * "value": "1.212s"
@ -124,10 +124,10 @@ typedef GPB_ENUM(GPBAny_FieldNumber) {
/** /**
* A URL/resource name whose content describes the type of the * A URL/resource name whose content describes the type of the
* serialized protocol buffer message. * serialized protocol buffer message.
* *
* For URLs which use the scheme `http`, `https`, or no scheme, the * For URLs which use the scheme `http`, `https`, or no scheme, the
* following restrictions and interpretations apply: * following restrictions and interpretations apply:
* *
* * If no scheme is provided, `https` is assumed. * * If no scheme is provided, `https` is assumed.
* * The last segment of the URL's path must represent the fully * * The last segment of the URL's path must represent the fully
* qualified name of the type (as in `path/google.protobuf.Duration`). * qualified name of the type (as in `path/google.protobuf.Duration`).
@ -140,7 +140,7 @@ typedef GPB_ENUM(GPBAny_FieldNumber) {
* lookup. Therefore, binary compatibility needs to be preserved * lookup. Therefore, binary compatibility needs to be preserved
* on changes to types. (Use versioned type names to manage * on changes to types. (Use versioned type names to manage
* breaking changes.) * breaking changes.)
* *
* Schemes other than `http`, `https` (or the empty scheme) might be * Schemes other than `http`, `https` (or the empty scheme) might be
* used with implementation specific semantics. * used with implementation specific semantics.
**/ **/

@ -88,14 +88,14 @@ typedef GPB_ENUM(GPBApi_FieldNumber) {
* outlined below. If the field is not empty, the version in the * outlined below. If the field is not empty, the version in the
* package name will be verified to be consistent with what is * package name will be verified to be consistent with what is
* provided here. * provided here.
* *
* The versioning schema uses [semantic * The versioning schema uses [semantic
* versioning](http://semver.org) where the major version number * versioning](http://semver.org) where the major version number
* indicates a breaking change and the minor version an additive, * indicates a breaking change and the minor version an additive,
* non-breaking change. Both version numbers are signals to users * non-breaking change. Both version numbers are signals to users
* what to expect from different versions, and should be carefully * what to expect from different versions, and should be carefully
* chosen based on the product plan. * chosen based on the product plan.
* *
* The major version is also reflected in the package name of the * The major version is also reflected in the package name of the
* API, which must end in `v<major-version>`, as in * API, which must end in `v<major-version>`, as in
* `google.feature.v1`. For major versions 0 and 1, the suffix can * `google.feature.v1`. For major versions 0 and 1, the suffix can
@ -199,21 +199,21 @@ typedef GPB_ENUM(GPBMixin_FieldNumber) {
* Declares an API to be included in this API. The including API must * Declares an API to be included in this API. The including API must
* redeclare all the methods from the included API, but documentation * redeclare all the methods from the included API, but documentation
* and options are inherited as follows: * and options are inherited as follows:
* *
* - If after comment and whitespace stripping, the documentation * - If after comment and whitespace stripping, the documentation
* string of the redeclared method is empty, it will be inherited * string of the redeclared method is empty, it will be inherited
* from the original method. * from the original method.
* *
* - Each annotation belonging to the service config (http, * - Each annotation belonging to the service config (http,
* visibility) which is not set in the redeclared method will be * visibility) which is not set in the redeclared method will be
* inherited. * inherited.
* *
* - If an http annotation is inherited, the path pattern will be * - If an http annotation is inherited, the path pattern will be
* modified as follows. Any version prefix will be replaced by the * modified as follows. Any version prefix will be replaced by the
* version of the including API plus the [root][] path if specified. * version of the including API plus the [root][] path if specified.
* *
* Example of a simple mixin: * Example of a simple mixin:
* *
* package google.acl.v1; * package google.acl.v1;
* service AccessControl { * service AccessControl {
* // Get the underlying ACL object. * // Get the underlying ACL object.
@ -221,30 +221,30 @@ typedef GPB_ENUM(GPBMixin_FieldNumber) {
* option (google.api.http).get = "/v1/{resource=**}:getAcl"; * option (google.api.http).get = "/v1/{resource=**}:getAcl";
* } * }
* } * }
* *
* package google.storage.v2; * package google.storage.v2;
* service Storage { * service Storage {
* rpc GetAcl(GetAclRequest) returns (Acl); * rpc GetAcl(GetAclRequest) returns (Acl);
* *
* // Get a data record. * // Get a data record.
* rpc GetData(GetDataRequest) returns (Data) { * rpc GetData(GetDataRequest) returns (Data) {
* option (google.api.http).get = "/v2/{resource=**}"; * option (google.api.http).get = "/v2/{resource=**}";
* } * }
* } * }
* *
* Example of a mixin configuration: * Example of a mixin configuration:
* *
* apis: * apis:
* - name: google.storage.v2.Storage * - name: google.storage.v2.Storage
* mixins: * mixins:
* - name: google.acl.v1.AccessControl * - name: google.acl.v1.AccessControl
* *
* The mixin construct implies that all methods in `AccessControl` are * The mixin construct implies that all methods in `AccessControl` are
* also declared with same name and request/response types in * also declared with same name and request/response types in
* `Storage`. A documentation generator or annotation processor will * `Storage`. A documentation generator or annotation processor will
* see the effective `Storage.GetAcl` method after inherting * see the effective `Storage.GetAcl` method after inherting
* documentation and annotations as follows: * documentation and annotations as follows:
* *
* service Storage { * service Storage {
* // Get the underlying ACL object. * // Get the underlying ACL object.
* rpc GetAcl(GetAclRequest) returns (Acl) { * rpc GetAcl(GetAclRequest) returns (Acl) {
@ -252,20 +252,20 @@ typedef GPB_ENUM(GPBMixin_FieldNumber) {
* } * }
* ... * ...
* } * }
* *
* Note how the version in the path pattern changed from `v1` to `v2`. * Note how the version in the path pattern changed from `v1` to `v2`.
* *
* If the `root` field in the mixin is specified, it should be a * If the `root` field in the mixin is specified, it should be a
* relative path under which inherited HTTP paths are placed. Example: * relative path under which inherited HTTP paths are placed. Example:
* *
* apis: * apis:
* - name: google.storage.v2.Storage * - name: google.storage.v2.Storage
* mixins: * mixins:
* - name: google.acl.v1.AccessControl * - name: google.acl.v1.AccessControl
* root: acls * root: acls
* *
* This implies the following inherited HTTP annotation: * This implies the following inherited HTTP annotation:
* *
* service Storage { * service Storage {
* // Get the underlying ACL object. * // Get the underlying ACL object.
* rpc GetAcl(GetAclRequest) returns (Acl) { * rpc GetAcl(GetAclRequest) returns (Acl) {

@ -55,16 +55,16 @@ typedef GPB_ENUM(GPBDuration_FieldNumber) {
* or "month". It is related to Timestamp in that the difference between * or "month". It is related to Timestamp in that the difference between
* two Timestamp values is a Duration and it can be added or subtracted * two Timestamp values is a Duration and it can be added or subtracted
* from a Timestamp. Range is approximately +-10,000 years. * from a Timestamp. Range is approximately +-10,000 years.
* *
* Example 1: Compute Duration from two Timestamps in pseudo code. * Example 1: Compute Duration from two Timestamps in pseudo code.
* *
* Timestamp start = ...; * Timestamp start = ...;
* Timestamp end = ...; * Timestamp end = ...;
* Duration duration = ...; * Duration duration = ...;
* *
* duration.seconds = end.seconds - start.seconds; * duration.seconds = end.seconds - start.seconds;
* duration.nanos = end.nanos - start.nanos; * duration.nanos = end.nanos - start.nanos;
* *
* if (duration.seconds < 0 && duration.nanos > 0) { * if (duration.seconds < 0 && duration.nanos > 0) {
* duration.seconds += 1; * duration.seconds += 1;
* duration.nanos -= 1000000000; * duration.nanos -= 1000000000;
@ -72,16 +72,16 @@ typedef GPB_ENUM(GPBDuration_FieldNumber) {
* duration.seconds -= 1; * duration.seconds -= 1;
* duration.nanos += 1000000000; * duration.nanos += 1000000000;
* } * }
* *
* Example 2: Compute Timestamp from Timestamp + Duration in pseudo code. * Example 2: Compute Timestamp from Timestamp + Duration in pseudo code.
* *
* Timestamp start = ...; * Timestamp start = ...;
* Duration duration = ...; * Duration duration = ...;
* Timestamp end = ...; * Timestamp end = ...;
* *
* end.seconds = start.seconds + duration.seconds; * end.seconds = start.seconds + duration.seconds;
* end.nanos = start.nanos + duration.nanos; * end.nanos = start.nanos + duration.nanos;
* *
* if (end.nanos < 0) { * if (end.nanos < 0) {
* end.seconds -= 1; * end.seconds -= 1;
* end.nanos += 1000000000; * end.nanos += 1000000000;

@ -47,11 +47,11 @@ NS_ASSUME_NONNULL_BEGIN
* A generic empty message that you can re-use to avoid defining duplicated * A generic empty message that you can re-use to avoid defining duplicated
* empty messages in your APIs. A typical example is to use it as the request * empty messages in your APIs. A typical example is to use it as the request
* or the response type of an API method. For instance: * or the response type of an API method. For instance:
* *
* service Foo { * service Foo {
* rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); * rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty);
* } * }
* *
* The JSON representation for `Empty` is empty JSON object `{}`. * The JSON representation for `Empty` is empty JSON object `{}`.
**/ **/
@interface GPBEmpty : GPBMessage @interface GPBEmpty : GPBMessage

@ -49,25 +49,25 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
/** /**
* `FieldMask` represents a set of symbolic field paths, for example: * `FieldMask` represents a set of symbolic field paths, for example:
* *
* paths: "f.a" * paths: "f.a"
* paths: "f.b.d" * paths: "f.b.d"
* *
* Here `f` represents a field in some root message, `a` and `b` * Here `f` represents a field in some root message, `a` and `b`
* fields in the message found in `f`, and `d` a field found in the * fields in the message found in `f`, and `d` a field found in the
* message in `f.b`. * message in `f.b`.
* *
* Field masks are used to specify a subset of fields that should be * Field masks are used to specify a subset of fields that should be
* returned by a get operation or modified by an update operation. * returned by a get operation or modified by an update operation.
* Field masks also have a custom JSON encoding (see below). * Field masks also have a custom JSON encoding (see below).
* *
* # Field Masks in Projections * # Field Masks in Projections
* *
* When used in the context of a projection, a response message or * When used in the context of a projection, a response message or
* sub-message is filtered by the API to only contain those fields as * sub-message is filtered by the API to only contain those fields as
* specified in the mask. For example, if the mask in the previous * specified in the mask. For example, if the mask in the previous
* example is applied to a response message as follows: * example is applied to a response message as follows:
* *
* f { * f {
* a : 22 * a : 22
* b { * b {
@ -77,26 +77,26 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
* y : 13 * y : 13
* } * }
* z: 8 * z: 8
* *
* The result will not contain specific values for fields x,y and z * The result will not contain specific values for fields x,y and z
* (their value will be set to the default, and omitted in proto text * (their value will be set to the default, and omitted in proto text
* output): * output):
* *
* *
* f { * f {
* a : 22 * a : 22
* b { * b {
* d : 1 * d : 1
* } * }
* } * }
* *
* A repeated field is not allowed except at the last position of a * A repeated field is not allowed except at the last position of a
* field mask. * field mask.
* *
* If a FieldMask object is not present in a get operation, the * If a FieldMask object is not present in a get operation, the
* operation applies to all fields (as if a FieldMask of all fields * operation applies to all fields (as if a FieldMask of all fields
* had been specified). * had been specified).
* *
* Note that a field mask does not necessarily apply to the * Note that a field mask does not necessarily apply to the
* top-level response message. In case of a REST get operation, the * top-level response message. In case of a REST get operation, the
* field mask applies directly to the response, but in case of a REST * field mask applies directly to the response, but in case of a REST
@ -106,25 +106,25 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
* clearly documented together with its declaration in the API. In * clearly documented together with its declaration in the API. In
* any case, the effect on the returned resource/resources is required * any case, the effect on the returned resource/resources is required
* behavior for APIs. * behavior for APIs.
* *
* # Field Masks in Update Operations * # Field Masks in Update Operations
* *
* A field mask in update operations specifies which fields of the * A field mask in update operations specifies which fields of the
* targeted resource are going to be updated. The API is required * targeted resource are going to be updated. The API is required
* to only change the values of the fields as specified in the mask * to only change the values of the fields as specified in the mask
* and leave the others untouched. If a resource is passed in to * and leave the others untouched. If a resource is passed in to
* describe the updated values, the API ignores the values of all * describe the updated values, the API ignores the values of all
* fields not covered by the mask. * fields not covered by the mask.
* *
* If a repeated field is specified for an update operation, the existing * If a repeated field is specified for an update operation, the existing
* repeated values in the target resource will be overwritten by the new values. * repeated values in the target resource will be overwritten by the new values.
* Note that a repeated field is only allowed in the last position of a field * Note that a repeated field is only allowed in the last position of a field
* mask. * mask.
* *
* If a sub-message is specified in the last position of the field mask for an * If a sub-message is specified in the last position of the field mask for an
* update operation, then the existing sub-message in the target resource is * update operation, then the existing sub-message in the target resource is
* overwritten. Given the target message: * overwritten. Given the target message:
* *
* f { * f {
* b { * b {
* d : 1 * d : 1
@ -132,34 +132,34 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
* } * }
* c : 1 * c : 1
* } * }
* *
* And an update message: * And an update message:
* *
* f { * f {
* b { * b {
* d : 10 * d : 10
* } * }
* } * }
* *
* then if the field mask is: * then if the field mask is:
* *
* paths: "f.b" * paths: "f.b"
* *
* then the result will be: * then the result will be:
* *
* f { * f {
* b { * b {
* d : 10 * d : 10
* } * }
* c : 1 * c : 1
* } * }
* *
* However, if the update mask was: * However, if the update mask was:
* *
* paths: "f.b.d" * paths: "f.b.d"
* *
* then the result would be: * then the result would be:
* *
* f { * f {
* b { * b {
* d : 10 * d : 10
@ -167,13 +167,13 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
* } * }
* c : 1 * c : 1
* } * }
* *
* In order to reset a field's value to the default, the field must * In order to reset a field's value to the default, the field must
* be in the mask and set to the default value in the provided resource. * be in the mask and set to the default value in the provided resource.
* Hence, in order to reset all fields of a resource, provide a default * Hence, in order to reset all fields of a resource, provide a default
* instance of the resource and set all fields in the mask, or do * instance of the resource and set all fields in the mask, or do
* not provide a mask as described below. * not provide a mask as described below.
* *
* If a field mask is not present on update, the operation applies to * If a field mask is not present on update, the operation applies to
* all fields (as if a field mask of all fields has been specified). * all fields (as if a field mask of all fields has been specified).
* Note that in the presence of schema evolution, this may mean that * Note that in the presence of schema evolution, this may mean that
@ -181,26 +181,26 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
* the request will be reset to their default. If this is unwanted * the request will be reset to their default. If this is unwanted
* behavior, a specific service may require a client to always specify * behavior, a specific service may require a client to always specify
* a field mask, producing an error if not. * a field mask, producing an error if not.
* *
* As with get operations, the location of the resource which * As with get operations, the location of the resource which
* describes the updated values in the request message depends on the * describes the updated values in the request message depends on the
* operation kind. In any case, the effect of the field mask is * operation kind. In any case, the effect of the field mask is
* required to be honored by the API. * required to be honored by the API.
* *
* ## Considerations for HTTP REST * ## Considerations for HTTP REST
* *
* The HTTP kind of an update operation which uses a field mask must * The HTTP kind of an update operation which uses a field mask must
* be set to PATCH instead of PUT in order to satisfy HTTP semantics * be set to PATCH instead of PUT in order to satisfy HTTP semantics
* (PUT must only be used for full updates). * (PUT must only be used for full updates).
* *
* # JSON Encoding of Field Masks * # JSON Encoding of Field Masks
* *
* In JSON, a field mask is encoded as a single string where paths are * In JSON, a field mask is encoded as a single string where paths are
* separated by a comma. Fields name in each path are converted * separated by a comma. Fields name in each path are converted
* to/from lower-camel naming conventions. * to/from lower-camel naming conventions.
* *
* As an example, consider the following message declarations: * As an example, consider the following message declarations:
* *
* message Profile { * message Profile {
* User user = 1; * User user = 1;
* Photo photo = 2; * Photo photo = 2;
@ -209,44 +209,44 @@ typedef GPB_ENUM(GPBFieldMask_FieldNumber) {
* string display_name = 1; * string display_name = 1;
* string address = 2; * string address = 2;
* } * }
* *
* In proto a field mask for `Profile` may look as such: * In proto a field mask for `Profile` may look as such:
* *
* mask { * mask {
* paths: "user.display_name" * paths: "user.display_name"
* paths: "photo" * paths: "photo"
* } * }
* *
* In JSON, the same mask is represented as below: * In JSON, the same mask is represented as below:
* *
* { * {
* mask: "user.displayName,photo" * mask: "user.displayName,photo"
* } * }
* *
* # Field Masks and Oneof Fields * # Field Masks and Oneof Fields
* *
* Field masks treat fields in oneofs just as regular fields. Consider the * Field masks treat fields in oneofs just as regular fields. Consider the
* following message: * following message:
* *
* message SampleMessage { * message SampleMessage {
* oneof test_oneof { * oneof test_oneof {
* string name = 4; * string name = 4;
* SubMessage sub_message = 9; * SubMessage sub_message = 9;
* } * }
* } * }
* *
* The field mask can be: * The field mask can be:
* *
* mask { * mask {
* paths: "name" * paths: "name"
* } * }
* *
* Or: * Or:
* *
* mask { * mask {
* paths: "sub_message" * paths: "sub_message"
* } * }
* *
* Note that oneof type names ("test_oneof" in this case) cannot be used in * Note that oneof type names ("test_oneof" in this case) cannot be used in
* paths. * paths.
**/ **/

@ -35,7 +35,7 @@ NS_ASSUME_NONNULL_BEGIN
/** /**
* `NullValue` is a singleton enumeration to represent the null value for the * `NullValue` is a singleton enumeration to represent the null value for the
* `Value` type union. * `Value` type union.
* *
* The JSON representation for `NullValue` is JSON `null`. * The JSON representation for `NullValue` is JSON `null`.
**/ **/
typedef GPB_ENUM(GPBNullValue) { typedef GPB_ENUM(GPBNullValue) {
@ -85,7 +85,7 @@ typedef GPB_ENUM(GPBStruct_FieldNumber) {
* scripting languages like JS a struct is represented as an * scripting languages like JS a struct is represented as an
* object. The details of that representation are described together * object. The details of that representation are described together
* with the proto support for the language. * with the proto support for the language.
* *
* The JSON representation for `Struct` is JSON object. * The JSON representation for `Struct` is JSON object.
**/ **/
@interface GPBStruct : GPBMessage @interface GPBStruct : GPBMessage
@ -123,7 +123,7 @@ typedef GPB_ENUM(GPBValue_Kind_OneOfCase) {
* null, a number, a string, a boolean, a recursive struct value, or a * null, a number, a string, a boolean, a recursive struct value, or a
* list of values. A producer of value is expected to set one of that * list of values. A producer of value is expected to set one of that
* variants, absence of any variant indicates an error. * variants, absence of any variant indicates an error.
* *
* The JSON representation for `Value` is JSON value. * The JSON representation for `Value` is JSON value.
**/ **/
@interface GPBValue : GPBMessage @interface GPBValue : GPBMessage
@ -176,7 +176,7 @@ typedef GPB_ENUM(GPBListValue_FieldNumber) {
/** /**
* `ListValue` is a wrapper around a repeated field of values. * `ListValue` is a wrapper around a repeated field of values.
* *
* The JSON representation for `ListValue` is JSON array. * The JSON representation for `ListValue` is JSON array.
**/ **/
@interface GPBListValue : GPBMessage @interface GPBListValue : GPBMessage

@ -60,44 +60,44 @@ typedef GPB_ENUM(GPBTimestamp_FieldNumber) {
* By restricting to that range, we ensure that we can convert to * By restricting to that range, we ensure that we can convert to
* and from RFC 3339 date strings. * and from RFC 3339 date strings.
* See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt). * See [https://www.ietf.org/rfc/rfc3339.txt](https://www.ietf.org/rfc/rfc3339.txt).
* *
* Example 1: Compute Timestamp from POSIX `time()`. * Example 1: Compute Timestamp from POSIX `time()`.
* *
* Timestamp timestamp; * Timestamp timestamp;
* timestamp.set_seconds(time(NULL)); * timestamp.set_seconds(time(NULL));
* timestamp.set_nanos(0); * timestamp.set_nanos(0);
* *
* Example 2: Compute Timestamp from POSIX `gettimeofday()`. * Example 2: Compute Timestamp from POSIX `gettimeofday()`.
* *
* struct timeval tv; * struct timeval tv;
* gettimeofday(&tv, NULL); * gettimeofday(&tv, NULL);
* *
* Timestamp timestamp; * Timestamp timestamp;
* timestamp.set_seconds(tv.tv_sec); * timestamp.set_seconds(tv.tv_sec);
* timestamp.set_nanos(tv.tv_usec * 1000); * timestamp.set_nanos(tv.tv_usec * 1000);
* *
* Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`. * Example 3: Compute Timestamp from Win32 `GetSystemTimeAsFileTime()`.
* *
* FILETIME ft; * FILETIME ft;
* GetSystemTimeAsFileTime(&ft); * GetSystemTimeAsFileTime(&ft);
* UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime; * UINT64 ticks = (((UINT64)ft.dwHighDateTime) << 32) | ft.dwLowDateTime;
* *
* // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z * // A Windows tick is 100 nanoseconds. Windows epoch 1601-01-01T00:00:00Z
* // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z. * // is 11644473600 seconds before Unix epoch 1970-01-01T00:00:00Z.
* Timestamp timestamp; * Timestamp timestamp;
* timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL)); * timestamp.set_seconds((INT64) ((ticks / 10000000) - 11644473600LL));
* timestamp.set_nanos((INT32) ((ticks % 10000000) * 100)); * timestamp.set_nanos((INT32) ((ticks % 10000000) * 100));
* *
* Example 4: Compute Timestamp from Java `System.currentTimeMillis()`. * Example 4: Compute Timestamp from Java `System.currentTimeMillis()`.
* *
* long millis = System.currentTimeMillis(); * long millis = System.currentTimeMillis();
* *
* Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000) * Timestamp timestamp = Timestamp.newBuilder().setSeconds(millis / 1000)
* .setNanos((int) ((millis % 1000) * 1000000)).build(); * .setNanos((int) ((millis % 1000) * 1000000)).build();
* *
* *
* Example 5: Compute Timestamp from current time in Python. * Example 5: Compute Timestamp from current time in Python.
* *
* now = time.time() * now = time.time()
* seconds = int(now) * seconds = int(now)
* nanos = int((now - seconds) * 10**9) * nanos = int((now - seconds) * 10**9)

@ -49,7 +49,7 @@ typedef GPB_ENUM(GPBDoubleValue_FieldNumber) {
/** /**
* Wrapper message for `double`. * Wrapper message for `double`.
* *
* The JSON representation for `DoubleValue` is JSON number. * The JSON representation for `DoubleValue` is JSON number.
**/ **/
@interface GPBDoubleValue : GPBMessage @interface GPBDoubleValue : GPBMessage
@ -67,7 +67,7 @@ typedef GPB_ENUM(GPBFloatValue_FieldNumber) {
/** /**
* Wrapper message for `float`. * Wrapper message for `float`.
* *
* The JSON representation for `FloatValue` is JSON number. * The JSON representation for `FloatValue` is JSON number.
**/ **/
@interface GPBFloatValue : GPBMessage @interface GPBFloatValue : GPBMessage
@ -85,7 +85,7 @@ typedef GPB_ENUM(GPBInt64Value_FieldNumber) {
/** /**
* Wrapper message for `int64`. * Wrapper message for `int64`.
* *
* The JSON representation for `Int64Value` is JSON string. * The JSON representation for `Int64Value` is JSON string.
**/ **/
@interface GPBInt64Value : GPBMessage @interface GPBInt64Value : GPBMessage
@ -103,7 +103,7 @@ typedef GPB_ENUM(GPBUInt64Value_FieldNumber) {
/** /**
* Wrapper message for `uint64`. * Wrapper message for `uint64`.
* *
* The JSON representation for `UInt64Value` is JSON string. * The JSON representation for `UInt64Value` is JSON string.
**/ **/
@interface GPBUInt64Value : GPBMessage @interface GPBUInt64Value : GPBMessage
@ -121,7 +121,7 @@ typedef GPB_ENUM(GPBInt32Value_FieldNumber) {
/** /**
* Wrapper message for `int32`. * Wrapper message for `int32`.
* *
* The JSON representation for `Int32Value` is JSON number. * The JSON representation for `Int32Value` is JSON number.
**/ **/
@interface GPBInt32Value : GPBMessage @interface GPBInt32Value : GPBMessage
@ -139,7 +139,7 @@ typedef GPB_ENUM(GPBUInt32Value_FieldNumber) {
/** /**
* Wrapper message for `uint32`. * Wrapper message for `uint32`.
* *
* The JSON representation for `UInt32Value` is JSON number. * The JSON representation for `UInt32Value` is JSON number.
**/ **/
@interface GPBUInt32Value : GPBMessage @interface GPBUInt32Value : GPBMessage
@ -157,7 +157,7 @@ typedef GPB_ENUM(GPBBoolValue_FieldNumber) {
/** /**
* Wrapper message for `bool`. * Wrapper message for `bool`.
* *
* The JSON representation for `BoolValue` is JSON `true` and `false`. * The JSON representation for `BoolValue` is JSON `true` and `false`.
**/ **/
@interface GPBBoolValue : GPBMessage @interface GPBBoolValue : GPBMessage
@ -175,7 +175,7 @@ typedef GPB_ENUM(GPBStringValue_FieldNumber) {
/** /**
* Wrapper message for `string`. * Wrapper message for `string`.
* *
* The JSON representation for `StringValue` is JSON string. * The JSON representation for `StringValue` is JSON string.
**/ **/
@interface GPBStringValue : GPBMessage @interface GPBStringValue : GPBMessage
@ -193,7 +193,7 @@ typedef GPB_ENUM(GPBBytesValue_FieldNumber) {
/** /**
* Wrapper message for `bytes`. * Wrapper message for `bytes`.
* *
* The JSON representation for `BytesValue` is JSON string. * The JSON representation for `BytesValue` is JSON string.
**/ **/
@interface GPBBytesValue : GPBMessage @interface GPBBytesValue : GPBMessage

@ -850,14 +850,17 @@ string BuildCommentsString(const SourceLocation& location,
string final_comments; string final_comments;
string epilogue; string epilogue;
bool add_leading_space = false;
if (prefer_single_line && lines.size() == 1) { if (prefer_single_line && lines.size() == 1) {
prefix = "/** "; prefix = "/** ";
suffix = " */\n"; suffix = " */\n";
} else { } else {
prefix = " * "; prefix = "* ";
suffix = "\n"; suffix = "\n";
final_comments += "/**\n"; final_comments += "/**\n";
epilogue = " **/\n"; epilogue = " **/\n";
add_leading_space = true;
} }
for (int i = 0; i < lines.size(); i++) { for (int i = 0; i < lines.size(); i++) {
@ -868,7 +871,12 @@ string BuildCommentsString(const SourceLocation& location,
// Decouple / from * to not have inline comments inside comments. // Decouple / from * to not have inline comments inside comments.
line = StringReplace(line, "/*", "/\\*", true); line = StringReplace(line, "/*", "/\\*", true);
line = StringReplace(line, "*/", "*\\/", true); line = StringReplace(line, "*/", "*\\/", true);
final_comments += prefix + line + suffix; line = prefix + line;
StripWhitespace(&line);
// If not a one line, need to add the first space before *, as
// StripWhitespace would have removed it.
line = (add_leading_space ? " " : "") + line;
final_comments += line + suffix;
} }
final_comments += epilogue; final_comments += epilogue;
return final_comments; return final_comments;

Loading…
Cancel
Save