/* **************************************************************************** * * Copyright (c) Microsoft Corporation. * * This source code is subject to terms and conditions of the Apache License, Version 2.0. A * copy of the license can be found in the License.html file at the root of this distribution. If * you cannot locate the Apache License, Version 2.0, please send an email to * vspython@microsoft.com. By using this source code in any fashion, you are agreeing to be bound * by the terms of the Apache License, Version 2.0. * * You must not remove this notice, or any other, from this software. * * ***************************************************************************/ using Microsoft.VisualStudio; using Microsoft.VisualStudio.Shell.Interop; using Microsoft.VisualStudio.Text; using Microsoft.VisualStudio.Text.Editor; using Microsoft.VisualStudio.Project; using Microsoft.VisualStudio.Project.Automation; namespace Microsoft.VisualStudio { static class VsExtensions { public static string GetFilePath(this ITextView textView) { return textView.TextBuffer.GetFilePath(); } #if FALSE public static ITrackingSpan CreateTrackingSpan(this IIntellisenseSession session, ITextBuffer buffer) { var triggerPoint = session.GetTriggerPoint(buffer); var position = session.GetTriggerPoint(buffer).GetPosition(session.TextView.TextSnapshot); var snapshot = buffer.CurrentSnapshot; if (position == snapshot.Length) { return snapshot.CreateTrackingSpan(position, 0, SpanTrackingMode.EdgeInclusive); } else { return snapshot.CreateTrackingSpan(position, 1, SpanTrackingMode.EdgeInclusive); } } #endif public static EnvDTE.Project GetProject(this IVsHierarchy hierarchy) { object project; ErrorHandler.ThrowOnFailure( hierarchy.GetProperty( VSConstants.VSITEMID_ROOT, (int)__VSHPROPID.VSHPROPID_ExtObject, out project ) ); return (project as EnvDTE.Project); } public static CommonProjectNode GetCommonProject(this EnvDTE.Project project) { OAProject oaProj = project as OAProject; if (oaProj != null) { var common = oaProj.Project as CommonProjectNode; if (common != null) { return common; } } return null; } public static string GetRootCanonicalName(this IVsHierarchy heirarchy) { string path; ErrorHandler.ThrowOnFailure(heirarchy.GetCanonicalName(VSConstants.VSITEMID_ROOT, out path)); return path; } public static T[] Append(this T[] list, T item) { T[] res = new T[list.Length + 1]; list.CopyTo(res, 0); res[res.Length - 1] = item; return res; } public static string GetFilePath(this ITextBuffer textBuffer) { ITextDocument textDocument; if (textBuffer.Properties.TryGetProperty(typeof(ITextDocument), out textDocument)) { return textDocument.FilePath; } else { return null; } } } }