<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">We need new generator support for extension methods to support this properly, however this has a few issues since categories are only applied at link time, so we'd need to ensure that the dependent native library is in the process space before applying the extension methods, or, ensure that we link the requisite library into the proc if the extensions are used.<div><br></div><div>Something to mull</div><div><br></div><div>-g</div><div><br><div><div>On 2010-04-25, at 11:54 PM, Duane Wandless wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>I'm experimenting with how to generate various constructs from the header files. &nbsp;Here is a common pattern:</div><div><br></div>Inside AppKit\NSTextAttachment.cs there is this:<div><div><div><font class="Apple-style-span" face="'courier new', monospace">@interface NSMutableAttributedString (NSMutableAttributedStringAttachmentConveniences)</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">- (void)updateAttachmentsFromPath:(NSString *)path;</font></div><div><font class="Apple-style-span" face="'courier new', monospace">@end</font></div>
</div><div><br></div><div>Which I tried to bind like this (ignoring making the C# method name better):<br><div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp;</font><span class="Apple-style-span" style="white-space: pre;"><font class="Apple-style-span" face="'courier new', monospace">//- (void)updateAttachmentsFromPath:(NSString *)path;
  [Export ("updateAttachmentsFromPath:")]
  void UpdateAttachmentsFromPath ([Target] NSMutableAttributedString  obj, NSString path);
</font></span></div><div><br></div></div><div>Which produced this:</div><div><div><font class="Apple-style-span" face="'courier new', monospace">[Export ("updateAttachmentsFromPath:")]</font></div><div>
<font class="Apple-style-span" face="'courier new', monospace">public virtual void UpdateAttachmentsFromPath (NSMutableAttributedString obj, NSString path)</font></div><div><font class="Apple-style-span" face="'courier new', monospace">{</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; if (obj == null)</font></div><div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; &nbsp; &nbsp;throw new ArgumentNullException ("obj");</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; if (path == null)</font></div><div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; &nbsp; &nbsp;throw new ArgumentNullException ("path");</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; if (IsDirectBinding) {</font></div><div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; &nbsp; &nbsp;MonoMac.ObjCRuntime.Messaging.void_objc_msgSend_IntPtr (obj.Handle, selUpdateAttachmentsFromPath, path.Handle);</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; }&nbsp;else&nbsp;{</font></div><div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; &nbsp; &nbsp;MonoMac.ObjCRuntime.Messaging.void_objc_msgSendSuper_IntPtr (this.SuperHandle, sel &nbsp;UpdateAttachmentsFromPath, path.Handle)</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">;</font></div><div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; }</font></div><div><font class="Apple-style-span" face="'courier new', monospace">} &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div></div><div>(I do no think the generated code for when IsDirectBinding == false is correct. &nbsp;But that is a side issue.)</div><div>
<br></div><div>Is this the correct binding? &nbsp;I would of course have to call:</div><div>NSTextAttachment textAttachment;</div><div>textAttachment.UpdateAttachmentsFromPath(attributedStringObj, path);</div><div><br></div><div>
Or would I rather call:</div><div>attributedStringObj.UpdateAttachmentsFromPath(path);</div><div><br></div></div><div>In my parser I have the ability of adding this method directly on NSMutableAttributedString, the 2nd example. &nbsp;Another option would be to create an extension method to NSMutableAttributedString when parsing NSTextAttachment. &nbsp;Maybe the generator should create:</div>
<div><br></div><div><font class="Apple-style-span" face="'courier new', monospace">public static class&nbsp;NSMutableAttributedStringAttachmentConveniences</font></div><div><font class="Apple-style-span" face="'courier new', monospace">{</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; public static void&nbsp;</font><font class="Apple-style-span" face="'courier new', monospace">UpdateAttachmentsFromPath(this NSMutableAttributedString obj, NSString path)</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; { ...</font></div><div><font class="Apple-style-span" face="'courier new', monospace">&nbsp;&nbsp; }</font></div><div><font class="Apple-style-span" face="'courier new', monospace">}</font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><br></font></div><div><font class="Apple-style-span" face="'courier new', monospace"><span class="Apple-style-span" style="font-family: arial; ">So I know how to modify the parser what is the preferred solution?</span></font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><span class="Apple-style-span" style="font-family: arial; "><br></span></font></div><div><font class="Apple-style-span" face="'courier new', monospace"><span class="Apple-style-span" style="font-family: arial; ">Thanks,</span></font></div>
<div><font class="Apple-style-span" face="'courier new', monospace"><span class="Apple-style-span" style="font-family: arial; ">Duane</span></font></div>
_______________________________________________<br>Mono-osx mailing list<br><a href="mailto:Mono-osx@lists.ximian.com">Mono-osx@lists.ximian.com</a><br>http://lists.ximian.com/mailman/listinfo/mono-osx<br></blockquote></div><br></div></body></html>