提交 c4ff2725 编写于 作者: H HeeJae Chang 提交者: Sam Harwell

Use helper methods to transform DiagnosticAnalysisResult

上级 3b648e8e
......@@ -165,15 +165,7 @@ public IEnumerable<DiagnosticData> ConvertToLocalDiagnostics(Document targetDocu
Logger.Log(FunctionId.Diagnostics_ProjectDiagnostic, p => $"Failed to Load Successfully ({p.FilePath ?? p.Name})", project);
// get rid of any result except syntax from compiler analyzer result
var newCompilerAnalysisResult = new DiagnosticAnalysisResult(
analysisResult.ProjectId,
analysisResult.Version,
analysisResult.SyntaxLocals,
semanticLocals: ImmutableDictionary<DocumentId, ImmutableArray<DiagnosticData>>.Empty,
nonLocals: ImmutableDictionary<DocumentId, ImmutableArray<DiagnosticData>>.Empty,
others: ImmutableArray<DiagnosticData>.Empty,
documentIds: null,
fromBuild: false);
var newCompilerAnalysisResult = analysisResult.DropExceptSyntax();
// return new result
return result.SetItem(compilerAnalyzer, newCompilerAnalysisResult);
......
......@@ -232,7 +232,7 @@ public async Task SaveAsync(Project project, DiagnosticAnalysisResult result)
public void ResetVersion()
{
// reset version of cached data so that we can recalculate new data (ex, OnDocumentReset)
_lastResult = new DiagnosticAnalysisResult(_lastResult.ProjectId, VersionStamp.Default, _lastResult.DocumentIds, _lastResult.IsEmpty, _lastResult.FromBuild);
_lastResult = _lastResult.Reset();
}
public async Task MergeAsync(ActiveFileState state, Document document)
......@@ -280,7 +280,7 @@ public async Task MergeAsync(ActiveFileState state, Document document)
await SerializeAsync(serializer, document, document.Id, _owner.SemanticStateName, semantic.Items).ConfigureAwait(false);
// save last aggregated form of analysis result
_lastResult = new DiagnosticAnalysisResult(_lastResult.ProjectId, version, _lastResult.DocumentIdsOrEmpty.Add(state.DocumentId), isEmpty: false, fromBuild: fromBuild);
_lastResult = _lastResult.UpdateAggregatedResult(version, state.DocumentId, fromBuild);
}
public bool OnDocumentRemoved(DocumentId id)
......
......@@ -30,7 +30,7 @@ internal struct DiagnosticAnalysisResult
private readonly ImmutableDictionary<DocumentId, ImmutableArray<DiagnosticData>> _nonLocals;
private readonly ImmutableArray<DiagnosticData> _others;
public DiagnosticAnalysisResult(
private DiagnosticAnalysisResult(
ProjectId projectId, VersionStamp version, ImmutableHashSet<DocumentId> documentIds, bool isEmpty, bool fromBuild)
{
ProjectId = projectId;
......@@ -45,7 +45,7 @@ internal struct DiagnosticAnalysisResult
_others = default;
}
public DiagnosticAnalysisResult(
private DiagnosticAnalysisResult(
ProjectId projectId, VersionStamp version,
ImmutableDictionary<DocumentId, ImmutableArray<DiagnosticData>> syntaxLocals,
ImmutableDictionary<DocumentId, ImmutableArray<DiagnosticData>> semanticLocals,
......@@ -180,6 +180,29 @@ public DiagnosticAnalysisResult ToAggregatedForm()
return new DiagnosticAnalysisResult(ProjectId, Version, DocumentIds, IsEmpty, FromBuild);
}
public DiagnosticAnalysisResult UpdateAggregatedResult(VersionStamp version, DocumentId documentId, bool fromBuild)
{
return new DiagnosticAnalysisResult(ProjectId, version, DocumentIdsOrEmpty.Add(documentId), isEmpty: false, fromBuild: fromBuild);
}
public DiagnosticAnalysisResult Reset()
{
return new DiagnosticAnalysisResult(ProjectId, VersionStamp.Default, DocumentIds, IsEmpty, FromBuild);
}
public DiagnosticAnalysisResult DropExceptSyntax()
{
return new DiagnosticAnalysisResult(
ProjectId,
Version,
SyntaxLocals,
semanticLocals: ImmutableDictionary<DocumentId, ImmutableArray<DiagnosticData>>.Empty,
nonLocals: ImmutableDictionary<DocumentId, ImmutableArray<DiagnosticData>>.Empty,
others: ImmutableArray<DiagnosticData>.Empty,
documentIds: null,
fromBuild: false);
}
private T ReturnIfNotDefault<T>(T value)
{
if (object.Equals(value, default))
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册