Skip to content

Commit

Permalink
Merge pull request #590 from curin/main
Browse files Browse the repository at this point in the history
Add Parameter Types to InheritDoc comments
  • Loading branch information
tannergooding authored Jan 31, 2025
2 parents 4882174 + 98fcc16 commit c914fcb
Show file tree
Hide file tree
Showing 4 changed files with 47 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ internal struct FunctionOrDelegateDesc
public bool HasBody { get; set; }
public bool IsInherited { get; set; }
public bool NeedsUnscopedRef { get; set; }
public string[]? ParameterTypes { get; set; }

public bool IsVirtual
{
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -372,6 +372,12 @@ public void BeginFunctionOrDelegate(in FunctionOrDelegateDesc desc, ref bool isM
Write(desc.ParentName);
Write('.');
Write(desc.EscapedName);
if (desc.ParameterTypes is not null)
{
Write('(');
Write(string.Join(", ", desc.ParameterTypes));
Write(')');
}
WriteLine("\" />");
}
else
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -501,6 +501,7 @@ private void VisitFunctionDecl(FunctionDecl functionDecl)
var name = GetRemappedCursorName(functionDecl);

var cxxMethodDecl = functionDecl as CXXMethodDecl;
uint overloadCount = 0;

if (cxxMethodDecl is not null and CXXConstructorDecl)
{
Expand All @@ -509,6 +510,11 @@ private void VisitFunctionDecl(FunctionDecl functionDecl)
name = GetRemappedCursorName(parent);
}

if (cxxMethodDecl is not null)
{
overloadCount = GetOverloadCount(cxxMethodDecl);
}

var isManualImport = _config.WithManualImports.Contains(name);

var className = name;
Expand Down Expand Up @@ -622,6 +628,7 @@ private void VisitFunctionDecl(FunctionDecl functionDecl)
}
},
CustomAttrGeneratorData = (functionDecl, _outputBuilder, this),
ParameterTypes = overloadCount > 1 ? functionDecl.Parameters.Select(param => GetTargetTypeName(param, out var _)).ToArray() : null,
};
Debug.Assert(_outputBuilder is not null);

Expand Down
33 changes: 33 additions & 0 deletions sources/ClangSharp.PInvokeGenerator/PInvokeGenerator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -3096,6 +3096,39 @@ uint GetOverloadIndex(CXXMethodDecl cxxMethodDeclToMatch, CXXRecordDecl cxxRecor
}
}

private uint GetOverloadCount(CXXMethodDecl cxxMethodDeclToMatch)
{
var parent = cxxMethodDeclToMatch.Parent;
Debug.Assert(parent is not null);

return GetOverloadIndex(cxxMethodDeclToMatch, parent, baseCount: 0);

uint GetOverloadIndex(CXXMethodDecl cxxMethodDeclToMatch, CXXRecordDecl cxxRecordDecl, uint baseCount)
{
var count = baseCount;

foreach (var cxxBaseSpecifier in cxxRecordDecl.Bases)
{
var baseCxxRecordDecl = GetRecordDecl(cxxBaseSpecifier);
count = GetOverloadIndex(cxxMethodDeclToMatch, baseCxxRecordDecl, count);
}

foreach (var cxxMethodDecl in cxxRecordDecl.Methods)
{
if (IsExcluded(cxxMethodDecl))
{
continue;
}
else if (cxxMethodDecl.Name == cxxMethodDeclToMatch.Name)
{
count++;
}
}

return count;
}
}

private CXXRecordDecl GetRecordDecl(CXXBaseSpecifier cxxBaseSpecifier)
{
var baseType = cxxBaseSpecifier.Type;
Expand Down

0 comments on commit c914fcb

Please sign in to comment.