From e38f0367ac84d3c140354f2a6bfdf7f8b214e63c Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 10 Jan 2026 03:10:24 +0000 Subject: [PATCH 1/2] Initial plan From b4673c9ddb8078c41157b41fdf1e146a5beabf57 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Sat, 10 Jan 2026 03:17:18 +0000 Subject: [PATCH 2/2] Fix MA0182 to detect pointer type usages in method parameters Co-authored-by: meziantou <509220+meziantou@users.noreply.github.com> --- .../Rules/AvoidUnusedInternalTypesAnalyzer.cs | 6 ++++ .../AvoidUnusedInternalTypesAnalyzerTests.cs | 29 +++++++++++++++++++ 2 files changed, 35 insertions(+) diff --git a/src/Meziantou.Analyzer/Rules/AvoidUnusedInternalTypesAnalyzer.cs b/src/Meziantou.Analyzer/Rules/AvoidUnusedInternalTypesAnalyzer.cs index cc00cbf56..cc1e05a6e 100644 --- a/src/Meziantou.Analyzer/Rules/AvoidUnusedInternalTypesAnalyzer.cs +++ b/src/Meziantou.Analyzer/Rules/AvoidUnusedInternalTypesAnalyzer.cs @@ -260,6 +260,12 @@ private void AddUsedType(ITypeSymbol typeSymbol) AddUsedType(arrayTypeSymbol.ElementType); } + // Handle pointer types + if (typeSymbol is IPointerTypeSymbol pointerTypeSymbol) + { + AddUsedType(pointerTypeSymbol.PointedAtType); + } + // Handle generic type arguments if (typeSymbol is INamedTypeSymbol namedTypeSymbol) { diff --git a/tests/Meziantou.Analyzer.Test/Rules/AvoidUnusedInternalTypesAnalyzerTests.cs b/tests/Meziantou.Analyzer.Test/Rules/AvoidUnusedInternalTypesAnalyzerTests.cs index 8d99e5266..6c5baf8d3 100644 --- a/tests/Meziantou.Analyzer.Test/Rules/AvoidUnusedInternalTypesAnalyzerTests.cs +++ b/tests/Meziantou.Analyzer.Test/Rules/AvoidUnusedInternalTypesAnalyzerTests.cs @@ -1370,4 +1370,33 @@ await CreateProjectBuilder() .WithSourceCode(SourceCode) .ValidateAsync(); } + + [Fact] + public async Task InternalStructUsedAsPointerInMethodParameter_NoDiagnostic() + { + const string SourceCode = """ + using System; + + internal struct SECURITY_ATTRIBUTES + { + internal uint nLength; + internal IntPtr lpSecurityDescriptor; + internal bool bInheritHandle; + } + + public class FileOperations + { + private static unsafe void CreateFilePrivate( + string lpFileName, + int dwDesiredAccess, + int dwShareMode, + SECURITY_ATTRIBUTES* lpSecurityAttributes) + { + } + } + """; + await CreateProjectBuilder() + .WithSourceCode(SourceCode) + .ValidateAsync(); + } }