Skip to content

Commit ef5eb49

Browse files
committed
feat: add NullMarked annotation to generated client, stub, and resource name classes
1 parent 7f4c73a commit ef5eb49

8 files changed

Lines changed: 41 additions & 7 deletions

sdk-platform-java/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceCallableFactoryClassComposer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package com.google.api.generator.gapic.composer.common;
1616

1717
import com.google.api.core.BetaApi;
18+
import org.jspecify.annotations.NullMarked;
19+
import org.jspecify.annotations.Nullable;
1820
import com.google.api.gax.rpc.BatchingCallSettings;
1921
import com.google.api.gax.rpc.BidiStreamingCallable;
2022
import com.google.api.gax.rpc.ClientContext;
@@ -93,6 +95,7 @@ public GapicClass generate(GapicContext context, Service service) {
9395

9496
protected List<AnnotationNode> createClassAnnotations(Service service, TypeStore typeStore) {
9597
List<AnnotationNode> annotations = new ArrayList<>();
98+
annotations.add(AnnotationNode.withType(typeStore.get("NullMarked")));
9699
if (!PackageChecker.isGaApi(service.pakkage())) {
97100
annotations.add(AnnotationNode.withType(typeStore.get("BetaApi")));
98101
}
@@ -349,7 +352,9 @@ private TypeStore createTypes(Service service) {
349352
UnaryCallSettings.class,
350353
UnaryCallable.class,
351354
Generated.class,
352-
UnsupportedOperationException.class);
355+
UnsupportedOperationException.class,
356+
NullMarked.class,
357+
Nullable.class);
353358
return new TypeStore(concreteClazzes);
354359
}
355360
}

sdk-platform-java/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceClientClassComposer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@
1919
import com.google.api.core.ApiFutures;
2020
import com.google.api.core.BetaApi;
2121
import com.google.api.core.InternalApi;
22+
import org.jspecify.annotations.NullMarked;
23+
import org.jspecify.annotations.Nullable;
2224
import com.google.api.gax.core.BackgroundResource;
2325
import com.google.api.gax.longrunning.OperationFuture;
2426
import com.google.api.gax.paging.AbstractFixedSizeCollection;
@@ -193,6 +195,7 @@ public GapicClass generate(GapicContext context, Service service) {
193195

194196
private static List<AnnotationNode> createClassAnnotations(Service service, TypeStore typeStore) {
195197
List<AnnotationNode> annotations = new ArrayList<>();
198+
annotations.add(AnnotationNode.withType(typeStore.get("NullMarked")));
196199
if (!PackageChecker.isGaApi(service.pakkage())) {
197200
annotations.add(AnnotationNode.withType(typeStore.get("BetaApi")));
198201
}
@@ -1794,7 +1797,9 @@ private static TypeStore createTypes(Service service, Map<String, Message> messa
17941797
Status.class,
17951798
Strings.class,
17961799
TimeUnit.class,
1797-
UnaryCallable.class);
1800+
UnaryCallable.class,
1801+
NullMarked.class,
1802+
Nullable.class);
17981803
TypeStore typeStore = new TypeStore(concreteClazzes);
17991804
createVaporTypes(service, typeStore);
18001805
return typeStore;

sdk-platform-java/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceSettingsClassComposer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@
1717
import com.google.api.core.ApiFunction;
1818
import com.google.api.core.BetaApi;
1919
import com.google.api.core.InternalApi;
20+
import org.jspecify.annotations.NullMarked;
21+
import org.jspecify.annotations.Nullable;
2022
import com.google.api.gax.core.GoogleCredentialsProvider;
2123
import com.google.api.gax.core.InstantiatingExecutorProvider;
2224
import com.google.api.gax.rpc.ApiClientHeaderProvider;
@@ -204,6 +206,7 @@ private static List<CommentStatement> createClassHeaderComments(
204206

205207
private static List<AnnotationNode> createClassAnnotations(Service service) {
206208
List<AnnotationNode> annotations = new ArrayList<>();
209+
annotations.add(AnnotationNode.withType(FIXED_TYPESTORE.get("NullMarked")));
207210
if (!PackageChecker.isGaApi(service.pakkage())) {
208211
annotations.add(AnnotationNode.withType(FIXED_TYPESTORE.get("BetaApi")));
209212
}
@@ -847,7 +850,9 @@ private static TypeStore createStaticTypes() {
847850
StreamingCallSettings.class,
848851
StubSettings.class,
849852
TransportChannelProvider.class,
850-
UnaryCallSettings.class);
853+
UnaryCallSettings.class,
854+
NullMarked.class,
855+
Nullable.class);
851856
return new TypeStore(concreteClazzes);
852857
}
853858

sdk-platform-java/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubClassComposer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@
1616

1717
import com.google.api.core.BetaApi;
1818
import com.google.api.core.InternalApi;
19+
import org.jspecify.annotations.NullMarked;
20+
import org.jspecify.annotations.Nullable;
1921
import com.google.api.gax.core.BackgroundResource;
2022
import com.google.api.gax.rpc.BidiStreamingCallable;
2123
import com.google.api.gax.rpc.ClientStreamingCallable;
@@ -93,6 +95,7 @@ public GapicClass generate(GapicContext context, Service service) {
9395

9496
private static List<AnnotationNode> createClassAnnotations(Service service, TypeStore typeStore) {
9597
List<AnnotationNode> annotations = new ArrayList<>();
98+
annotations.add(AnnotationNode.withType(typeStore.get("NullMarked")));
9699
if (!PackageChecker.isGaApi(service.pakkage())) {
97100
annotations.add(AnnotationNode.withType(typeStore.get("BetaApi")));
98101
}
@@ -270,7 +273,9 @@ private static TypeStore createTypes(Service service, Map<String, Message> messa
270273
OperationCallable.class,
271274
ServerStreamingCallable.class,
272275
UnaryCallable.class,
273-
UnsupportedOperationException.class);
276+
UnsupportedOperationException.class,
277+
NullMarked.class,
278+
Nullable.class);
274279
TypeStore typeStore = new TypeStore(concreteClazzes);
275280

276281
typeStore.put("com.google.longrunning.stub", "OperationsStub");

sdk-platform-java/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractServiceStubSettingsClassComposer.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -411,6 +411,7 @@ protected MethodDefinition createApiClientHeaderProviderBuilderMethod(
411411

412412
private List<AnnotationNode> createClassAnnotations(Service service) {
413413
List<AnnotationNode> annotations = new ArrayList<>();
414+
annotations.add(AnnotationNode.withType(FIXED_TYPESTORE.get("NullMarked")));
414415
if (!PackageChecker.isGaApi(service.pakkage())) {
415416
annotations.add(AnnotationNode.withType(FIXED_TYPESTORE.get("BetaApi")));
416417
}
@@ -2217,7 +2218,9 @@ private static TypeStore createStaticTypes() {
22172218
SuppressWarnings.class,
22182219
TransportChannelProvider.class,
22192220
UnaryCallSettings.class,
2220-
UnaryCallable.class);
2221+
UnaryCallable.class,
2222+
org.jspecify.annotations.NullMarked.class,
2223+
org.jspecify.annotations.Nullable.class);
22212224
return new TypeStore(concreteClazzes);
22222225
}
22232226

sdk-platform-java/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/common/AbstractTransportServiceStubClassComposer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
package com.google.api.generator.gapic.composer.common;
1616

1717
import com.google.api.core.BetaApi;
18+
import org.jspecify.annotations.NullMarked;
19+
import org.jspecify.annotations.Nullable;
1820
import com.google.api.gax.core.BackgroundResource;
1921
import com.google.api.gax.core.BackgroundResourceAggregation;
2022
import com.google.api.gax.longrunning.OperationSnapshot;
@@ -152,7 +154,9 @@ private static TypeStore createStaticTypes() {
152154
TimeUnit.class,
153155
TypeRegistry.class,
154156
UnaryCallable.class,
155-
UnsupportedOperationException.class);
157+
UnsupportedOperationException.class,
158+
NullMarked.class,
159+
Nullable.class);
156160
return new TypeStore(concreteClazzes);
157161
}
158162

