提交 63201e71 编写于 作者: J Jason Malinowski

Deduplicate code to generate the symbol display string for navigation

上级 54b06504
......@@ -44,20 +44,7 @@ public DeclaredSymbolNavigableItem(Document document, DeclaredSymbolInfo declare
return null;
}
var symbolDisplayService = Document.GetLanguageService<ISymbolDisplayService>();
switch (Symbol.Kind)
{
case SymbolKind.NamedType:
return symbolDisplayService.ToDisplayString(Symbol, s_shortFormatWithModifiers);
case SymbolKind.Method:
return Symbol.IsStaticConstructor()
? symbolDisplayService.ToDisplayString(Symbol, s_shortFormatWithModifiers)
: symbolDisplayService.ToDisplayString(Symbol, s_shortFormat);
default:
return symbolDisplayService.ToDisplayString(Symbol, s_shortFormat);
}
return GetSymbolDisplayString(Document.Project, Symbol);
}
catch (Exception e) when (FatalError.Report(e))
{
......
......@@ -28,21 +28,7 @@ private class SymbolLocationNavigableItem : INavigableItem
_lazyDisplayName = new Lazy<string>(() =>
{
var symbolDisplayService = this.Document.Project.LanguageServices.GetService<ISymbolDisplayService>();
switch (symbol.Kind)
{
case SymbolKind.NamedType:
return symbolDisplayService.ToDisplayString(_symbol, s_shortFormatWithModifiers);
case SymbolKind.Method:
return _symbol.IsStaticConstructor()
? symbolDisplayService.ToDisplayString(_symbol, s_shortFormatWithModifiers)
: symbolDisplayService.ToDisplayString(_symbol, s_shortFormat);
default:
return symbolDisplayService.ToDisplayString(_symbol, s_shortFormat);
}
return GetSymbolDisplayString(Document.Project, _symbol);
});
}
......
......@@ -2,8 +2,10 @@
using System.Collections.Generic;
using System.Linq;
using System.Threading;
using Microsoft.CodeAnalysis.FindSymbols;
using Microsoft.CodeAnalysis.GeneratedCodeRecognition;
using Microsoft.CodeAnalysis.LanguageServices;
using Microsoft.CodeAnalysis.Shared.Extensions;
using Roslyn.Utilities;
......@@ -21,6 +23,7 @@ public static INavigableItem GetItemFromDeclaredSymbolInfo(DeclaredSymbolInfo de
return new DeclaredSymbolNavigableItem(document, declaredSymbolInfo);
}
public static IEnumerable<INavigableItem> GetItemsFromPreferredSourceLocations(Solution solution, ISymbol symbol)
{
var locations = GetPreferredSourceLocations(solution, symbol);
......@@ -57,6 +60,24 @@ private static IEnumerable<Location> GetPreferredSourceLocations(ISymbol symbol)
: locations.Where(loc => loc.IsInSource);
}
public static string GetSymbolDisplayString(Project project, ISymbol symbol)
{
var symbolDisplayService = project.LanguageServices.GetRequiredService<ISymbolDisplayService>();
switch (symbol.Kind)
{
case SymbolKind.NamedType:
return symbolDisplayService.ToDisplayString(symbol, s_shortFormatWithModifiers);
case SymbolKind.Method:
return symbol.IsStaticConstructor()
? symbolDisplayService.ToDisplayString(symbol, s_shortFormatWithModifiers)
: symbolDisplayService.ToDisplayString(symbol, s_shortFormat);
default:
return symbolDisplayService.ToDisplayString(symbol, s_shortFormat);
}
}
private static readonly SymbolDisplayFormat s_shortFormat =
new SymbolDisplayFormat(
globalNamespaceStyle: SymbolDisplayGlobalNamespaceStyle.OmittedAsContaining,
......
......@@ -96,6 +96,8 @@ private static Type[] GetNeutralAndCSharpAndVisualBasicTypes()
typeof(Microsoft.CodeAnalysis.VisualBasic.VisualBasicSyntaxFactsService),
typeof(CodeAnalysis.CSharp.CSharpSymbolDeclarationService),
typeof(CodeAnalysis.VisualBasic.VisualBasicSymbolDeclarationService),
typeof(CodeAnalysis.Editor.CSharp.LanguageServices.CSharpSymbolDisplayServiceFactory),
typeof(CodeAnalysis.Editor.VisualBasic.LanguageServices.VisualBasicSymbolDisplayServiceFactory),
typeof(CodeAnalysis.CSharp.Simplification.CSharpSimplificationService),
typeof(CodeAnalysis.VisualBasic.Simplification.VisualBasicSimplificationService),
typeof(CodeAnalysis.CSharp.Rename.CSharpRenameConflictLanguageService),
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册