Merge pull request #91368 from raulsntos/dotnet/must-be-variant-dynamic

C#: Ignore late bound methods in MustBeVariantAnalyzer
This commit is contained in:
Rémi Verschelde 2024-05-01 09:55:21 +02:00
commit 0e0ef3cd69
No known key found for this signature in database
GPG Key ID: C3336907360768E1
2 changed files with 18 additions and 2 deletions

View File

@ -66,6 +66,12 @@ public class MustBeVariantGD0301
Method<Rid[]>();
}
public void MethodCallDynamic()
{
dynamic self = this;
self.Method<object>();
}
public void Method<[MustBeVariant] T>()
{
}

View File

@ -50,8 +50,18 @@ namespace Godot.SourceGenerators
var typeSymbol = sm.GetSymbolInfo(typeSyntax).Symbol as ITypeSymbol;
Helper.ThrowIfNull(typeSymbol);
var parentSymbol = sm.GetSymbolInfo(parentSyntax).Symbol;
Helper.ThrowIfNull(parentSymbol);
var parentSymbolInfo = sm.GetSymbolInfo(parentSyntax);
var parentSymbol = parentSymbolInfo.Symbol;
if (parentSymbol == null)
{
if (parentSymbolInfo.CandidateReason == CandidateReason.LateBound)
{
// Invocations on dynamic are late bound so we can't retrieve the symbol.
continue;
}
Helper.ThrowIfNull(parentSymbol);
}
if (!ShouldCheckTypeArgument(context, parentSyntax, parentSymbol, typeSyntax, typeSymbol, i))
{