From b4a493971a31fce3d645398c8065479b3b01a9ff Mon Sep 17 00:00:00 2001 From: Kwoth Date: Wed, 2 Feb 2022 05:40:25 +0100 Subject: [PATCH] Fixed a CommandAttributeGenerator crash --- .../Command/CommandAttributesGenerator.cs | 16 ++++++++++++---- .../Modules/CustomReactions/NadekoExpressions.cs | 4 ++++ 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/NadekoBot.Generators/Command/CommandAttributesGenerator.cs b/src/NadekoBot.Generators/Command/CommandAttributesGenerator.cs index 5650ff9c3..7fb9c0e41 100644 --- a/src/NadekoBot.Generators/Command/CommandAttributesGenerator.cs +++ b/src/NadekoBot.Generators/Command/CommandAttributesGenerator.cs @@ -75,7 +75,7 @@ public class CmdAttribute : System.Attribute static (node, _) => node is MethodDeclarationSyntax { AttributeLists.Count: > 0 }, static (ctx, cancel) => Transform(ctx, cancel)) .Where(static m => m is not null) - .Where(static m => m!.ChildTokens().Any(static x => x.IsKind(SyntaxKind.PublicKeyword))); + .Where(static m => m?.ChildTokens().Any(static x => x.IsKind(SyntaxKind.PublicKeyword)) ?? false); var compilationMethods = context.CompilationProvider.Combine(methods.Collect()); @@ -167,8 +167,14 @@ public class CmdAttribute : System.Attribute { if (cancel.IsCancellationRequested) return new Collection(); + + if (group is null) + continue; var elems = group.ToList(); + if (elems.Count is 0) + continue; + var model = new FileModel( methods: elems, ns: elems[0].Namespace, @@ -292,15 +298,17 @@ public class CmdAttribute : System.Attribute private static MethodDeclarationSyntax? Transform(GeneratorSyntaxContext ctx, CancellationToken cancel) { - var methodDecl = (MethodDeclarationSyntax)ctx.Node; - + var methodDecl = ctx.Node as MethodDeclarationSyntax; + if (methodDecl is null) + return default; + foreach (var attListSyntax in methodDecl.AttributeLists) { foreach (var attSyntax in attListSyntax.Attributes) { if (cancel.IsCancellationRequested) return default; - + var symbol = ctx.SemanticModel.GetSymbolInfo(attSyntax).Symbol; if (symbol is not IMethodSymbol attSymbol) continue; diff --git a/src/NadekoBot/Modules/CustomReactions/NadekoExpressions.cs b/src/NadekoBot/Modules/CustomReactions/NadekoExpressions.cs index 3461c7bf8..3323c2b40 100644 --- a/src/NadekoBot/Modules/CustomReactions/NadekoExpressions.cs +++ b/src/NadekoBot/Modules/CustomReactions/NadekoExpressions.cs @@ -62,6 +62,7 @@ public partial class NadekoExpressions : NadekoModule var ex = await _service.EditAsync(ctx.Guild?.Id, id, message); if (ex is not null) + { await ctx.Channel.EmbedAsync(_eb.Create() .WithOkColor() .WithTitle(GetText(strs.edited_cust_react)) @@ -69,6 +70,7 @@ public partial class NadekoExpressions : NadekoModule .AddField(GetText(strs.trigger), ex.Trigger) .AddField(GetText(strs.response), message.Length > 1024 ? GetText(strs.redacted_too_long) : message)); + } else await ReplyErrorLocalizedAsync(strs.edit_fail); } @@ -140,12 +142,14 @@ public partial class NadekoExpressions : NadekoModule var ex = await _service.DeleteAsync(ctx.Guild?.Id, id); if (ex is not null) + { await ctx.Channel.EmbedAsync(_eb.Create() .WithOkColor() .WithTitle(GetText(strs.deleted)) .WithDescription($"#{id}") .AddField(GetText(strs.trigger), ex.Trigger.TrimTo(1024)) .AddField(GetText(strs.response), ex.Response.TrimTo(1024))); + } else await ReplyErrorLocalizedAsync(strs.no_found_id); }