googleapis / googleapis/google-cloud-java
[sdk-platform-java] Enforce REQUIRED annotations via API call signatures
- Ngôn ngữ chính
- Java
- Star
- 2.1k
- Fork
- 1.2k
- Merge trung bình
- 1 ngày 23 giờ
- Pull request đã merge (30 ngày)
- 154
Mô tả
Problem:
When a field is annotated as REQUIRED, the API allows constructing objects without specifying explicitly the value of the required field.
Example:
```
import "google/api/field_behavior.proto";
message Child { ... }
message Parent {
Child child = 1 [
(google.api.field_behavior) = REQUIRED
];
}
```
The `Parent` will generate a Builder that has a `setChild()` method, but there's no compile-time way to check that this setter was called. So it's possible to write code that constructs "bad" messages which will only be manifest at runtime.
**Describe the solution you'd like**
Positional arguments for required fields. In the example above, to get a `Parent` Builder (or to create a Parent in some other way) your **only option** would be to call a method that requires a `Child` as a parameter.
To preserve the existing API, this feature could be placed behind a flag / option for the proto generator.
**Describe alternatives you've considered**
Don't think there's an alternative besides changing how code is generated.
Thanks!
Hướng dẫn đóng góp
Đánh giá
Issue này chưa được đánh giá.