diff --git a/src/Microsoft.Fx.Portability/ApiPortClient.cs b/src/Microsoft.Fx.Portability/ApiPortClient.cs
index 1efefe81b..1aaa4d577 100644
--- a/src/Microsoft.Fx.Portability/ApiPortClient.cs
+++ b/src/Microsoft.Fx.Portability/ApiPortClient.cs
@@ -95,29 +95,33 @@ private AnalyzeRequest GenerateRequest(IApiPortOptions options, IDependencyInfo
/// Set of APIs/assemblies that are not portable/missing.
private async Task GetResultFromService(AnalyzeRequest request, IDependencyInfo dependencyFinder)
{
- _progressReport.StartTask(LocalizedStrings.SendingDataToService);
- var fullResponse = await _apiPortService.SendAnalysisAsync(request);
- _progressReport.FinishTask();
+ var fullResponse = await RetrieveResultAsync(request);
CheckEndpointStatus(fullResponse.Headers.Status);
- _progressReport.StartParallelTask(LocalizedStrings.ComputingReport, LocalizedStrings.ProcessedItems);
-
- var response = fullResponse.Response;
-
- var result = _reportGenerator.ComputeReport(
- response.Targets,
- response.SubmissionId,
- dependencyFinder?.Dependencies,
- response.MissingDependencies,
- dependencyFinder?.UnresolvedAssemblies,
- response.UnresolvedUserAssemblies,
- dependencyFinder?.AssembliesWithErrors
- );
-
- _progressReport.FinishTask();
+ using (_progressReport.StartParallelTask(LocalizedStrings.ComputingReport, LocalizedStrings.ProcessedItems))
+ {
+ var response = fullResponse.Response;
+ var hasDependencyFinder = dependencyFinder != null;
+
+ return _reportGenerator.ComputeReport(
+ response.Targets,
+ response.SubmissionId,
+ hasDependencyFinder ? dependencyFinder.Dependencies : null, //allDependencies
+ response.MissingDependencies,
+ hasDependencyFinder ? dependencyFinder.UnresolvedAssemblies : null, //unresolvedAssemblies
+ response.UnresolvedUserAssemblies,
+ hasDependencyFinder ? dependencyFinder.AssembliesWithErrors : null //assembliesWithErrors
+ );
+ }
+ }
- return result;
+ private async Task> RetrieveResultAsync(AnalyzeRequest request)
+ {
+ using (_progressReport.StartTask(LocalizedStrings.SendingDataToService))
+ {
+ return await _apiPortService.SendAnalysisAsync(request);
+ }
}
///
@@ -126,13 +130,14 @@ private async Task GetResultFromService(AnalyzeRequest request,
/// An array of bytes corresponding to the report.
private async Task GetResultFromService(AnalyzeRequest request, ResultFormat format)
{
- _progressReport.StartTask(LocalizedStrings.SendingDataToService);
- var response = await _apiPortService.SendAnalysisAsync(request, format);
- _progressReport.FinishTask();
+ using (_progressReport.StartTask(LocalizedStrings.SendingDataToService))
+ {
+ var response = await _apiPortService.SendAnalysisAsync(request, format);
- CheckEndpointStatus(response.Headers.Status);
+ CheckEndpointStatus(response.Headers.Status);
- return response.Response;
+ return response.Response;
+ }
}
///
@@ -149,15 +154,14 @@ private void CheckEndpointStatus(EndpointStatus status)
public async Task> ListTargets()
{
- _progressReport.StartTask(LocalizedStrings.RetrievingTargets);
-
- var targets = await _apiPortService.GetTargetsAsync();
-
- _progressReport.FinishTask();
+ using (_progressReport.StartTask(LocalizedStrings.RetrievingTargets))
+ {
+ var targets = await _apiPortService.GetTargetsAsync();
- CheckEndpointStatus(targets.Headers.Status);
+ CheckEndpointStatus(targets.Headers.Status);
- return targets.Response;
+ return targets.Response;
+ }
}
}
}
diff --git a/src/Microsoft.Fx.Portability/IProgressReporter.cs b/src/Microsoft.Fx.Portability/IProgressReporter.cs
index 465cf7f61..6c09f0b2e 100644
--- a/src/Microsoft.Fx.Portability/IProgressReporter.cs
+++ b/src/Microsoft.Fx.Portability/IProgressReporter.cs
@@ -7,12 +7,9 @@ namespace Microsoft.Fx.Portability
{
public interface IProgressReporter
{
- void AbortTask();
- void FinishTask();
- void ReportIssue(string issueFormat, params object[] items);
- void ReportUnitComplete();
- void StartParallelTask(string taskName, string details);
- void StartTask(string taskName);
+ void ReportIssue(string issue);
+ IProgressTask StartParallelTask(string taskName, string details);
+ IProgressTask StartTask(string taskName);
IReadOnlyCollection Issues { get; }
}
}
\ No newline at end of file
diff --git a/src/Microsoft.Fx.Portability/IProgressTask.cs b/src/Microsoft.Fx.Portability/IProgressTask.cs
new file mode 100644
index 000000000..f8900945a
--- /dev/null
+++ b/src/Microsoft.Fx.Portability/IProgressTask.cs
@@ -0,0 +1,13 @@
+// Copyright (c) Microsoft. All rights reserved.
+// Licensed under the MIT license. See LICENSE file in the project root for full license information.
+
+using System;
+
+namespace Microsoft.Fx.Portability
+{
+ public interface IProgressTask : IDisposable
+ {
+ void ReportUnitComplete();
+ void Abort();
+ }
+}
\ No newline at end of file
diff --git a/src/Microsoft.Fx.Portability/Reporting/ReportFileWriter.cs b/src/Microsoft.Fx.Portability/Reporting/ReportFileWriter.cs
index 95d68a209..5f9ff9a02 100644
--- a/src/Microsoft.Fx.Portability/Reporting/ReportFileWriter.cs
+++ b/src/Microsoft.Fx.Portability/Reporting/ReportFileWriter.cs
@@ -84,7 +84,7 @@ private string GetFileName(string directory, string fileName, ResultFormat forma
if (!string.IsNullOrEmpty(originalExtension) && !originalExtension.Equals(extension, StringComparison.CurrentCultureIgnoreCase))
{
- _progressReporter.ReportIssue(LocalizedStrings.ChangingFileExtension, fileName, originalExtension, extension);
+ _progressReporter.ReportIssue(string.Format(LocalizedStrings.ChangingFileExtension, fileName, originalExtension, extension));
}
var fileNameWithoutExtension = Path.GetFileNameWithoutExtension(fileName);
@@ -99,7 +99,7 @@ private string GetFileName(string directory, string fileName, ResultFormat forma
// This file exists already but since we don't care about uniqueness, we'll overwrite it.
if (!isUnique)
{
- _progressReporter.ReportIssue(LocalizedStrings.OverwriteFile, uniqueName);
+ _progressReporter.ReportIssue(string.Format(LocalizedStrings.OverwriteFile, uniqueName));
return uniqueName;
}