-
Notifications
You must be signed in to change notification settings - Fork 168
Open
Description
Problem
When --generate-marker-interfaces is enabled, generated nested interfaces are not marked as partial, preventing users from manually extending them with custom implementations.
Simple Example
C++ input:
struct IFoo
{
virtual void Method1() = 0;
virtual void Method2() = 0;
};Generated with --generate-marker-interfaces:
public unsafe partial struct IFoo : IFoo.Interface
{
public interface Interface // NOT partial - users cannot extend
{
void Method1();
void Method2();
}
}User tries to manually add a custom helper method:
// User's manually-written code in a separate file
public partial struct IFoo
{
public partial interface Interface // ✗ Error: no partial declaration exists
{
void CallBoth(); // User wants to add this to the interface contract
}
// User's manual implementation
public void CallBoth()
{
Method1();
Method2();
}
}Generic constraint breaks:
void Process<T>(T foo) where T : unmanaged, IFoo.Interface
{
foo.CallBoth(); // ✗ Error: Interface doesn't contain CallBoth
}Solution
Change CSharpOutputBuilder.VisitDecl.cs:829:
WriteIndented("public partial interface Interface");This allows users to manually extend the interface with custom methods while maintaining backward compatibility (adding partial is non-breaking).
I have a fix ready in my fork.
Metadata
Metadata
Assignees
Labels
No labels