Skip to content

Commit 747fddc

Browse files
authored
[ggj][ast] feat: add ValueExpr.createNullExpr() convenience wrapper (#584)
* fix: fix dep ordering in Bazel dedupe rules * fix: replace Objects.isNull() with equality check for Java 7 compat * feat: add ValueExpr.createNullExpr() wrapper * fix: formatting
1 parent 2db0bc0 commit 747fddc

15 files changed

+54
-64
lines changed

src/main/java/com/google/api/generator/engine/ast/ValueExpr.java

+4
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ public static ValueExpr withValue(Value value) {
3434
return builder().setValue(value).build();
3535
}
3636

37+
public static ValueExpr createNullExpr() {
38+
return withValue(NullObjectValue.create());
39+
}
40+
3741
public static Builder builder() {
3842
return new AutoValue_ValueExpr.Builder();
3943
}

src/main/java/com/google/api/generator/gapic/composer/BatchingDescriptorComposer.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import com.google.api.generator.engine.ast.MethodDefinition;
3030
import com.google.api.generator.engine.ast.MethodInvocationExpr;
3131
import com.google.api.generator.engine.ast.NewObjectExpr;
32-
import com.google.api.generator.engine.ast.NullObjectValue;
3332
import com.google.api.generator.engine.ast.PrimitiveValue;
3433
import com.google.api.generator.engine.ast.Reference;
3534
import com.google.api.generator.engine.ast.RelationalOperationExpr;
@@ -205,7 +204,7 @@ private static MethodDefinition createGetRequestBuilderMethod(
205204
IfStatement.builder()
206205
.setConditionExpr(
207206
RelationalOperationExpr.equalToWithExprs(
208-
builderVarExpr, ValueExpr.withValue(NullObjectValue.create())))
207+
builderVarExpr, ValueExpr.createNullExpr()))
209208
.setBody(Arrays.asList(ExprStatement.withExpr(toBuilderExpr)))
210209
.setElseBody(Arrays.asList(ExprStatement.withExpr(addAllExpr)))
211210
.build()))

src/main/java/com/google/api/generator/gapic/composer/ResourceNameHelperClassComposer.java

+7-14
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
import com.google.api.generator.engine.ast.MethodDefinition;
3232
import com.google.api.generator.engine.ast.MethodInvocationExpr;
3333
import com.google.api.generator.engine.ast.NewObjectExpr;
34-
import com.google.api.generator.engine.ast.NullObjectValue;
3534
import com.google.api.generator.engine.ast.PrimitiveValue;
3635
import com.google.api.generator.engine.ast.Reference;
3736
import com.google.api.generator.engine.ast.RelationalOperationExpr;
@@ -288,7 +287,7 @@ private static List<MethodDefinition> createConstructorMethods(
288287
boolean hasVariants = tokenHierarchies.size() > 1;
289288

290289
List<MethodDefinition> javaMethods = new ArrayList<>();
291-
final ValueExpr nullExpr = ValueExpr.withValue(NullObjectValue.create());
290+
final ValueExpr nullExpr = ValueExpr.createNullExpr();
292291
Function<String, AssignmentExpr> assignTokenToNullExpr =
293292
t ->
294293
AssignmentExpr.builder()
@@ -622,8 +621,7 @@ private static MethodDefinition createParseMethod(
622621
.build())
623622
.setBody(
624623
Arrays.asList(
625-
ExprStatement.withExpr(
626-
ReturnExpr.withExpr(ValueExpr.withValue(NullObjectValue.create())))))
624+
ExprStatement.withExpr(ReturnExpr.withExpr(ValueExpr.createNullExpr()))))
627625
.build());
628626