@@ -548,6 +552,7 @@ private VariableExpr getOperationCallableExpr(Method protoMethod, String callabl
548552

549553
protected List<AnnotationNode> createClassAnnotations(Service service) {
550554
List<AnnotationNode> annotations = new ArrayList<>();
555+
annotations.add(AnnotationNode.withType(FIXED_TYPESTORE.get("NullMarked")));
551556
if (!PackageChecker.isGaApi(service.pakkage())) {
552557
annotations.add(AnnotationNode.withType(FIXED_TYPESTORE.get("BetaApi")));
553558
}

sdk-platform-java/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/resourcename/ResourceNameHelperClassComposer.java

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@
1414

1515
package com.google.api.generator.gapic.composer.resourcename;
1616

17+
import org.jspecify.annotations.NullMarked;
18+
import org.jspecify.annotations.Nullable;
1719
import com.google.api.generator.engine.ast.AnnotationNode;
1820
import com.google.api.generator.engine.ast.AssignmentExpr;
1921
import com.google.api.generator.engine.ast.AssignmentOperationExpr;
@@ -152,6 +154,7 @@ public GapicClass generate(ResourceName resourceName, GapicContext context) {
152154

153155
private static List<AnnotationNode> createClassAnnotations() {
154156
return Arrays.asList(
157+
AnnotationNode.withType(FIXED_TYPESTORE.get("NullMarked")),
155158
AnnotationNode.builder()
156159
.setType(FIXED_TYPESTORE.get("Generated"))
157160
.setDescription("by gapic-generator-java")
@@ -1704,7 +1707,9 @@ private static TypeStore createStaticTypes() {
17041707
PathTemplate.class,
17051708
Preconditions.class,
17061709
com.google.api.resourcenames.ResourceName.class,
1707-
ValidationException.class);
1710+
ValidationException.class,
1711+
NullMarked.class,
1712+
Nullable.class);
17081713
return new TypeStore(concreteClazzes);
17091714
}
17101715

sdk-platform-java/gapic-generator-java/src/main/java/com/google/api/generator/gapic/composer/utils/CommonStrings.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,4 +21,5 @@ public class CommonStrings {
2121
"This API is not intended for public consumption.";
2222
public static final String SETTINGS_LITERAL = "Settings";
2323
public static final String OPERATION_SETTINGS_LITERAL = "OperationSettings";
24+
public static final String JSPECIFY_ANNOTATIONS_PACKAGE = "org.jspecify.annotations";
2425
}

0 commit comments

Comments
 (0)