X-Git-Url: http://nitlanguage.org diff --git a/contrib/objcwrapper/src/objc_generator.nit b/contrib/objcwrapper/src/objc_generator.nit index 845a3b1..408d731 100644 --- a/contrib/objcwrapper/src/objc_generator.nit +++ b/contrib/objcwrapper/src/objc_generator.nit @@ -97,7 +97,7 @@ class CodeGenerator end # Generate code - file.write "import cocoa::foundation\n\n" + file.write "import cocoa::foundation\n" for classe in classes do write_class(classe, file) end @@ -121,8 +121,6 @@ extern class {{{classe.name}}} in "ObjC" `{ {{{classe.name}}} * `} super NSObject """ - file.write "\n" - # Constructor or constructors write_constructors(classe, file) @@ -131,11 +129,12 @@ extern class {{{classe.name}}} in "ObjC" `{ {{{classe.name}}} * `} write_attribute(attribute, file) end - # Methods + # Instance methods '-' for method in classe.methods do if not model.knows_all_types(method) then method.is_commented = true if not opt_init_as_methods.value and method.is_init then continue + if method.is_class_property then continue write_method_signature(method, file) write_objc_method_call(method, file) @@ -144,6 +143,14 @@ extern class {{{classe.name}}} in "ObjC" `{ {{{classe.name}}} * `} file.write """ end """ + + # Class methods '+' + for method in classe.methods do + if not method.is_class_property then continue + + write_method_signature(method, file) + write_objc_method_call(method, file) + end end private fun write_constructors(classe: ObjcClass, file: Writer) @@ -151,10 +158,10 @@ end if opt_init_as_methods.value then # A single constructor for `alloc` file.write """ + new in "ObjC" `{ return [{{{classe.name}}} alloc]; `} - """ return end @@ -167,7 +174,7 @@ end write_method_signature(method, file) - write_objc_init_call(classe.name, method, file) + write_objc_init_call(classe.name, method, file) end end @@ -187,10 +194,11 @@ end var c = attribute.comment_str file.write """ + +{{{attribute.doc}}} {{{c}}} fun {{{nit_attr_name}}}: {{{nit_attr_type}}} in "ObjC" `{ {{{c}}} return [self {{{attribute.name}}}]; {{{c}}} `} - """ end @@ -202,10 +210,11 @@ end var c = attribute.comment_str file.write """ + +{{{attribute.doc}}} {{{c}}} fun {{{nit_attr_name}}}=(value: {{{nit_attr_type}}}) in "ObjC" `{ {{{c}}} return self.{{{attribute.name}}} = value; {{{c}}} `} - """ end @@ -222,6 +231,9 @@ end if name == "init" then name = "" + # If class method, prefix with class name + if method.is_class_property then name = "{method.objc_class.name.to_snake_case}_{name}" + # Kind of method var fun_keyword = "fun" if not opt_init_as_methods.value and method.is_init then @@ -245,7 +257,9 @@ end end file.write """ -{{{c}}} {{{fun_keyword}}} {{{name}}}{{{params_with_par}}}{{{ret}}} in "ObjC" `{ + +{{{method.doc}}} +{{{c}}}{{{fun_keyword}}} {{{name}}}{{{params_with_par}}}{{{ret}}} in "ObjC" `{ """ end @@ -263,9 +277,8 @@ end var c = method.comment_str file.write """ -{{{c}}} return [[{{{class_name}}} alloc] {{{params.join(" ")}}}]; -{{{c}}} `} - +{{{c}}} return [[{{{class_name}}} alloc] {{{params.join(" ")}}}]; +{{{c}}}`} """ end @@ -283,12 +296,15 @@ end else params.add param.name end + # Receiver, instance or class + var recv = "self" + if method.is_class_property then recv = method.objc_class.name + var c = method.comment_str file.write """ -{{{c}}} {{{ret}}}[self {{{params.join(" ")}}}]; -{{{c}}} `} - +{{{c}}} {{{ret}}}[{{{recv}}} {{{params.join(" ")}}}]; +{{{c}}}`} """ end end @@ -307,8 +323,27 @@ redef class Text end end -redef class Property +redef class ObjcProperty private fun comment_str: String do if is_commented then return "#" else return "" + + # Full documentation to be generated for the Nit code + private fun doc: String is abstract +end + +redef class ObjcMethod + private fun indent: String do return if is_class_property then "" else "\t" + + redef fun comment_str do return indent + super + + redef fun doc + do + var recv = if is_class_property then objc_class.name else "self" + return "{indent}# Wraps: `[{recv} {params.join(" ")}]`" + end +end + +redef class ObjcAttribute + redef fun doc do return "\t# Wraps: `{objc_class.name}.{name}`" end