Skip to content

Source Generator cannot deal with [BindField] #7786

@PascalSenn

Description

@PascalSenn

Product

Hot Chocolate

Version

14.1.0

Link to minimal reproduction

.

Steps to reproduce

[ObjectType<LineItem>]
public static partial class LineItemType
{
    [BindField("product")]
    public static Product GetProduct([Parent] LineItem lineItem)
        => new(lineItem.ProductId);
}

generates:

public static partial class LineItemType
{
    internal static void Initialize(global::HotChocolate.Types.IObjectTypeDescriptor<global::quick_start.Ordering.Types.LineItem> descriptor)
    {
        const global::System.Reflection.BindingFlags bindingFlags =
            global::System.Reflection.BindingFlags.Public
                | global::System.Reflection.BindingFlags.NonPublic
                | global::System.Reflection.BindingFlags.Static;

        var thisType = typeof(global::quick_start.Ordering.Types.LineItemType);
        var bindingResolver = descriptor.Extend().Context.ParameterBindingResolver;
        global::quick_start.Ordering.Types.LineItemTypeResolvers.InitializeBindings(bindingResolver);

        descriptor
            .Field(thisType.GetMember("GetProduct", bindingFlags)[0])
            .ExtendWith(c =>
            {
                c.Definition.SetSourceGeneratorFlags();
                c.Definition.Resolvers = global::quick_start.Ordering.Types.LineItemTypeResolvers.LineItemType_GetProduct();
            });

        descriptor // <---- HERE IS THE ISSUE

        Configure(descriptor);
    }

    static partial void Configure(global::HotChocolate.Types.IObjectTypeDescriptor<global::quick_start.Ordering.Types.LineItem> descriptor);
}
}

Workaround:

public static partial class LineItemType
{
    static partial void Configure(IObjectTypeDescriptor<LineItem> descriptor)
    {
        descriptor.Ignore(x => x.ProductId);
    }

    public static Product GetProduct([Parent] LineItem lineItem)
        => new(lineItem.ProductId);
}

What is expected?

The code is generated correctly

What is actually happening?

There is a compilation errros

Relevant log output

Additional context

No response

Metadata

Metadata

Assignees

Type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions