googleapis / googleapis/google-cloud-java

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

Open
#12,535 9 comments 0 reactions 0 assignees View on GitHub
priority: p3 type: feature request type: question
Dominant language
Java
Stars
2.1k
Forks
1.2k
Avg merge
1d 23h
Merged PRs (30d)
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!

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.