googleapis / googleapis/google-cloud-java

[sdk-platform-java] Enforce REQUIRED annotations via API call signatures

未关闭
#12,535 9 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
priority: p3 type: feature request type: question
主要语言
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 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。