SemanticModel..GetSymbolInfo / GetDeclaredSymbol возвращает ноль - PullRequest
1 голос
/ 15 июня 2019

Я пытаюсь получить символ вызова метода, но я всегда получаю нулевое значение.

Я проверил, что у меня есть все ссылки на 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.

...