From fd36a37f1774e922c4be8a2f57400a34fb9db46d Mon Sep 17 00:00:00 2001 From: Morilli <35152647+Morilli@users.noreply.github.com> Date: Sat, 20 Apr 2024 17:00:26 +0200 Subject: [PATCH] Fix BizHawk.Analyzer potentially throwing Co-Authored-By: James Groom <13409956+YoshiRulz@users.noreply.github.com> --- .../FirstOrDefaultOnStructAnalyzer.cs | 10 ++++++++-- References/BizHawk.Analyzer.dll | Bin 30720 -> 31232 bytes 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/ExternalProjects/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzer.cs b/ExternalProjects/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzer.cs index ae888bb3a1..0424d99a33 100644 --- a/ExternalProjects/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzer.cs +++ b/ExternalProjects/BizHawk.Analyzer/FirstOrDefaultOnStructAnalyzer.cs @@ -1,5 +1,6 @@ namespace BizHawk.Analyzers; +using System; using System.Collections.Immutable; using System.Linq; @@ -42,8 +43,13 @@ public sealed class FirstOrDefaultOnStructAnalyzer : DiagnosticAnalyzer var operation = (IInvocationOperation) oac.Operation; var calledSym = operation.TargetMethod.ConstructedFrom; if (!(firstOrDefaultWithPredSym!.Matches(calledSym) || firstOrDefaultNoPredSym!.Matches(calledSym))) return; - var receiverExprType = (INamedTypeSymbol) operation.SemanticModel!.GetTypeInfo((CSharpSyntaxNode) operation.Arguments[0].Syntax)!.ConvertedType!; - if (receiverExprType.TypeArguments[0].IsValueType) oac.ReportDiagnostic(Diagnostic.Create(DiagUseFirstOrNull, operation.Syntax.GetLocation())); + var receiverExprType = operation.SemanticModel!.GetTypeInfo((CSharpSyntaxNode) operation.Arguments[0].Syntax).ConvertedType!; + var collectionElemType = receiverExprType switch { + INamedTypeSymbol nts => nts.TypeArguments[0], + IArrayTypeSymbol ats => ats.ElementType, + _ => throw new InvalidOperationException($"receiver parameter's effective type was of an unexpected kind (neither class/struct nor array): {receiverExprType}") + }; + if (collectionElemType.IsValueType) oac.ReportDiagnostic(Diagnostic.Create(DiagUseFirstOrNull, operation.Syntax.GetLocation())); }, OperationKind.Invocation); }); diff --git a/References/BizHawk.Analyzer.dll b/References/BizHawk.Analyzer.dll index 62e21f6ee46d175d0f5350b23c2cc2b075d14a43..cefe7b12f313f9b95e1eca50e309f72d7c34121e 100644 GIT binary patch delta 12407 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 Zq)^?T@Sz9tR@Je`S5fS188(%dI3aQw|geV%x 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