Skip to content

Commit

Permalink
Fix source-generator bug for constructor with circular type reference (
Browse files Browse the repository at this point in the history
  • Loading branch information
jasongin authored Nov 10, 2023
1 parent 8a26082 commit 248214d
Showing 1 changed file with 6 additions and 3 deletions.
9 changes: 6 additions & 3 deletions src/NodeApi.Generator/SymbolExtensions.cs
Original file line number Diff line number Diff line change
Expand Up @@ -352,7 +352,7 @@ private static void BuildSymbolicTypeMembers(
if (memberSymbol is IMethodSymbol constructorSymbol &&
constructorSymbol.MethodKind == MethodKind.Constructor)
{
BuildSymbolicConstructor(typeBuilder, constructorSymbol);
BuildSymbolicConstructor(typeBuilder, constructorSymbol, genericTypeParameters);
}
else if (memberSymbol is IMethodSymbol methodSymbol &&
(methodSymbol.MethodKind == MethodKind.Ordinary ||
Expand Down Expand Up @@ -391,14 +391,17 @@ private static void BuildSymbolicTypeMembers(
}

private static ConstructorBuilder BuildSymbolicConstructor(
TypeBuilder typeBuilder, IMethodSymbol constructorSymbol)
TypeBuilder typeBuilder,
IMethodSymbol constructorSymbol,
Type[]? genericTypeParameters)
{
bool isDelegateConstructor = typeBuilder.BaseType == typeof(MulticastDelegate);
ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(
MethodAttributes.Public | (isDelegateConstructor ?
MethodAttributes.RTSpecialName | MethodAttributes.HideBySig : default),
CallingConventions.HasThis,
constructorSymbol.Parameters.Select((p) => p.Type.AsType()).ToArray());
constructorSymbol.Parameters.Select(
(p) => p.Type.AsType(genericTypeParameters)).ToArray());

IReadOnlyList<IParameterSymbol> parameters = constructorSymbol.Parameters;
for (int i = 0; i < parameters.Count; i++)
Expand Down

0 comments on commit 248214d

Please sign in to comment.