diff --git a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementation.cs b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementation.cs index 7ffc6c3922..6622f470b4 100644 --- a/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementation.cs +++ b/src/NetAnalyzers/Core/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementation.cs @@ -128,7 +128,7 @@ private static void AnalyzeType(SymbolAnalysisContext context, INamedTypeSymbol foreach (var member in targetType.GetMembers()) { - if (!member.IsImplementationOfAnyExplicitInterfaceMember() && !member.IsStatic) + if (!member.IsImplementationOfAnyExplicitInterfaceMember() && !member.IsStatic && !member.IsType()) { // We don't want to emit diagnostics when the member is an accessor method. if (member is not IMethodSymbol { AssociatedSymbol: IPropertySymbol or IEventSymbol }) diff --git a/src/NetAnalyzers/UnitTests/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementationTests.cs b/src/NetAnalyzers/UnitTests/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementationTests.cs index 866c7fdf30..c4c57e83b6 100644 --- a/src/NetAnalyzers/UnitTests/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementationTests.cs +++ b/src/NetAnalyzers/UnitTests/Microsoft.NetCore.Analyzers/InteropServices/DynamicInterfaceCastableImplementationTests.cs @@ -1240,6 +1240,31 @@ static void I.M() await VerifyCSCodeFixAsync(source, fixedSource, CSharp.LanguageVersion.Preview, ReferenceAssemblies.Net.Net60); } + [Fact] + [WorkItem(7106, "htpts://github.com/dotnet/roslyn-analyzers/issues/7106")] + public async Task DynamicInterfaceCastableImplementation_NonStatic_NestedType() + { + string source = @" +using System.Runtime.InteropServices; + +public interface IMyInterface +{ + void M(); +} + +[DynamicInterfaceCastableImplementation] +internal interface IImpl : IMyInterface +{ + internal class C { } + + void IMyInterface.M() + { + } +} +"; + await VerifyCSAnalyzerAsync(source); + } + private static Task VerifyCSAnalyzerAsync(string source) { return VerifyCSCodeFixAsync(source, source);