提交 30170d32 编写于 作者: A Alireza Habibi

Fix lambda completion inside `new()` arguments

上级 3a976eb3
......@@ -766,6 +766,20 @@ class C {
await VerifyNotBuilderAsync(markup);
}
[WorkItem(47662, "https://github.com/dotnet/roslyn/issues/47662")]
[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task LambdaExpressionInImplicitObjectCreation()
{
var markup = @"
using System;
class C {
C(Action<int> a) {
C c = new($$
}
}";
await VerifyBuilderAsync(markup);
}
[WorkItem(15443, "https://github.com/dotnet/roslyn/issues/15443")]
[Fact, Trait(Traits.Feature, Traits.Features.Completion)]
public async Task NotBuilderWhenDelegateInferredRightOfDotInInvocation()
......
......@@ -230,7 +230,7 @@ protected override IEnumerable<TypeInferenceInfo> InferTypesWorker_DoNotCallDire
MemberAccessExpressionSyntax memberAccessExpression => InferTypeInMemberAccessExpression(memberAccessExpression, previousToken: token),
NameColonSyntax nameColon => InferTypeInNameColon(nameColon, token),
NameEqualsSyntax nameEquals => InferTypeInNameEquals(nameEquals, token),
ObjectCreationExpressionSyntax objectCreation => InferTypeInObjectCreationExpression(objectCreation, token),
BaseObjectCreationExpressionSyntax objectCreation => InferTypeInObjectCreationExpression(objectCreation, token),
LambdaExpressionSyntax lambdaExpression => InferTypeInLambdaExpression(lambdaExpression, token),
PostfixUnaryExpressionSyntax postfixUnary => InferTypeInPostfixUnaryExpression(postfixUnary, token),
PrefixUnaryExpressionSyntax prefixUnary => InferTypeInPrefixUnaryExpression(prefixUnary, token),
......@@ -386,7 +386,7 @@ private IEnumerable<TypeInferenceInfo> InferTypeInConstructorInitializer(Constru
return InferTypeInArgument(index, methods, argument, parentInvocationExpressionToTypeInfer: null);
}
private IEnumerable<TypeInferenceInfo> InferTypeInObjectCreationExpression(ObjectCreationExpressionSyntax expression, SyntaxToken previousToken)
private IEnumerable<TypeInferenceInfo> InferTypeInObjectCreationExpression(BaseObjectCreationExpressionSyntax expression, SyntaxToken previousToken)
{
// A couple of broken code scenarios where the new keyword in objectcreationexpression
// appears to be a part of a subsequent assignment. For example:
......@@ -426,11 +426,11 @@ private IEnumerable<TypeInferenceInfo> InferTypeInObjectCreationExpression(Objec
return InferTypes(expression);
}
private IEnumerable<TypeInferenceInfo> InferTypeInObjectCreationExpression(ObjectCreationExpressionSyntax creation, int index, ArgumentSyntax argumentOpt = null)
private IEnumerable<TypeInferenceInfo> InferTypeInObjectCreationExpression(BaseObjectCreationExpressionSyntax creation, int index, ArgumentSyntax argumentOpt = null)
{
var info = SemanticModel.GetSymbolInfo(creation.Type, CancellationToken);
var info = SemanticModel.GetTypeInfo(creation, CancellationToken);
if (!(info.Symbol is INamedTypeSymbol type))
if (!(info.Type is INamedTypeSymbol type))
{
return SpecializedCollections.EmptyEnumerable<TypeInferenceInfo>();
}
......@@ -504,7 +504,7 @@ private IEnumerable<TypeInferenceInfo> InferTypeInArgumentList(ArgumentListSynta
return InferTypeInInvocationExpression(invocation, index);
}
case ObjectCreationExpressionSyntax objectCreation:
case BaseObjectCreationExpressionSyntax objectCreation:
{
var index = GetArgumentListIndex(argumentList, previousToken);
return InferTypeInObjectCreationExpression(objectCreation, index);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册