629627
List<Expr> formattedStringArgList = Arrays.asList(formattedStringArgExpr);
@@ -864,8 +862,7 @@ private static MethodDefinition createToStringListMethod(TypeNode thisClassType)
864862
Variable.builder().setName("value").setType(thisClassType).build());
865863
// We use an equality check instead of Objects.isNull() for Java 7 compatibility.
866864
Expr isNullCheck =
867-
RelationalOperationExpr.equalToWithExprs(
868-
valueVarExpr, ValueExpr.withValue(NullObjectValue.create()));
865+
RelationalOperationExpr.equalToWithExprs(valueVarExpr, ValueExpr.createNullExpr());
869866
Statement listAddEmptyStringStatement =
870867
ExprStatement.withExpr(
871868
MethodInvocationExpr.builder()
@@ -1002,8 +999,7 @@ private static MethodDefinition createGetFieldValuesMapMethod(
1002999
.setArguments(ValueExpr.withValue(tokenStrVal), tokenVarExpr)
10031000
.build();
10041001
Expr notNullCheckExpr =
1005-
RelationalOperationExpr.notEqualToWithExprs(
1006-
tokenVarExpr, ValueExpr.withValue(NullObjectValue.create()));
1002+
RelationalOperationExpr.notEqualToWithExprs(tokenVarExpr, ValueExpr.createNullExpr());
10071003
tokenIfStatements.add(
10081004
IfStatement.builder()
10091005
.setConditionExpr(notNullCheckExpr)
@@ -1031,8 +1027,7 @@ private static MethodDefinition createGetFieldValuesMapMethod(
10311027

10321028
// Middle if-block, i.e. `if (fieldValuesMap == null)`.
10331029
Expr fieldValuesMapNullCheckExpr =
1034-
RelationalOperationExpr.equalToWithExprs(
1035-
fieldValuesMapVarExpr, ValueExpr.withValue(NullObjectValue.create()));
1030+
RelationalOperationExpr.equalToWithExprs(fieldValuesMapVarExpr, ValueExpr.createNullExpr());
10361031
IfStatement fieldValuesMapIfStatement =
10371032
IfStatement.builder()
10381033
.setConditionExpr(fieldValuesMapNullCheckExpr)
@@ -1125,8 +1120,7 @@ private static MethodDefinition createToStringMethod(
11251120
VariableExpr fixedValueVarExpr = FIXED_CLASS_VARS.get("fixedValue");
11261121
// Code: return fixedValue != null ? fixedValue : pathTemplate.instantiate(getFieldValuesMap())
11271122
Expr fixedValueNullCheck =
1128-
RelationalOperationExpr.notEqualToWithExprs(
1129-
fixedValueVarExpr, ValueExpr.withValue(NullObjectValue.create()));
1123+
RelationalOperationExpr.notEqualToWithExprs(fixedValueVarExpr, ValueExpr.createNullExpr());
11301124

11311125
MethodInvocationExpr instantiateExpr =
11321126
MethodInvocationExpr.builder()
@@ -1171,8 +1165,7 @@ private static MethodDefinition createEqualsMethod(
11711165
RelationalOperationExpr oEqualsThisExpr =
11721166
RelationalOperationExpr.equalToWithExprs(argVarExpr, thisValueExpr);
11731167
RelationalOperationExpr oNotEqualsNullExpr =
1174-
RelationalOperationExpr.notEqualToWithExprs(
1175-
argVarExpr, ValueExpr.withValue(NullObjectValue.create()));
1168+
RelationalOperationExpr.notEqualToWithExprs(argVarExpr, ValueExpr.createNullExpr());
11761169
MethodInvocationExpr getClassMethodInvocationExpr =
11771170
MethodInvocationExpr.builder().setMethodName("getClass").build();
11781171
RelationalOperationExpr getClassEqualsExpr =

src/main/java/com/google/api/generator/gapic/composer/RetrySettingsComposer.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,6 @@
3030
import com.google.api.generator.engine.ast.Expr;
3131
import com.google.api.generator.engine.ast.ExprStatement;
3232
import com.google.api.generator.engine.ast.MethodInvocationExpr;
33-
import com.google.api.generator.engine.ast.NullObjectValue;
3433
import com.google.api.generator.engine.ast.PrimitiveValue;
3534
import com.google.api.generator.engine.ast.StringObjectValue;
3635
import com.google.api.generator.engine.ast.TypeNode;
@@ -108,7 +107,7 @@ public static BlockStatement createRetryParamDefinitionsBlock(
108107
bodyExprs.add(
109108
AssignmentExpr.builder()
110109
.setVariableExpr(settingsVarExpr.toBuilder().setIsDecl(true).build())
111-
.setValueExpr(ValueExpr.withValue(NullObjectValue.create()))
110+
.setValueExpr(ValueExpr.createNullExpr())
112111
.build());
113112

114113
// Build the settings object for each config.

src/main/java/com/google/api/generator/gapic/composer/ServiceClientClassComposer.java

+4-5
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
import com.google.api.generator.engine.ast.MethodDefinition;
4141
import com.google.api.generator.engine.ast.MethodInvocationExpr;
4242
import com.google.api.generator.engine.ast.NewObjectExpr;
43-
import com.google.api.generator.engine.ast.NullObjectValue;
4443
import com.google.api.generator.engine.ast.PrimitiveValue;
4544
import com.google.api.generator.engine.ast.Reference;
4645
import com.google.api.generator.engine.ast.ReferenceConstructorExpr;
@@ -390,7 +389,7 @@ private static List<MethodDefinition> createConstructorMethods(
390389
ctorAssignmentExprs.add(
391390
AssignmentExpr.builder()
392391
.setVariableExpr(settingsVarExpr.toBuilder().setExprReferenceExpr(thisExpr).build())
393-
.setValueExpr(ValueExpr.withValue(NullObjectValue.create()))
392+
.setValueExpr(ValueExpr.createNullExpr())
394393
.build());
395394
ctorAssignmentExprs.add(
396395
AssignmentExpr.builder()
@@ -1125,7 +1124,7 @@ private static ClassDefinition createNestedRpcPageClass(
11251124
.build();
11261125

11271126
// createEmptyPage method.
1128-
ValueExpr nullExpr = ValueExpr.withValue(NullObjectValue.create());
1127+
ValueExpr nullExpr = ValueExpr.createNullExpr();
11291128
MethodDefinition createEmptyPageMethod =
11301129
MethodDefinition.builder()
11311130
.setScope(ScopeNode.PRIVATE)
@@ -1276,7 +1275,7 @@ private static ClassDefinition createNestedRpcFixedSizeCollectionClass(
12761275
NewObjectExpr.builder()
12771276
.setType(classType)
12781277
.setArguments(
1279-
ValueExpr.withValue(NullObjectValue.create()),
1278+
ValueExpr.createNullExpr(),
12801279
ValueExpr.withValue(
12811280
PrimitiveValue.builder().setType(TypeNode.INT).setValue("0").build()))
12821281
.build())
@@ -1348,7 +1347,7 @@ static MethodInvocationExpr buildNestedSetterInvocationExpr(
13481347
VariableExpr.withVariable(
13491348
Variable.builder().setName(argumentName).setType(argumentType).build());
13501349
if (argument.isResourceNameHelper()) {
1351-
Expr nullExpr = ValueExpr.withValue(NullObjectValue.create());
1350+
Expr nullExpr = ValueExpr.createNullExpr();
13521351
Expr isNullCheckExpr = RelationalOperationExpr.equalToWithExprs(argVarExpr, nullExpr);
13531352
MethodInvocationExpr toStringExpr =
13541353
MethodInvocationExpr.builder()

src/main/java/com/google/api/generator/gapic/composer/ServiceSettingsClassComposer.java

+1-2
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,6 @@
3939
import com.google.api.generator.engine.ast.MethodDefinition;
4040
import com.google.api.generator.engine.ast.MethodInvocationExpr;
4141
import com.google.api.generator.engine.ast.NewObjectExpr;
42-
import com.google.api.generator.engine.ast.NullObjectValue;
4342
import com.google.api.generator.engine.ast.Reference;
4443
import com.google.api.generator.engine.ast.ReferenceConstructorExpr;
4544
import com.google.api.generator.engine.ast.ScopeNode;
@@ -452,7 +451,7 @@ private static List<MethodDefinition> createNestedBuilderConstructorMethods(
452451
.setArguments(
453452
CastExpr.builder()
454453
.setType(staticTypes.get("ClientContext"))
455-
.setExpr(ValueExpr.withValue(NullObjectValue.create()))
454+
.setExpr(ValueExpr.createNullExpr())
456455
.build())
457456
.build())))
458457
.build();

src/main/java/com/google/api/generator/gapic/composer/ServiceStubSettingsClassComposer.java

+3-5
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@
6565
import com.google.api.generator.engine.ast.MethodDefinition;
6666
import com.google.api.generator.engine.ast.MethodInvocationExpr;
6767
import com.google.api.generator.engine.ast.NewObjectExpr;
68-
import com.google.api.generator.engine.ast.NullObjectValue;
6968
import com.google.api.generator.engine.ast.Reference;
7069
import com.google.api.generator.engine.ast.ReferenceConstructorExpr;
7170
import com.google.api.generator.engine.ast.RelationalOperationExpr;
@@ -546,8 +545,7 @@ private static Expr createPagedListDescriptorAssignExpr(
546545
.setReturnType(returnType)
547546
.build();
548547
Expr conditionExpr =
549-
RelationalOperationExpr.equalToWithExprs(
550-
getResponsesListExpr, ValueExpr.withValue(NullObjectValue.create()));
548+
RelationalOperationExpr.equalToWithExprs(getResponsesListExpr, ValueExpr.createNullExpr());
551549
Expr thenExpr =
552550
MethodInvocationExpr.builder()
553551
.setStaticReferenceType(
@@ -1345,7 +1343,7 @@ private static List<MethodDefinition> createNestedClassConstructorMethods(
13451343
.setArguments(
13461344
CastExpr.builder()
13471345
.setType(STATIC_TYPES.get("ClientContext"))
1348-
.setExpr(ValueExpr.withValue(NullObjectValue.create()))
1346+
.setExpr(ValueExpr.createNullExpr())
13491347
.build())
13501348
.build())))
13511349
.build());
@@ -1597,7 +1595,7 @@ private static MethodDefinition createNestedClassCreateDefaultMethod(
15971595
.setArguments(
15981596
CastExpr.builder()
15991597
.setType(STATIC_TYPES.get("ClientContext"))
1600-
.setExpr(ValueExpr.withValue(NullObjectValue.create()))
1598+
.setExpr(ValueExpr.createNullExpr())
16011599
.build())
16021600
.build())
16031601
.build()));

src/test/java/com/google/api/generator/engine/ast/ArithmeticOperationExprTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ public void concatOperator_validWithNull() {
3838
// Type-checking for String variable x and null object value.
3939
VariableExpr lhsExpr =
4040
VariableExpr.withVariable(Variable.builder().setType(TypeNode.STRING).setName("x").build());
41-
ValueExpr rhsExpr = ValueExpr.withValue(NullObjectValue.create());
41+
ValueExpr rhsExpr = ValueExpr.createNullExpr();
4242
ArithmeticOperationExpr.concatWithExprs(lhsExpr, rhsExpr);
4343
// No exception thrown, so we succeeded.
4444
}

src/test/java/com/google/api/generator/engine/ast/AssignmentOperationExprTest.java

+6-6
Original file line numberDiff line numberDiff line change
@@ -349,7 +349,7 @@ public void invalidMultiplyAndAssignmentOperationExpr_floatBoxedWithObjectType()
349349
public void invalidMultiplyAndAssignmentOperationExpr_floatBoxedWithNullType() {
350350
// No need swap case.
351351
VariableExpr lhsExpr = createVariableExpr(TypeNode.FLOAT_OBJECT, "x");
352-
ValueExpr rhsExpr = ValueExpr.withValue(NullObjectValue.create());
352+
ValueExpr rhsExpr = ValueExpr.createNullExpr();
353353
assertThrows(
354354
IllegalStateException.class,
355355
() -> AssignmentOperationExpr.multiplyAssignmentWithExprs(lhsExpr, rhsExpr));
@@ -463,7 +463,7 @@ public void invalidMultiplyAndAssignmentOperationExpr_doubleBoxedWithReferenceTy
463463
public void invalidMultiplyAndAssignmentOperationExpr_doubleBoxedWithNullType() {
464464
// No need swap case.
465465
VariableExpr lhsExpr = createVariableExpr(TypeNode.DOUBLE_OBJECT, "x");
466-
ValueExpr valueExprExpr = ValueExpr.withValue(NullObjectValue.create());
466+
ValueExpr valueExprExpr = ValueExpr.createNullExpr();
467467
assertThrows(
468468
IllegalStateException.class,
469469
() -> AssignmentOperationExpr.multiplyAssignmentWithExprs(lhsExpr, valueExprExpr));
@@ -533,7 +533,7 @@ public void invalidMultiplyAndAssignmentOperationExpr_longBoxedWithDoubleType()
533533
public void invalidMultiplyAndAssignmentOperationExpr_longBoxedWithNullType() {
534534
// Swap test case in "invalidMultiplyAndAssignmentOperationExpr_nullWithLongBoxedType".
535535
VariableExpr lhsExpr = createVariableExpr(TypeNode.LONG_OBJECT, "x");
536-
ValueExpr rhsExpr = ValueExpr.withValue(NullObjectValue.create());
536+
ValueExpr rhsExpr = ValueExpr.createNullExpr();
537537
assertThrows(
538538
IllegalStateException.class,
539539
() -> AssignmentOperationExpr.multiplyAssignmentWithExprs(lhsExpr, rhsExpr));
@@ -715,7 +715,7 @@ public void invalidXorAssignmentOperationExpr_booleanWithReferencedTypes() {
715715
public void invalidXorAssignmentOperationExpr_booleanWithNullTypes() {
716716
// No valid swap case.
717717
VariableExpr lhsExpr = createVariableExpr(TypeNode.BOOLEAN, "x");
718-
ValueExpr rhsExpr = ValueExpr.withValue(NullObjectValue.create());
718+
ValueExpr rhsExpr = ValueExpr.createNullExpr();
719719
assertThrows(
720720
IllegalStateException.class,
721721
() -> AssignmentOperationExpr.xorAssignmentWithExprs(lhsExpr, rhsExpr));
@@ -894,7 +894,7 @@ public void invalidXorAssignmentOperationExpr_integerWithBooleanTypes() {
894894
public void invalidXorAssignmentOperationExpr_integerWithNullTypes() {
895895
// No need swap case.
896896
VariableExpr lhsExpr = createVariableExpr(TypeNode.INT, "x");
897-
ValueExpr rhsExpr = ValueExpr.withValue(NullObjectValue.create());
897+
ValueExpr rhsExpr = ValueExpr.createNullExpr();
898898
assertThrows(
899899
IllegalStateException.class,
900900
() -> AssignmentOperationExpr.xorAssignmentWithExprs(lhsExpr, rhsExpr));
@@ -1091,7 +1091,7 @@ public void invalidXorAssignmentOperationExpr_integerBoxedTypeWithBooleanTypes()
10911091
public void invalidXorAssignmentOperationExpr_integerBoxedWithNullTypes() {
10921092
// No need swap case.
10931093
VariableExpr lhsExpr = createVariableExpr(TypeNode.INT_OBJECT, "x");
1094-
ValueExpr rhsExpr = ValueExpr.withValue(NullObjectValue.create());
1094+
ValueExpr rhsExpr = ValueExpr.createNullExpr();
10951095
assertThrows(
10961096
IllegalStateException.class,
10971097
() -> AssignmentOperationExpr.xorAssignmentWithExprs(lhsExpr, rhsExpr));

src/test/java/com/google/api/generator/engine/ast/CastExprTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public void validCastExpr_basicNull() {
3636
VariableExpr variableExpr = VariableExpr.builder().setVariable(variable).build();
3737
CastExpr.builder()
3838
.setType(TypeNode.withReference(ConcreteReference.withClazz(Object.class)))
39-
.setExpr(ValueExpr.withValue(NullObjectValue.create()))
39+
.setExpr(ValueExpr.createNullExpr())
4040
.build();
4141
// No exception thrown, so we succeeded.
4242
}

src/test/java/com/google/api/generator/engine/ast/LogicalOperationExprTest.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -99,7 +99,7 @@ public void logicalOr_invalidNullType() {
9999
VariableExpr lhsExpr =
100100
VariableExpr.withVariable(
101101
Variable.builder().setType(TypeNode.BOOLEAN).setName("x").build());
102-
ValueExpr rhsExpr = ValueExpr.withValue(NullObjectValue.create());
102+
ValueExpr rhsExpr = ValueExpr.createNullExpr();
103103
assertThrows(
104104
IllegalStateException.class,
105105
() -> LogicalOperationExpr.logicalOrWithExprs(lhsExpr, rhsExpr));

0 commit comments

Comments
 (0)