Skip to content
This repository was archived by the owner on Aug 27, 2026. It is now read-only.
This repository was archived by the owner on Aug 27, 2026. It is now read-only.

Allow overriding C# method modifiers #681

Closed

Description

@jonpryor

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 when override 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?

<!-- boolean? -->
<attr path="//method[@name='example']" name="managedOverride">true</attr>

<!-- string? -->
<attr path="//method[@name='example']" name="managedOverride">override</attr>

Activity

  1. added
    enhancementProposed change to current functionality
    generatorIssues binding a Java library (generator, class-parse, etc.)
    on Jul 22, 2020
  2. jonpryor commented on Jul 22, 2020

    @jonpryor
    ContributorAuthor

    Example of what we want to improve

    https://github.com/xamarin/FacebookComponents/blob/70e0b91a24a247f4fe0d317d371441a3278a3623/Facebook.Android/source/facebook-core/transforms/Metadata.xml#L32

    https://github.com/xamarin/FacebookComponents/blob/70e0b91a24a247f4fe0d317d371441a3278a3623/Facebook.Android/source/facebook-core/additions/additions.cs#L15

    A common "source" of the problem tends to be Java generics, in which e.g. FileDownloadTask.doInBackground() has java.lang.String parameter types, which doesn't match the base class. Metadata could be used to "fix" the parameter types to be java.lang.Object, allowing the parameter types to match the base class, but generator wouldn't realize this.

    This is the same scenario as: https://github.com/xamarin/java.interop/issues/586

  3. jpobst commented on Jul 22, 2020

    @jpobst
    Contributor

    It feels like this maybe needs to go both ways: changing virtual to override, or override to virtual. Given that, a string would work better:

    <attr path="//method[@name='example']" name="managedOverride">override</attr>
    <attr path="//method[@name='example']" name="managedOverride">virtual</attr>
    
  4. locked and limited conversation to collaborators on Apr 13, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementProposed change to current functionalitygeneratorIssues binding a Java library (generator, class-parse, etc.)

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions