googleapis / googleapis/google-cloud-java

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

オープン
#12,535 コメント 9 件 リアクション 0 件 担当者 0 名 GitHub で見る
priority: p3 type: feature request type: question
主要言語
Java
スター
2.1k
フォーク
1.2k
平均マージ
1日 23時間
マージ済み PR(30日)
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 を短くまとめたダイジェスト。