Browse Source

Fix generation of multiple interfaces in C# for some edge cases.

pull/1301/head
João Matos 6 years ago committed by João Matos
parent
commit
1af171dc93
  1. 5
      src/Generator/Passes/MultipleInheritancePass.cs
  2. 6
      src/Generator/Passes/ParamTypeToInterfacePass.cs

5
src/Generator/Passes/MultipleInheritancePass.cs

@ -83,6 +83,11 @@ namespace CppSharp.Passes @@ -83,6 +83,11 @@ namespace CppSharp.Passes
if (@base.CompleteDeclaration != null)
@base = (Class) @base.CompleteDeclaration;
// Prevent multiple interfaces from being generated in cases of
// a secondary base being inherited multiple times in a chain.
if (@base.IsInterface)
return @base;
return interfaces.FirstOrDefault(i => i.OriginalClass == @base) ??
GetNewInterface("I" + @base.Name, @base);
}

6
src/Generator/Passes/ParamTypeToInterfacePass.cs

@ -31,6 +31,10 @@ namespace CppSharp.Passes @@ -31,6 +31,10 @@ namespace CppSharp.Passes
if (!base.VisitFunctionDecl(function))
return false;
// TODO: Fix this once Dispose methods are generated in a pass.
if (function.SynthKind == FunctionSynthKind.InterfaceDispose)
return false;
// parameters and returns from a specialised interface
// must not be replaced if the templated interface uses a template parameter
var interfaceFunction = GetInterfaceFunction(function);
@ -97,7 +101,7 @@ namespace CppSharp.Passes @@ -97,7 +101,7 @@ namespace CppSharp.Passes
if (@class == null || !@class.IsInterface)
return null;
return @class.Methods.First(m => m.OriginalFunction == function.OriginalFunction);
return @class.Methods.FirstOrDefault(m => m.OriginalFunction == function.OriginalFunction);
}
private static Property GetTemplateInterfaceProperty(Property property)

Loading…
Cancel
Save