Skip to content

Commit 08914e7

Browse files
committed
Fixes to accomodate generated ToolkitSampleButtonAction
1 parent c698a4b commit 08914e7

File tree

3 files changed

+26
-9
lines changed

3 files changed

+26
-9
lines changed

CommunityToolkit.Tooling.SampleGen.Tests/ToolkitSampleGeneratedPaneTests.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,6 @@ public class UserControl {{ }}
208208
result.AssertDiagnosticsAre(DiagnosticDescriptors.SamplePaneOptionWithBadName, DiagnosticDescriptors.SampleNotReferencedInMarkdown);
209209
}
210210

211-
212211
[TestMethod]
213212
public void PaneOptionWithConflictingPropertyName()
214213
{
@@ -432,7 +431,7 @@ public static class ToolkitSampleRegistry
432431
{
433432
public static System.Collections.Generic.Dictionary<string, CommunityToolkit.Tooling.SampleGen.Metadata.ToolkitSampleMetadata> Listing
434433
{ get; } = new() {
435-
["Sample"] = new CommunityToolkit.Tooling.SampleGen.Metadata.ToolkitSampleMetadata("Sample", "Test Sample", "", typeof(MyApp.Sample), () => new MyApp.Sample(), null, null, new CommunityToolkit.Tooling.SampleGen.Metadata.IGeneratedToolkitSampleOptionViewModel[] { new CommunityToolkit.Tooling.SampleGen.Metadata.ToolkitSampleNumericOptionMetadataViewModel(name: "TextSize", initial: 12, min: 8, max: 48, step: 2, showAsNumberBox: false, title: "FontSize") })
434+
["Sample"] = new CommunityToolkit.Tooling.SampleGen.Metadata.ToolkitSampleMetadata("Sample", "Test Sample", "", typeof(MyApp.Sample), () => new MyApp.Sample(), null, null, new CommunityToolkit.Tooling.SampleGen.Metadata.IGeneratedToolkitSampleOptionViewModel[] { new CommunityToolkit.Tooling.SampleGen.Metadata.ToolkitSampleButtonActionMetadataViewModel(name: "RaiseNotification", label: "Raise notification", title: "") })
436435
};
437436
}
438437
""", "Unexpected code generated");

CommunityToolkit.Tooling.SampleGen/GeneratorExtensions.cs

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@
33
// See the LICENSE file in the project root for more information.
44

55
using Microsoft.CodeAnalysis;
6+
using Microsoft.CodeAnalysis.CSharp;
7+
using Microsoft.CodeAnalysis.CSharp.Syntax;
68

79
namespace CommunityToolkit.Tooling.SampleGen;
810

@@ -14,15 +16,29 @@ public static class GeneratorExtensions
1416
/// <returns>A flattened enumerable of <see cref="INamedTypeSymbol"/>s.</returns>
1517
public static IEnumerable<ISymbol> CrawlForAllSymbols(this INamespaceSymbol namespaceSymbol)
1618
{
17-
foreach (var member in namespaceSymbol.GetMembers())
19+
foreach (var member in namespaceSymbol.GetNamespaceMembers())
1820
{
1921
if (member is INamespaceSymbol nestedNamespace)
2022
{
2123
foreach (var item in CrawlForAllSymbols(nestedNamespace))
24+
{
2225
yield return item;
26+
}
2327
}
28+
}
29+
30+
// Get all classes and methods
31+
foreach (var item in namespaceSymbol.GetTypeMembers())
32+
{
33+
yield return item;
2434

25-
yield return member;
35+
foreach (var itemMember in item.GetMembers())
36+
{
37+
if (itemMember.Kind == SymbolKind.Method)
38+
{
39+
yield return itemMember;
40+
}
41+
}
2642
}
2743
}
2844

CommunityToolkit.Tooling.SampleGen/ToolkitSampleMetadataGenerator.Sample.cs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ public void Initialize(IncrementalGeneratorInitializationContext context)
2929
.Select(static (x, _) => x!);
3030

3131
var symbolsInReferencedAssemblies = context.CompilationProvider
32-
.SelectMany((x, _) => x.SourceModule.ReferencedAssemblySymbols)
33-
.SelectMany((asm, _) => asm.GlobalNamespace.CrawlForAllSymbols().Where(x => x.Kind is SymbolKind.NamedType or SymbolKind.Method));
32+
.SelectMany((x, _) => x.SourceModule.ReferencedAssemblySymbols)
33+
.SelectMany((asm, _) => asm.GlobalNamespace.CrawlForAllSymbols());
3434

3535
var markdownFiles = context.AdditionalTextsProvider
3636
.Where(static file => file.Path.EndsWith(".md"))
@@ -80,7 +80,7 @@ void Execute(IncrementalValuesProvider<ISymbol> types, bool skipDiagnostics = fa
8080
// Auto-assign the attached method name as the generated property name.
8181
buttonActionAttribute.Name = x.Item1.Name;
8282

83-
item = (x.Item1, buttonActionAttribute);
83+
item = (x.Item1.ContainingSymbol, buttonActionAttribute);
8484
}
8585

8686
// Add extra property data, like Title, back to Attribute
@@ -138,7 +138,7 @@ void Execute(IncrementalValuesProvider<ISymbol> types, bool skipDiagnostics = fa
138138
sample.Attribute.Description,
139139
sample.AttachedQualifiedTypeName,
140140
optionsPaneAttribute.FirstOrDefault(x => x.Item1?.SampleId == sample.Attribute.Id).Item2?.ToString(),
141-
generatedOptionPropertyData.Where(x => ReferenceEquals(x.Item1, sample.Symbol)).Select(x => x.Item2)
141+
generatedOptionPropertyData.Where(x => Equals(x.Symbol, sample.Symbol)).Select(x => x.Item2)
142142
)
143143
);
144144

@@ -256,7 +256,9 @@ private static void ReportDiagnosticsGeneratedOptionsPane(SourceProductionContex
256256
ctx.ReportDiagnostic(Diagnostic.Create(DiagnosticDescriptors.SamplePaneOptionWithDuplicateName, item.SelectMany(x => x.Item1.Locations).FirstOrDefault(), item.Key));
257257

258258
// Check for generated options that conflict with an existing property name
259-
var generatedOptionsWithConflictingPropertyNames = generatedOptionPropertyData.Where(x => x.Item1 is INamedTypeSymbol sym && GetAllMembers(sym).Any(y => x.Item2.Name == y.Name));
259+
var generatedOptionsWithConflictingPropertyNames = generatedOptionPropertyData
260+
.Where(x => x.Item2 is not ToolkitSampleButtonActionAttribute)
261+
.Where(x => x.Item1 is INamedTypeSymbol sym && GetAllMembers(sym).Any(y => x.Item2.Name == y.Name));
260262

261263
foreach (var item in generatedOptionsWithConflictingPropertyNames)
262264
ctx.ReportDiagnostic(Diagnostic.Create(DiagnosticDescriptors.SamplePaneOptionWithConflictingName, item.Item1.Locations.FirstOrDefault(), item.Item2.Name));

0 commit comments

Comments
 (0)