Skip to content

Commit 248214d

Browse files
authored
Fix source-generator bug for constructor with circular type reference (#174)
1 parent 8a26082 commit 248214d

1 file changed

Lines changed: 6 additions & 3 deletions

File tree

src/NodeApi.Generator/SymbolExtensions.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -352,7 +352,7 @@ private static void BuildSymbolicTypeMembers(
352352
if (memberSymbol is IMethodSymbol constructorSymbol &&
353353
constructorSymbol.MethodKind == MethodKind.Constructor)
354354
{
355-
BuildSymbolicConstructor(typeBuilder, constructorSymbol);
355+
BuildSymbolicConstructor(typeBuilder, constructorSymbol, genericTypeParameters);
356356
}
357357
else if (memberSymbol is IMethodSymbol methodSymbol &&
358358
(methodSymbol.MethodKind == MethodKind.Ordinary ||
@@ -391,14 +391,17 @@ private static void BuildSymbolicTypeMembers(
391391
}
392392

393393
private static ConstructorBuilder BuildSymbolicConstructor(
394-
TypeBuilder typeBuilder, IMethodSymbol constructorSymbol)
394+
TypeBuilder typeBuilder,
395+
IMethodSymbol constructorSymbol,
396+
Type[]? genericTypeParameters)
395397
{
396398
bool isDelegateConstructor = typeBuilder.BaseType == typeof(MulticastDelegate);
397399
ConstructorBuilder constructorBuilder = typeBuilder.DefineConstructor(
398400
MethodAttributes.Public | (isDelegateConstructor ?
399401
MethodAttributes.RTSpecialName | MethodAttributes.HideBySig : default),
400402
CallingConventions.HasThis,
401-
constructorSymbol.Parameters.Select((p) => p.Type.AsType()).ToArray());
403+
constructorSymbol.Parameters.Select(
404+
(p) => p.Type.AsType(genericTypeParameters)).ToArray());
402405

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

0 commit comments

Comments
 (0)