[mono-android] java binding library
Wally McClure
theevilprogrammer at hotmail.com
Thu Jun 21 19:21:43 UTC 2012
I obviously need to check my email quicker. I didn't see this unbelievably awesome email with the info. I'm definitely going to put this to work. Excuse my ignorance for not seeing it and thinking that I had actually figured soemthing out on my own. Wally
> From: jonp at xamarin.com
> Date: Thu, 21 Jun 2012 14:45:35 -0400
> To: monodroid at lists.ximian.com
> Subject: Re: [mono-android] java binding library
>
> On Jun 21, 2012, at 2:19 PM, Wally McClure wrote:
> > I decided to go back to the drawing board and create some simple .jar files that I could transform and then be less of a hassle. I have a method called: multiplefloat which takes two floats and multiplies them together and returns a float. I'd like to rename that method to MultipleFloat in the .NET side because I am a bad java programmer. I've tried the following transforms in the Metadata.xml file with no luck. Any suggestions?
> >
> > <metadata>
> > <attr path="/api/package[@name='com.scalabledevelopment.math.operations.multiplyfloat']"name="managedName">Com.Scalabledevelopment.Math.Operations.MultiplyFloat</attr>
> > <attr
> > path="/api/package[@name='com.scalabledevelopment.math.operations']/class[@name='multiplyfloat']"name="managedName">Com.Scalabledevelopment.Math.Operations.MultiplyFloat</attr>
> > </metadata>
>
> Looks like a job for...clearer docs. Now if I only knew how to clarify the docs...
>
> First up is that the metadata path is intimately tied to the input file, which is obj/Debug/api.xml. You generally need to have api.xml open while writing Metadata.xml.
>
> Secondly is the structure of api.xml:
>
> <api>
> <package name="PACKAGE-NAME">
> <class name="CLASS-NAME" ...>
> <method name="METHOD-NAME" ...>
> </method>
> </class>
> </package>
> </api>
>
> For example, consider java.lang.Object.toString():
>
> http://developer.android.com/reference/java/lang/Object.html#toString()
>
> PACKAGE-NAME will be "java.lang", CLASS-NAME will be "Object", and METHOD-NAME will be "toString".
>
> Now suppose we wanted to rename the toString() method. How would we select it? The XPath to reach the <method/> element is /api/package[@name='java.lang']/class[@name='Object']/method[@name='toString'], so that's what we need to use:
>
> <attr
> path="/api/package[@name='java.lang']/class[@name='Object']/method[@name='toString']"
> name="managedName"
> >NewMethodName</attr>
>
> Note that ANY XPath is valid; we could have instead done:
>
> <attr
> path="//method[@name='toString']"
> name="managedName"
> >NewMethodName</attr>
>
> This has the benefit that it would rename ALL toString() methods. This has the disadvantage that it's _slow_, at least when processing gigantic APIs like android.jar. ;-) (This is why all of our samples use fully qualified XPath expressions, because trying to use XPath abbreviations results in more twiddling of fingers.)
>
> Next, what value can we use for managedName? It needs to be a valid C# token for a method name. "NewMethodName" works; "Some.Dotted.Name" will not work, because the resulting C# code will be invalid, akin to:
>
> public string Some.Dotted.Name () {/* ... */}
>
> With that background out of the way, let's look at your description:
>
> > I have a method called: multiplefloat which takes two floats and multiplies them together and returns a float
>
> So "multiplefloat" is a method.
>
> However, when we look at your path expression:
>
> <attr
> path="/api/package[@name='com.scalabledevelopment.math.operations.multiplyfloat']"
> name="managedName"
> >Com.Scalabledevelopment.Math.Operations.MultiplyFloat</attr>
>
> The problem is that what you wrote doesn't match what you wrote; you said you have a method, yet your XPath expression will be selecting a package element, not a method. In all likelihood, the above XPath expression doesn't match anything, which should generate a warning that the expression matched no elements.
>
> I would guess that what you actually want is:
>
> <attr
> path="/api/package[@name='com.scalabledevelopment.math']/class[@name='operations']/method[@name='multiplyfloat']"
> name="managedName"
> >MultiplyFloat</attr>
>
> Note that we separately specify the package name, class name, and method name, as is required in order for XPath to actually match the desired api.xml element. Further note that we're using a valid C# method name of "MultiplyFloat".
>
> - Jon
>
> _______________________________________________
> Monodroid mailing list
> Monodroid at lists.ximian.com
>
> UNSUBSCRIBE INFORMATION:
> http://lists.ximian.com/mailman/listinfo/monodroid
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ximian.com/pipermail/monodroid/attachments/20120621/9b41e2c8/attachment.html>
More information about the Monodroid
mailing list