self.to_hu_conv = to_hu_conv
self.to_hu_conv_name = to_hu_conv_name
self.from_hu_conv = from_hu_conv
+ # This is set based on docstrings in various contexts:
+ self.nullable = False
class TraitMethInfo:
def __init__(self, fn_name, self_is_const, ret_ty_info, args_ty, docs):
lastund = True
return (ret + lastchar.lower()).strip("_")
+def doc_to_params_ret_nullable(doc):
+ if doc is None:
+ return (set(), False)
+ params = set()
+ ret_null = False
+ for line in doc.splitlines():
+ if "may be NULL or all-0s to represent None" not in line:
+ continue
+ if "Note that the return value" in line:
+ ret_null = True
+ elif "Note that " in line:
+ param = doc.split("Note that ")[1].split(" ")[0]
+ params.add(param)
+ return (params, ret_null)
+
unitary_enums = set()
complex_enums = set()
opaque_structs = set()
return_type_info = type_mapping_generator.map_type(method_return_type.strip() + " ret", True, ret_arr_len, False, False)
+ (params_nullable, ret_nullable) = doc_to_params_ret_nullable(doc_comment)
+ if ret_nullable:
+ return_type_info.nullable = True
+
argument_types = []
default_constructor_args = {}
takes_self = False
takes_self = True
if argument_conversion_info.ty_info.is_ptr:
takes_self_ptr = True
+ elif argument_conversion_info.arg_name in params_nullable:
+ argument_conversion_info.nullable = True
if argument_conversion_info.arg_conv is not None and "Warning" in argument_conversion_info.arg_conv:
+ assert not argument_conversion_info.arg_name in params_nullable
if argument_conversion_info.rust_obj in constructor_fns:
assert not is_free
for explode_arg in constructor_fns[argument_conversion_info.rust_obj].split(','):
meth_n = method_name[len(struct_meth) + 1 if len(struct_meth) != 0 else 0:].strip("_")
if doc_comment is not None:
out_java_struct += "\t/**\n\t * " + doc_comment.replace("\n", "\n\t * ") + "\n\t */\n"
+ if return_type_info.nullable:
+ out_java_struct += "\t@Nullable\n"
if not takes_self:
if meth_n == "new":
out_java_struct += "\tpublic static " + return_type_info.java_hu_ty + " of("
continue
if arg.java_ty != "void":
if arg.arg_name in default_constructor_args:
+ assert not arg.nullable
for explode_idx, explode_arg in enumerate(default_constructor_args[arg.arg_name]):
if explode_idx != 0:
out_java_struct += (", ")
out_java_struct += (
explode_arg.java_hu_ty + " " + arg.arg_name + "_" + explode_arg.arg_name)
else:
+ if arg.nullable:
+ out_java_struct += "@Nullable "
out_java_struct += (arg.java_hu_ty + " " + arg.arg_name)
out_java += (");\n")
out_c += (") {\n")