Я пытаюсь получить символ вызова метода, но я всегда получаю нулевое значение.
Я проверил, что у меня есть все ссылки на System.Data
, а также поместил с помощью System.Data
вfile.
Код для connection.Open();
:
case SyntaxKind.InvocationExpression:
var ourMethodName = ((MemberAccessExpressionSyntax)((InvocationExpressionSyntax)expression).Expression).Name;
var invocation = expression as InvocationExpressionSyntax;
var methodSymbol = (IMethodSymbol)model.GetSymbolInfo(invocation).Symbol;
Тест:
public void TestDereferenceOnKnownNull()
{
var code = @"using System.Data.SqlClient;using System.IO;" +
@"
public class C
{
public SqlConnection connection = new SqlConnection("" "");
public void M()
{
connection.Open();
}
}
";
var dx = GetAnalyzerDiagnostics(code);
Assert.AreEqual(1, dx.Length);
Assert.AreEqual(DBAnalyzer.PossibleEndOfScopeWithoutCloseId, dx[0].Id);
}
protected Diagnostic[] GetAnalyzerDiagnostics(string code)
{
code = code + @"";
var document = CreateDocument(code, LanguageNames.CSharp);
var analyzer = new DBAnalyzer();
var compilerDiagnostics = document.Project.AddMetadataReference(MetadataReference.CreateFromFile(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.Data.dll"));
var compilerDiagnostics2 = compilerDiagnostics.AddMetadataReference(MetadataReference.CreateFromFile(@"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.8\System.dll")).GetCompilationAsync().Result.GetDiagnostics();
bool hasCompileErrors = compilerDiagnostics2.Any(d => d.Severity == DiagnosticSeverity.Error);
Assert.AreEqual(hasCompileErrors, false, "Compilation error(s)");
return GetSortedDiagnosticsFromDocuments(analyzer, new[] { document });
}
Я ожидал получить SqlConnection
в качестве символа, но я получил Null.