diff --git a/Directory.Packages.props b/Directory.Packages.props
index 56f9bfb..8503447 100644
--- a/Directory.Packages.props
+++ b/Directory.Packages.props
@@ -36,8 +36,8 @@
-
-
+
+
diff --git a/SourceKit.Sample/Generators/ValidArrayQueryUsage.cs b/SourceKit.Sample/Generators/ValidArrayQueryUsage.cs
new file mode 100644
index 0000000..4e7c542
--- /dev/null
+++ b/SourceKit.Sample/Generators/ValidArrayQueryUsage.cs
@@ -0,0 +1,60 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using SourceKit.Generators.Builder.Annotations;
+
+namespace SourceKit.Sample.Generators;
+
+file class ArrayQueryUsage
+{
+ public void A()
+ {
+ var query = ArrayQuery1.Build(x => x.WithValue("aboba"));
+ }
+}
+
+[GenerateBuilder]
+file record ArrayQuery1(Guid[] Ids, [RequiredValue] string Value, string NotRequiredValue = "aboba")
+{
+ public static ArrayQuery1 Build(Func action)
+ {
+ return action(new Builder()).Build();
+ }
+
+ public sealed class Builder
+ {
+ private readonly List _ids;
+ private string _value;
+
+ public Builder()
+ {
+ _ids = new List();
+ }
+
+ [InitializesProperty(nameof(Ids))]
+ public Builder WithId(Guid element)
+ {
+ _ids.Add(element);
+ return this;
+ }
+
+ [InitializesPropertyAttribute(nameof(Ids))]
+ public Builder WithIds(IEnumerable elements)
+ {
+ _ids.AddRange(elements);
+ return this;
+ }
+
+ [InitializesPropertyAttribute(nameof(Value))]
+ public Builder WithValue(string value)
+ {
+ _value = value;
+ return this;
+ }
+
+ public ArrayQuery1 Build()
+ {
+ return new ArrayQuery1(_ids.Distinct().ToArray(), string.Empty, string.Empty);
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/generators/SourceKit.Generators.Builder/Analyzers/RequiredValueAnalyzer.cs b/src/generators/SourceKit.Generators.Builder/Analyzers/RequiredValueAnalyzer.cs
index 51df955..3020dc8 100644
--- a/src/generators/SourceKit.Generators.Builder/Analyzers/RequiredValueAnalyzer.cs
+++ b/src/generators/SourceKit.Generators.Builder/Analyzers/RequiredValueAnalyzer.cs
@@ -82,7 +82,7 @@ private void AnalyzeOperation(OperationAnalysisContext context)
.Where(x => x.GetAttributes().HasAttribute(requiredValueAttribute))
.Select(x => x.Name);
- IEnumerable descendantInvocations = modelTypeMembers
+ IEnumerable descendantInvocations = operation.Descendants()
.OfType();
IEnumerable initializedPropertyNames = GetInitializedPropertyNames(descendantInvocations);
diff --git a/tests/SourceKit.Tests/Generators/RequiredValueAnalyzerTests.cs b/tests/SourceKit.Tests/Generators/RequiredValueAnalyzerTests.cs
index 35c693e..44b8a6d 100644
--- a/tests/SourceKit.Tests/Generators/RequiredValueAnalyzerTests.cs
+++ b/tests/SourceKit.Tests/Generators/RequiredValueAnalyzerTests.cs
@@ -13,7 +13,7 @@ namespace SourceKit.Tests.Generators;
public class RequiredValueAnalyzerTests
{
[Fact]
- public async Task A()
+ public async Task RequiredValue_ShouldProduceError_WhenRequiredValueNotDefined()
{
var usageFile = await SourceFile.LoadAsync("SourceKit.Sample/Generators/ArrayQueryUsage.cs");
@@ -37,4 +37,25 @@ public async Task A()
await test.RunAsync();
}
+
+ [Fact]
+ public async Task RequiredValue_ShouldProduceNoError_WhenRequiredValueDefined()
+ {
+ var usageFile = await SourceFile.LoadAsync("SourceKit.Sample/Generators/ValidArrayQueryUsage.cs");
+
+ var test = new CSharpAnalyzerTest
+ {
+ TestState =
+ {
+ Sources = { usageFile },
+ AdditionalReferences =
+ {
+ typeof(GenerateBuilderAttribute).Assembly,
+ },
+ ReferenceAssemblies = ReferenceAssemblies.Net.Net60,
+ },
+ };
+
+ await test.RunAsync();
+ }
}
\ No newline at end of file