Skip to content

Commit

Permalink
Fix broken tests, and address feedback from @AlekseyTs
Browse files Browse the repository at this point in the history
  • Loading branch information
YairHalberstadt committed Mar 11, 2021
1 parent ef0d6cc commit d31a3dc
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 18 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -609,7 +609,10 @@ void visitFunctionPointerSignature(IMethodSymbol symbol)

foreach (var param in symbol.Parameters)
{
AddParameterRefKindIfRequired(param.RefKind);
if (format.MemberOptions.IncludesOption(SymbolDisplayMemberOptions.IncludeRef))
{
AddParameterRefKind(param.RefKind);
}

AddCustomModifiersIfRequired(param.RefCustomModifiers);

Expand Down Expand Up @@ -685,10 +688,11 @@ public override void VisitParameter(IParameterSymbol symbol)
// (e.g. field types, param types, etc), which just want the name whereas parameters are
// used on their own or in the context of methods.


var includeType = format.ParameterOptions.IncludesOption(SymbolDisplayParameterOptions.IncludeType);

var includeName = format.ParameterOptions.IncludesOption(SymbolDisplayParameterOptions.IncludeName);
var includeName = format.ParameterOptions.IncludesOption(SymbolDisplayParameterOptions.IncludeName)
&& (symbol is Symbols.PublicModel.Symbol { UnderlyingSymbol: SignatureOnlyParameterSymbol } // SignatureOnlyParameterSymbol.ContainingSymbol throws NotSupportedException
|| symbol.ContainingSymbol is not IMethodSymbol { MethodKind: MethodKind.FunctionPointerSignature });

var includeBrackets = format.ParameterOptions.IncludesOption(SymbolDisplayParameterOptions.IncludeOptionalBrackets);

Expand Down Expand Up @@ -976,21 +980,26 @@ private void AddParameterRefKindIfRequired(RefKind refKind)
{
if (format.ParameterOptions.IncludesOption(SymbolDisplayParameterOptions.IncludeParamsRefOut))
{
switch (refKind)
{
case RefKind.Out:
AddKeyword(SyntaxKind.OutKeyword);
AddSpace();
break;
case RefKind.Ref:
AddKeyword(SyntaxKind.RefKeyword);
AddSpace();
break;
case RefKind.In:
AddKeyword(SyntaxKind.InKeyword);
AddSpace();
break;
}
AddParameterRefKind(refKind);
}
}

private void AddParameterRefKind(RefKind refKind)
{
switch (refKind)
{
case RefKind.Out:
AddKeyword(SyntaxKind.OutKeyword);
AddSpace();
break;
case RefKind.Ref:
AddKeyword(SyntaxKind.RefKeyword);
AddSpace();
break;
case RefKind.In:
AddKeyword(SyntaxKind.InKeyword);
AddSpace();
break;
}
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7715,5 +7715,47 @@ class A {
format,
"delegate*<(Int32 i, String s), (Int32 i, String s)>");
}

[Fact, WorkItem(51222, "https://github.com/dotnet/roslyn/issues/51222")]
public void TestFunctionPointerWithRefParametersAndIncludeParameterRefOut()
{
var text = @"
class A {
delegate*<in int, ref readonly string> f;
}";

Func<NamespaceSymbol, Symbol> findSymbol = global =>
((FieldSymbol)global.GetTypeMembers("A", 0).Single()
.GetMembers("f").Single()).Type;

var format = new SymbolDisplayFormat(parameterOptions: SymbolDisplayParameterOptions.IncludeParamsRefOut);

TestSymbolDescription(
text,
findSymbol,
format,
"delegate*<Int32, String>");
}

[Fact, WorkItem(51222, "https://github.com/dotnet/roslyn/issues/51222")]
public void TestFunctionPointerWithRefParametersAndIncludeRef()
{
var text = @"
class A {
delegate*<in int, ref readonly string> f;
}";

Func<NamespaceSymbol, Symbol> findSymbol = global =>
((FieldSymbol)global.GetTypeMembers("A", 0).Single()
.GetMembers("f").Single()).Type;

var format = new SymbolDisplayFormat(memberOptions: SymbolDisplayMemberOptions.IncludeRef);

TestSymbolDescription(
text,
findSymbol,
format,
"delegate*<in Int32, ref readonly String>");
}
}
}

0 comments on commit d31a3dc

Please sign in to comment.