-
Notifications
You must be signed in to change notification settings - Fork 54
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Allow overriding C# method modifiers #681
Comments
Example of what we want to improve A common "source" of the problem tends to be Java generics, in which e.g. This is the same scenario as: #586 |
It feels like this maybe needs to go both ways: changing
|
Fixes: #681 There are scenarios where `generator` does not correctly find overridden methods, often due to generic parameters. When these issues happen, the fix is to `<remove-node/>` the offending method and add a fully hand-bound version of it as an `Addition`. This is a very manual fix to simply add `override` to a method. While we would like to eventually fix all these scenarios to "do the right thing", that will be a complex fix, and perhaps we will never be able to handle all cases. For now, we can at least alleviate the pain by adding a `metadata` attribute that allows the user to override our detection, avoiding the hand-binding. This new attribute is called `managedOverride` and allows the user to specify the values `virtual` or `override`, forcing us to use the requested modifier instead of `generator`'s usual logic. <attr path="//method[@name='example']" name="managedOverride">override</attr> <attr path="//method[@name='example']" name="managedOverride">virtual</attr>
A C# method modifier are the keywords which can be applied to a method, such as visibility (
public
,private
, …).Some of these modifiers can be overridden via metadata, e.g. setting
//method/@visibility
will be inserted as-is into the C# binding.What is desired is a way to override the default logic for emitting
virtual
&override
.Sometimes when binding a library, the default logic causes
virtual
to be emitted whenoverride
is needed for the code to compile. (TODO: Insert concrete example here.)The current workaround is to use metadata to rename the "offending" method and then use a
partial
class to properly override the method.What we would like is e.g. a
managedOverride
attribute in metadata/on//method
.Question: what should the semantics be? Would a "boolean" attribute be desirable, or a string?
The text was updated successfully, but these errors were encountered: