@@ -161,10 +161,6 @@ def parse_field_ref(ref, api_namespace, api_data_type):
161
161
162
162
def uses_builder_pattern (api_route ):
163
163
if is_struct_type (api_route .request_data_type ):
164
- style = api_route .attrs .get ('style' , 'rpc' )
165
- if style in ('upload' , 'download' ):
166
- return True
167
-
168
164
n_optional = len (api_route .request_data_type .all_optional_fields )
169
165
return n_optional > 1
170
166
else :
@@ -178,20 +174,26 @@ def format_route_ref(api, namespace, route):
178
174
return format_route (api_namespace , api_route )
179
175
180
176
181
- def format_route (api_namespace , api_route ):
177
+ def format_route (api_namespace , api_route , allow_builder = True ):
178
+ required_fields_only = False
182
179
if uses_builder_pattern (api_route ):
183
- return '%s#%s' % (namespace_ref (api_namespace ), builder_method_name (api_route ))
184
- elif is_void_type (api_route .request_data_type ) or is_union_type (api_route .request_data_type ):
180
+ if allow_builder :
181
+ return '%s#%s' % (namespace_ref (api_namespace ), builder_method_name (api_route ))
182
+ else :
183
+ required_fields_only = True
184
+
185
+ if is_void_type (api_route .request_data_type ) or is_union_type (api_route .request_data_type ):
185
186
return '%s#%s' % (namespace_ref (api_namespace ), routename (api_route .name ))
186
- else :
187
- # by default, all doc refs should point to the method that
188
- # accepts the most arguments
189
- unpacked_types = (
190
- field_type (api_namespace .name , field , boxed = False , generics = False )
191
- for field in api_route .request_data_type .all_fields
192
- )
193
- args = "," .join (unpacked_types )
194
- return '%s#%s(%s)' % (namespace_ref (api_namespace ), routename (api_route .name ), args )
187
+
188
+ # by default, all doc refs should point to the method that
189
+ # accepts the most arguments
190
+ fields = api_route .request_data_type .all_required_fields if required_fields_only else api_route .request_data_type .all_fields
191
+ unpacked_types = (
192
+ field_type (api_namespace .name , field , boxed = False , generics = False )
193
+ for field in fields
194
+ )
195
+ args = "," .join (unpacked_types )
196
+ return '%s#%s(%s)' % (namespace_ref (api_namespace ), routename (api_route .name ), args )
195
197
196
198
197
199
def format_data_type_ref (data_type ):
@@ -709,7 +711,7 @@ def generate_packed_method(self, namespace, route, doc_out):
709
711
resname = 'Object' if result_name == 'void' else result_name
710
712
errname = 'Object' if error_name == 'void' else error_name
711
713
doc_out ('The {@link com.dropbox.core.DbxUploader} returned by '
712
- '{@link %s}.' % method_javadoc_name )
714
+ '{@link %s}.' % format_route ( namespace , route , allow_builder = False ) )
713
715
uploader = classname (route .name + '_uploader' )
714
716
with self .block ('public static class %s '
715
717
'extends com.dropbox.core.DbxUploader<%s,%s,%s>' %
@@ -895,7 +897,11 @@ def generate_builder(self, namespace, route, rtype, ret, outer, doc_out):
895
897
896
898
# Create a start() method to use the builder.
897
899
out ('' )
898
- doc_out ('Issues the request.' )
900
+ if style in ('upload' , 'download' ):
901
+ out ('@Override' )
902
+ # inherit doc from parent
903
+ else :
904
+ doc_out ('Issues the request.' )
899
905
out ('public %s start() throws %s, DbxException' % (rtype , exc_name ))
900
906
with self .block ():
901
907
packed_class = maptype (namespace , route .request_data_type )
@@ -923,24 +929,23 @@ def generate_route_stuff(self, namespace, route, outer, doc_out):
923
929
if style == 'upload' :
924
930
rtype = classname (route .name + '_uploader' )
925
931
ret = 'return '
926
- self .generate_builder (namespace , route , rtype , ret , outer , doc_out )
927
932
elif style == 'download' :
928
933
rtype = 'com.dropbox.core.DbxDownloader<%s>' % result_name
929
934
ret = 'return '
930
- self .generate_builder (namespace , route , rtype , ret , outer , doc_out )
931
935
else :
932
936
rtype = result_name
933
937
ret = '' if rtype == 'void' else 'return '
934
- # Generate a shortcut with required args.
935
- self .generate_unpacked_method (namespace , route , rtype , ret , doc_out , required_only = True )
936
- n_optional = len (route .request_data_type .all_optional_fields )
937
- # Generate a builder if there are two or more optional args.
938
- # If there's only 1 optional argument then we might as well
939
- # just offer two overloaded methods.
940
- if n_optional == 1 :
941
- self .generate_unpacked_method (namespace , route , rtype , ret , doc_out )
942
- elif n_optional > 1 :
943
- self .generate_builder (namespace , route , rtype , ret , outer , doc_out )
938
+
939
+ # Generate a shortcut with required args.
940
+ self .generate_unpacked_method (namespace , route , rtype , ret , doc_out , required_only = True )
941
+ n_optional = len (route .request_data_type .all_optional_fields )
942
+ # Generate a builder if there are two or more optional args.
943
+ # If there's only 1 optional argument then we might as well
944
+ # just offer two overloaded methods.
945
+ if n_optional == 1 :
946
+ self .generate_unpacked_method (namespace , route , rtype , ret , doc_out )
947
+ elif n_optional > 1 :
948
+ self .generate_builder (namespace , route , rtype , ret , outer , doc_out )
944
949
945
950
def generate_field_assignment (self , namespace , field ):
946
951
out = self .emit
0 commit comments