mirror of
https://github.com/aphrody-labs/NuGet.Client.git
synced 2026-10-14 21:39:05 +00:00
178 lines
5.7 KiB
C#
178 lines
5.7 KiB
C#
// Copyright (c) .NET Foundation. All rights reserved.
|
|
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
|
|
|
|
#nullable disable
|
|
|
|
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Threading.Tasks;
|
|
using EnvDTE80;
|
|
using Microsoft.VisualStudio.Shell;
|
|
using Task = System.Threading.Tasks.Task;
|
|
|
|
namespace API.Test
|
|
{
|
|
public static class VSHelper
|
|
{
|
|
public static string GetVSVersion()
|
|
{
|
|
return ThreadHelper.JoinableTaskFactory.Run(() => GetVSVersionAsync());
|
|
}
|
|
|
|
private static EnvDTE.Window PSWindow = null;
|
|
|
|
public static void StorePSWindow()
|
|
{
|
|
ThreadHelper.JoinableTaskFactory.Run(() => StorePSWindowAsync());
|
|
}
|
|
|
|
private static async Task StorePSWindowAsync()
|
|
{
|
|
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
|
|
|
|
var dte = ServiceLocator.GetDTE();
|
|
PSWindow = dte.ActiveWindow;
|
|
}
|
|
|
|
public static void FocusStoredPSWindow()
|
|
{
|
|
ThreadHelper.JoinableTaskFactory.Run(() => FocusStoredPSWindowAsync());
|
|
}
|
|
|
|
private static async Task FocusStoredPSWindowAsync()
|
|
{
|
|
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
|
|
|
|
PSWindow?.SetFocus();
|
|
PSWindow = null;
|
|
}
|
|
|
|
private static async Task<string> GetVSVersionAsync()
|
|
{
|
|
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
|
|
|
|
var dte = ServiceLocator.GetDTE();
|
|
var version = dte.Version;
|
|
|
|
return version;
|
|
}
|
|
|
|
public static string GetBuildOutput()
|
|
{
|
|
return ThreadHelper.JoinableTaskFactory.Run(() => GetBuildOutputAsync());
|
|
}
|
|
|
|
private static string BuildOutputPaneName = "Build";
|
|
private static async Task<string> GetBuildOutputAsync()
|
|
{
|
|
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
|
|
|
|
var dte = ServiceLocator.GetDTE();
|
|
var dte2 = (DTE2)dte;
|
|
var buildPane = dte2.ToolWindows.OutputWindow.OutputWindowPanes.Item(BuildOutputPaneName);
|
|
var doc = buildPane.TextDocument;
|
|
var sel = doc.Selection;
|
|
sel.StartOfDocument(Extend: false);
|
|
sel.EndOfDocument(Extend: true);
|
|
var text = sel.Text;
|
|
return text;
|
|
}
|
|
|
|
public static void NewTextFile()
|
|
{
|
|
ThreadHelper.JoinableTaskFactory.Run(() => NewTextFileAsync());
|
|
}
|
|
|
|
private static async Task NewTextFileAsync()
|
|
{
|
|
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
|
|
|
|
var dte = ServiceLocator.GetDTE();
|
|
dte.ItemOperations.NewFile("General\\Text File");
|
|
dte.ActiveDocument.Object("TextDocument");
|
|
}
|
|
|
|
private static string ErrorListWindowCaption = "Error List";
|
|
private static async Task<string[]> GetErrorTasksAsync(vsBuildErrorLevel errorLevel)
|
|
{
|
|
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
|
|
|
|
var dte = ServiceLocator.GetDTE();
|
|
dte.ExecuteCommand("View.ErrorList", " ");
|
|
|
|
EnvDTE.Window errorListWindow = null;
|
|
foreach (EnvDTE.Window window in dte.Windows)
|
|
{
|
|
if (window.Caption.StartsWith(ErrorListWindowCaption, System.StringComparison.OrdinalIgnoreCase))
|
|
{
|
|
errorListWindow = window;
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (errorListWindow == null)
|
|
{
|
|
throw new InvalidOperationException("Unable to locate the error list");
|
|
}
|
|
|
|
var errorList = errorListWindow.Object as ErrorList;
|
|
if (errorList == null)
|
|
{
|
|
throw new InvalidOperationException("Unable to retrieve the error list");
|
|
}
|
|
|
|
errorList.ShowErrors = true;
|
|
errorList.ShowWarnings = true;
|
|
errorList.ShowMessages = true;
|
|
|
|
var errorItems = errorList.ErrorItems as ErrorItems;
|
|
if (errorItems == null)
|
|
{
|
|
throw new InvalidOperationException("Unable to retrieve the error list items");
|
|
}
|
|
|
|
var errorTasks = new List<ErrorItem>();
|
|
|
|
for (int i = 1; i <= errorItems.Count; i++)
|
|
{
|
|
var errorItem = errorItems.Item(i);
|
|
var currentErrorLevel = (vsBuildErrorLevel)errorItem.ErrorLevel;
|
|
if (currentErrorLevel == errorLevel)
|
|
{
|
|
errorTasks.Add(errorItem);
|
|
}
|
|
}
|
|
|
|
return errorTasks.Select(e => e.Description as string).ToArray();
|
|
}
|
|
|
|
public static string[] GetErrors()
|
|
{
|
|
return ThreadHelper.JoinableTaskFactory.Run(() => GetErrorsAsync());
|
|
}
|
|
|
|
private static async Task<string[]> GetErrorsAsync()
|
|
{
|
|
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
|
|
|
|
var errorLevel = vsBuildErrorLevel.vsBuildErrorLevelHigh;
|
|
return await GetErrorTasksAsync(errorLevel);
|
|
}
|
|
|
|
public static string[] GetWarnings()
|
|
{
|
|
return ThreadHelper.JoinableTaskFactory.Run(() => GetWarningsAsync());
|
|
}
|
|
|
|
private static async Task<string[]> GetWarningsAsync()
|
|
{
|
|
await ThreadHelper.JoinableTaskFactory.SwitchToMainThreadAsync();
|
|
|
|
var errorLevel = vsBuildErrorLevel.vsBuildErrorLevelMedium;
|
|
var warnings = await GetErrorTasksAsync(errorLevel);
|
|
return warnings;
|
|
}
|
|
}
|
|
}
|