2727import com .palantir .conjure .java .api .errors .ErrorType ;
2828import com .palantir .conjure .java .api .errors .RemoteException ;
2929import com .palantir .conjure .java .api .errors .SerializableError ;
30+ import com .palantir .conjure .java .api .errors .SerializableErrorProvider ;
3031import com .palantir .conjure .java .api .errors .ServiceException ;
3132import com .palantir .conjure .java .util .ErrorGenerationUtils ;
3233import com .palantir .conjure .java .util .ErrorGenerationUtils .DeclaredEndpointErrors ;
@@ -164,7 +165,8 @@ private JavaFile generateErrorTypesForNamespace(
164165 })
165166 .collect (Collectors .toList ());
166167
167- TypeSpec .Builder typeBuilder = TypeSpec .classBuilder (errorTypesClassName (conjurePackage , namespace ))
168+ ClassName errorsClassName = errorTypesClassName (conjurePackage , namespace );
169+ TypeSpec .Builder typeBuilder = TypeSpec .classBuilder (errorsClassName )
168170 .addMethod (ErrorGenerationUtils .privateConstructor ())
169171 .addModifiers (Modifier .PUBLIC , Modifier .FINAL )
170172 .addFields (generateErrorTypeFields (namespace , errorTypeDefinitions ))
@@ -176,7 +178,7 @@ private JavaFile generateErrorTypesForNamespace(
176178 typeBuilder
177179 .addTypes (generateErrorParameterRecords (errorTypeDefinitions , typeMapper ))
178180 .addTypes (generateSerializableErrors (errorTypeDefinitions ))
179- .addTypes (generateRemoteExceptionTypes (errorTypeDefinitions ));
181+ .addTypes (generateRemoteExceptionTypes (errorsClassName , errorTypeDefinitions ));
180182 }
181183
182184 return JavaFile .builder (conjurePackage , typeBuilder .build ())
@@ -185,20 +187,25 @@ private JavaFile generateErrorTypesForNamespace(
185187 .build ();
186188 }
187189
188- private static List <TypeSpec > generateRemoteExceptionTypes (List <ErrorDefinition > errorDefinitions ) {
190+ private static List <TypeSpec > generateRemoteExceptionTypes (
191+ ClassName errorsClassName , List <ErrorDefinition > errorDefinitions ) {
189192 return errorDefinitions .stream ()
190- .map (ErrorGenerator :: generateRemoteExceptionType )
193+ .map (def -> generateRemoteExceptionType ( errorsClassName , def ) )
191194 .toList ();
192195 }
193196
194- private static TypeSpec generateRemoteExceptionType (ErrorDefinition errorDefinition ) {
197+ private static TypeSpec generateRemoteExceptionType (ClassName errorsClassName , ErrorDefinition errorDefinition ) {
195198 String remoteExceptionClassName = errorDefinition .getErrorName ().getName () + "Exception" ;
196199 ClassName serializableErrorClassName =
197- ClassName . get ( "" , errorDefinition .getErrorName ().getName () + "SerializableError" );
200+ errorsClassName . nestedClass ( errorDefinition .getErrorName ().getName () + "SerializableError" );
198201
199202 TypeSpec .Builder classBuilder = TypeSpec .classBuilder (remoteExceptionClassName )
200203 .addModifiers (Modifier .PUBLIC , Modifier .STATIC , Modifier .FINAL )
201204 .superclass (RemoteException .class )
205+ .addSuperinterface (ParameterizedTypeName .get (
206+ ClassName .get (SerializableErrorProvider .class ),
207+ errorsClassName .nestedClass (ErrorGenerationUtils .errorParametersClassName (
208+ errorDefinition .getErrorName ().getName ()))))
202209 .addField (FieldSpec .builder (serializableErrorClassName , "error" )
203210 .addModifiers (Modifier .PRIVATE )
204211 .build ())
0 commit comments