提交 79602b5d 编写于 作者: N nmgafter

1084693-API representation when query 'methods' are fields or properties (changeset 1409529)

上级 b0a3fdb9
......@@ -692,15 +692,20 @@ private QueryClauseInfo GetQueryClauseInfo(BoundQueryClause bound)
{
if (bound == null) return default(QueryClauseInfo);
var castInfo = (bound.Cast == null) ? default(SymbolInfo) : GetSymbolInfoForNode(SymbolInfoOptions.DefaultOptions, bound.Cast, bound.Cast, boundNodeForSyntacticParent: null, binderOpt: null);
var operationInfo = (bound.Operation == null) ? default(SymbolInfo) : GetSymbolInfoForNode(SymbolInfoOptions.DefaultOptions, bound.Operation, bound.Operation, boundNodeForSyntacticParent: null, binderOpt: null);
var operationInfo = GetSymbolInfoForQuery(bound);
return new QueryClauseInfo(castInfo: castInfo, operationInfo: operationInfo);
}
private SymbolInfo GetSymbolInfoForQuery(BoundQueryClause bound)
{
return (bound == null || bound.Operation == null) ?
default(SymbolInfo) :
GetSymbolInfoForNode(SymbolInfoOptions.DefaultOptions, bound.Operation, bound.Operation, boundNodeForSyntacticParent: null, binderOpt: null);
var call = bound?.Operation as BoundCall;
if (call == null)
{
return default(SymbolInfo);
}
var operation = call.IsDelegateCall ? call.ReceiverOpt : call;
return GetSymbolInfoForNode(SymbolInfoOptions.DefaultOptions, operation, operation, boundNodeForSyntacticParent: null, binderOpt: null);
}
private CSharpTypeInfo GetTypeInfoForQuery(BoundQueryClause bound)
......
......@@ -1467,7 +1467,7 @@ static void Main()
Assert.Equal(null, info0.CastInfo.Symbol);
Assert.Null(info0.OperationInfo.Symbol);
var infoSelect = model.GetSemanticInfoSummary(q.Body.SelectOrGroup);
Assert.Equal("Invoke", infoSelect.Symbol.Name);
Assert.Equal("Select", infoSelect.Symbol.Name);
}
[WorkItem(542624, "DevDiv")]
......
......@@ -15,7 +15,7 @@ namespace Microsoft.CodeAnalysis.CSharp.UnitTests
{
using Utils = CompilationUtils;
public class GetExtendedSemanticInfoTests : SemanticModelTestBase
public class SemanticModelGetSemanticInfoTests : SemanticModelTestBase
{
[Fact]
public void FailedOverloadResolution()
......@@ -15145,5 +15145,38 @@ class Name
Assert.False(semanticInfo.IsCompileTimeConstant);
}
[Fact, WorkItem(1084693, "DevDiv")]
public void Bug1084693()
{
const string sourceCode =
@"
using System;
public class C {
public Func<Func<C, C>, C> Select;
public Func<Func<C, bool>, C> Where => null;
public void M() {
var e =
from i in this
where true
select true?i:i;
}
}";
var compilation = CreateCompilationWithMscorlib(sourceCode);
compilation.VerifyDiagnostics();
var tree = compilation.SyntaxTrees[0];
var semanticModel = compilation.GetSemanticModel(tree);
string[] expectedNames = { null, "Where", "Select" };
int i = 0;
foreach (var qc in tree.GetRoot().DescendantNodes().OfType<QueryClauseSyntax>())
{
var infoSymbol = semanticModel.GetQueryClauseInfo(qc).OperationInfo.Symbol;
Assert.Equal(expectedNames[i++], infoSymbol?.Name);
}
var qe = tree.GetRoot().DescendantNodes().OfType<QueryExpressionSyntax>().Single();
var infoSymbol2 = semanticModel.GetSymbolInfo(qe.Body.SelectOrGroup).Symbol;
Assert.Equal(expectedNames[i++], infoSymbol2.Name);
}
}
}
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册