googleapis / googleapis/google-cloud-java
[sdk-platform-java] Enforce REQUIRED annotations via API call signatures
- 主要语言
- Java
- 星标
- 2.1k
- 派生
- 1.2k
- 平均合并
- 1 天 23 小时
- 30 天内合并 PR
- 154
描述
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!
贡献指南
评估
这个 Issue 还没有评估数据。