提交 8f704c1a 编写于 作者: C CyrusNajmabadi

Inline methods.

上级 653d1bdb
......@@ -69,9 +69,12 @@ internal static class DependentTypeFinder
{
if (IsNonSealedClass(type))
{
Func<HashSet<INamedTypeSymbol>, INamedTypeSymbol, bool> sourceTypeImmediatelyMatches =
(s, t) => s.Contains(t.BaseType?.OriginalDefinition);
return FindTypesAsync(type, solution, projects,
findMetadataTypesAsync: FindDerivedMetadataClassesInProjectAsync,
findImmediatelyInheritingTypesInDocumentAsync: FindImmediatelyDerivedClassesInDocumentAsync,
sourceTypeImmediatelyMatches: sourceTypeImmediatelyMatches,
shouldContinueSearching: IsNonSealedClass,
transitive: transitive,
cancellationToken: cancellationToken);
......@@ -121,7 +124,7 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
{
return FindTypesAsync(type, solution, projects,
findMetadataTypesAsync: FindDerivedAndImplementingMetadataTypesInProjectAsync,
findImmediatelyInheritingTypesInDocumentAsync: FindImmediatelyDerivedAndImplementingTypesInDocumentAsync,
sourceTypeImmediatelyMatches: ImmediatelyDerivesOrImplementsFrom,
shouldContinueSearching: s_isInterfaceOrNonSealedClass,
transitive: transitive,
cancellationToken: cancellationToken);
......@@ -135,7 +138,7 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
Solution solution,
IImmutableSet<Project> projects,
SearchProject findMetadataTypesAsync,
SearchDocument findImmediatelyInheritingTypesInDocumentAsync,
Func<HashSet<INamedTypeSymbol>, INamedTypeSymbol, bool> sourceTypeImmediatelyMatches,
Func<INamedTypeSymbol, bool> shouldContinueSearching,
bool transitive,
CancellationToken cancellationToken)
......@@ -195,7 +198,7 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
currentMetadataTypes, currentSourceAndMetadataTypes,
project,
findMetadataTypesAsync,
findImmediatelyInheritingTypesInDocumentAsync,
sourceTypeImmediatelyMatches,
shouldContinueSearching,
transitive, cancellationToken).ConfigureAwait(false);
}
......@@ -210,7 +213,7 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
HashSet<INamedTypeSymbol> currentSourceAndMetadataTypes,
Project project,
SearchProject findMetadataTypesAsync,
SearchDocument findImmediatelyInheritingTypesInDocumentAsync,
Func<HashSet<INamedTypeSymbol>, INamedTypeSymbol, bool> sourceTypeImmediatelyMatches,
Func<INamedTypeSymbol, bool> shouldContinueSearching,
bool transitive,
CancellationToken cancellationToken)
......@@ -240,7 +243,7 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
// Now search the project and see what source types we can find.
var foundSourceTypes = await FindSourceTypesInProjectAsync(
currentSourceAndMetadataTypes, project,
findImmediatelyInheritingTypesInDocumentAsync,
sourceTypeImmediatelyMatches,
shouldContinueSearching,
transitive, cancellationToken).ConfigureAwait(false);
......@@ -475,7 +478,7 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
private static async Task<IEnumerable<INamedTypeSymbol>> FindSourceTypesInProjectAsync(
HashSet<INamedTypeSymbol> sourceAndMetadataTypes,
Project project,
SearchDocument findImmediatelyDerivedTypesInDocumentAsync,
Func<HashSet<INamedTypeSymbol>, INamedTypeSymbol, bool> sourceTypeImmediatelyMatches,
Func<INamedTypeSymbol, bool> shouldContinueSearching,
bool transitive,
CancellationToken cancellationToken)
......@@ -510,9 +513,10 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
inheritanceInfo.TypeNames.AddRange(typesToSearchFor.Select(c => c.Name));
// Search all the documents of this project in parallel.
var tasks = project.Documents.Select(d => findImmediatelyDerivedTypesInDocumentAsync(
var tasks = project.Documents.Select(d => FindImmediatelyInheritingTypesInDocumentAsync(
typesToSearchFor, inheritanceInfo, d,
cachedModels, cachedInfos, cancellationToken)).ToArray();
cachedModels, cachedInfos,
sourceTypeImmediatelyMatches, cancellationToken)).ToArray();
await Task.WhenAll(tasks).ConfigureAwait(false);
......@@ -543,22 +547,6 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
return finalResult;
}
private static Task<IEnumerable<INamedTypeSymbol>> FindImmediatelyDerivedAndImplementingTypesInDocumentAsync(
HashSet<INamedTypeSymbol> typesToSearchFor,
InheritanceInfo inheritanceInfo,
Document document,
ConcurrentSet<SemanticModel> cachedModels,
ConcurrentSet<IDeclarationInfo> cachedInfos,
CancellationToken cancellationToken)
{
Func<INamedTypeSymbol, bool> typeMatches = t => ImmediatelyDerivesOrImplementsFrom(typesToSearchFor, t);
return FindImmediatelyInheritingTypesInDocumentAsync(
inheritanceInfo, document,
cachedModels, cachedInfos, typeMatches,
cancellationToken);
}
private static bool ImmediatelyDerivesOrImplementsFrom(
HashSet<INamedTypeSymbol> typesToSearchFor, INamedTypeSymbol type)
{
......@@ -578,27 +566,13 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
return false;
}
private static Task<IEnumerable<INamedTypeSymbol>> FindImmediatelyDerivedClassesInDocumentAsync(
ISet<INamedTypeSymbol> classesToSearchFor,
InheritanceInfo inheritanceInfo,
Document document,
ConcurrentSet<SemanticModel> cachedModels,
ConcurrentSet<IDeclarationInfo> cachedInfos,
CancellationToken cancellationToken)
{
Func<INamedTypeSymbol, bool> typeMatches = t => classesToSearchFor.Contains(t.BaseType?.OriginalDefinition);
return FindImmediatelyInheritingTypesInDocumentAsync(
inheritanceInfo, document,
cachedModels, cachedInfos, typeMatches,
cancellationToken);
}
private static async Task<IEnumerable<INamedTypeSymbol>> FindImmediatelyInheritingTypesInDocumentAsync(
HashSet<INamedTypeSymbol> typesToSearchFor,
InheritanceInfo inheritanceInfo,
Document document,
ConcurrentSet<SemanticModel> cachedModels,
ConcurrentSet<IDeclarationInfo> cachedInfos,
Func<INamedTypeSymbol, bool> typeMatches,
Func<HashSet<INamedTypeSymbol>, INamedTypeSymbol, bool> typeImmediatelyMatches,
CancellationToken cancellationToken)
{
var declarationInfo = await document.GetDeclarationInfoAsync(cancellationToken).ConfigureAwait(false);
......@@ -608,16 +582,21 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
foreach (var symbolInfo in declarationInfo.DeclaredSymbolInfos)
{
result = await ProcessSymbolInfo(
typesToSearchFor,
inheritanceInfo, document, cachedModels,
typeMatches, result, symbolInfo, cancellationToken).ConfigureAwait(false);
typeImmediatelyMatches, result, symbolInfo, cancellationToken).ConfigureAwait(false);
}
return result;
}
private static async Task<HashSet<INamedTypeSymbol>> ProcessSymbolInfo(
InheritanceInfo inheritanceInfo, Document document, ConcurrentSet<SemanticModel> cachedModels,
Func<INamedTypeSymbol, bool> typeMatches, HashSet<INamedTypeSymbol> result,
HashSet<INamedTypeSymbol> typesToSearchFor,
InheritanceInfo inheritanceInfo,
Document document,
ConcurrentSet<SemanticModel> cachedModels,
Func<HashSet<INamedTypeSymbol>, INamedTypeSymbol, bool> typeImmediatelyMatches,
HashSet<INamedTypeSymbol> result,
DeclaredSymbolInfo info, CancellationToken cancellationToken)
{
// If we're searching for enums/structs/delegates, then we can just look at the kind of
......@@ -653,7 +632,7 @@ private static bool IsNonSealedClass(INamedTypeSymbol type)
var symbol = await ResolveAsync(document, info, cachedModels, cancellationToken).ConfigureAwait(false) as INamedTypeSymbol;
if (symbol != null)
{
if (typeMatches(symbol))
if (typeImmediatelyMatches(typesToSearchFor, symbol))
{
result = result ?? new HashSet<INamedTypeSymbol>();
result.Add(symbol);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册