googleapis / googleapis/google-cloud-java
[sdk-platform-java] Enforce REQUIRED annotations via API call signatures
- Langage dominant
- Java
- Étoiles
- 2.1k
- Forks
- 1.2k
- Merge moyen
- 1 j 23 h
- PR mergées (30 j)
- 154
Description
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!
Guide de contribution
Ouvrir le guide de contribution
Évaluation
Cette issue n'a pas encore été évaluée.