Skip to content

Commit 692ebf4

Browse files
author
Pritham Marupaka
committed
Don't create parameter records when there are no parameters for error
1 parent d045209 commit 692ebf4

File tree

14 files changed

+169
-151
lines changed

14 files changed

+169
-151
lines changed

conjure-java-core/src/integrationInput/java/com/palantir/another/EndpointSpecificErrors.java

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

conjure-java-core/src/integrationInput/java/com/palantir/product/EndpointSpecificTwoErrors.java

-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

conjure-java-core/src/integrationInput/java/com/palantir/product/ErrorServiceAsync.java

+10-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

conjure-java-core/src/integrationInput/java/com/palantir/product/ErrorServiceBlocking.java

+10-12
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

conjure-java-core/src/main/java/com/palantir/conjure/java/Options.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -179,8 +179,9 @@ default boolean excludeDialogueAsyncInterfaces() {
179179
}
180180

181181
/**
182-
* TODO(pm): flesh this out more. For errors associated with endpoints, this option enables the generated Dialogue
183-
* clients to return a result type.
182+
* If enabled, endpoints that have associated errors will return a result type: a sealed interface permitting
183+
* subclasses for the endpoint's return value, and each endpoint error. Each endpoint error is a subclass of
184+
* {@link com.palantir.conjure.java.lib.internal.ConjureErrors.BaseEndpointError}.
184185
*/
185186
@Value.Default
186187
default boolean generateDialogueEndpointErrorResultTypes() {

conjure-java-core/src/main/java/com/palantir/conjure/java/services/dialogue/DefaultStaticFactoryMethodGenerator.java

+24-21
Original file line numberDiff line numberDiff line change
@@ -120,7 +120,7 @@ public MethodSpec generate(ServiceDefinition def) {
120120
Packages.getPrefixedPackage(
121121
def.getServiceName().getPackage(), options.packagePrefix()),
122122
className.simpleName(),
123-
ErrorGenerationUtils.responseTypeName(endpoint.getEndpointName())),
123+
ErrorGenerationUtils.endpointResponseResultTypeName(endpoint.getEndpointName())),
124124
endpoint,
125125
endpoint.getEndpointName(),
126126
endpoint.getReturns())
@@ -178,16 +178,19 @@ private Optional<FieldSpec> serializer(EndpointName endpointName, Type type) {
178178
private Optional<FieldSpec> deserializer(
179179
TypeName responseType, EndpointDefinition endpointDef, EndpointName endpointName, Optional<Type> type) {
180180
TypeName className = Primitives.box(returnTypes.baseType(type));
181-
if (isBinaryOrOptionalBinary(className, returnTypes) && !options.generateDialogueEndpointErrorResultTypes()) {
181+
boolean generateResultTypes = shouldGenerateDialogueEndpointErrorResultTypesForEndpoint(options, endpointDef);
182+
183+
if (isBinaryOrOptionalBinary(className, returnTypes) && !generateResultTypes) {
182184
return Optional.empty();
183185
}
184-
ParameterizedTypeName deserializerType =
185-
ParameterizedTypeName.get(ClassName.get(Deserializer.class), responseType);
186+
187+
ParameterizedTypeName deserializerType = ParameterizedTypeName.get(
188+
ClassName.get(Deserializer.class), generateResultTypes ? responseType : className);
186189

187190
CodeBlock initializer = CodeBlock.of(
188191
"$L.bodySerDe().$L",
189192
StaticFactoryMethodGenerator.RUNTIME,
190-
options.generateDialogueEndpointErrorResultTypes()
193+
generateResultTypes
191194
? constructDeserializerWithEndpointErrors(endpointDef, className, responseType)
192195
: constructDeserializer(type, className));
193196

@@ -208,16 +211,14 @@ private CodeBlock constructDeserializerWithEndpointErrors(
208211
CodeBlock.Builder deserializerArgsBuilder = CodeBlock.builder()
209212
.add("$T.<$T>builder()", DeserializerArgs.class, responseType)
210213
.add(".baseType(new $T<>() {})", TypeMarker.class)
211-
// TODO(pm): consider making "Success" a constant string for re-use in the record creation.
212214
.add(".success(new $T<$T.Success>() {})", TypeMarker.class, responseType);
213215
for (EndpointError err : endpointDef.getErrors()) {
214216
ErrorTypeName errorTypeName = err.getError();
215217
String errorName = errorTypeName.getName();
216-
String errorType = CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, errorName);
217218
ClassName errorClass = ClassName.get(
218219
errorTypeName.getPackage(),
219220
ErrorGenerationUtils.errorTypesClassName(errorTypeName.getNamespace()),
220-
errorType);
221+
CaseFormat.UPPER_CAMEL.to(CaseFormat.UPPER_UNDERSCORE, errorName));
221222
deserializerArgsBuilder.add(
222223
".error($T.name(), new $T<$T.$L>() {})", errorClass, TypeMarker.class, responseType, errorName);
223224
}
@@ -239,6 +240,12 @@ private static boolean isBinaryOrOptionalBinary(TypeName className, ReturnTypeMa
239240
return isBinary(className, returnTypes) || isOptionalBinary(className, returnTypes);
240241
}
241242

243+
private static boolean shouldGenerateDialogueEndpointErrorResultTypesForEndpoint(
244+
Options options, EndpointDefinition endpointDefinition) {
245+
return options.generateDialogueEndpointErrorResultTypes()
246+
&& !endpointDefinition.getErrors().isEmpty();
247+
}
248+
242249
private static boolean isBinary(TypeName className, ReturnTypeMapper returnTypes) {
243250
return className.equals(returnTypes.baseType(Type.primitive(PrimitiveType.BINARY)));
244251
}
@@ -280,13 +287,14 @@ private MethodSpec clientImpl(ClassName className, EndpointDefinition def) {
280287
.build();
281288
String codeBlock = methodType.switchBy(
282289
"$L.clients().callBlocking($L, $L.build(), $L);", "$L.clients().call($L, $L.build" + "(), $L);");
290+
boolean generateResultTypes = shouldGenerateDialogueEndpointErrorResultTypesForEndpoint(options, def);
283291
CodeBlock execute = CodeBlock.of(
284292
codeBlock,
285293
StaticFactoryMethodGenerator.RUNTIME,
286294
Names.endpointChannel(def),
287295
REQUEST,
288296
def.getReturns()
289-
.filter(type -> !options.generateDialogueEndpointErrorResultTypes()
297+
.filter(type -> !generateResultTypes
290298
&& isBinaryOrOptionalBinary(returnTypes.baseType(type), returnTypes))
291299
.map(type -> StaticFactoryMethodGenerator.RUNTIME
292300
+ (isOptionalBinary(returnTypes.baseType(type), returnTypes)
@@ -295,27 +303,22 @@ && isBinaryOrOptionalBinary(returnTypes.baseType(type), returnTypes))
295303
.orElseGet(() -> def.getEndpointName().get() + "Deserializer"));
296304

297305
methodBuilder.addCode(request);
298-
methodBuilder.addCode(methodType.switchBy(
299-
def.getReturns().isPresent()
300-
|| (options.generateDialogueEndpointErrorResultTypes()
301-
&& !def.getErrors().isEmpty())
302-
? "return "
303-
: "",
304-
"return "));
306+
methodBuilder.addCode(
307+
methodType.switchBy(def.getReturns().isPresent() || generateResultTypes ? "return " : "", "return "));
305308
methodBuilder.addCode(execute);
306309

307310
return methodBuilder.build();
308311
}
309312

310313
private TypeName getReturnType(EndpointDefinition def, ClassName className) {
311-
if (options.generateDialogueEndpointErrorResultTypes()
312-
&& !def.getErrors().isEmpty()) {
313-
ClassName returnType = ClassName.get(
314+
if (shouldGenerateDialogueEndpointErrorResultTypesForEndpoint(options, def)) {
315+
ClassName responseResultTypeName = ClassName.get(
314316
className.packageName(),
315317
className.simpleName(),
316-
ErrorGenerationUtils.responseTypeName(def.getEndpointName()));
318+
ErrorGenerationUtils.endpointResponseResultTypeName(def.getEndpointName()));
317319
return methodType.switchBy(
318-
returnType, ParameterizedTypeName.get(ClassName.get(ListenableFuture.class), returnType));
320+
responseResultTypeName,
321+
ParameterizedTypeName.get(ClassName.get(ListenableFuture.class), responseResultTypeName));
319322
}
320323
return methodType.switchBy(returnTypes.baseType(def.getReturns()), returnTypes.async(def.getReturns()));
321324
}

0 commit comments

Comments
 (0)