IVsHierarchyRefactorNotify Интерфейс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Уведомляет иерархию об операциях рефакторинга.
public interface class IVsHierarchyRefactorNotify
public interface class IVsHierarchyRefactorNotify
__interface IVsHierarchyRefactorNotify
[System.Runtime.InteropServices.Guid("FE5FEE31-C302-4961-876F-F3C8F853E4F8")]
[System.Runtime.InteropServices.InterfaceType(1)]
public interface IVsHierarchyRefactorNotify
[<System.Runtime.InteropServices.Guid("FE5FEE31-C302-4961-876F-F3C8F853E4F8")>]
[<System.Runtime.InteropServices.InterfaceType(1)>]
type IVsHierarchyRefactorNotify = interface
Public Interface IVsHierarchyRefactorNotify
- Атрибуты
Комментарии
Для поддержки операций рефакторинга система проектов должна реализовать объект IVsHierarchy , который представляет иерархию, IVsProject и IVsHierarchyRefactorNotify интерфейсы. Также необходимо реализовать языковую службу, чтобы обеспечить поддержку функций, связанных с редактированием исходного кода, включая операции рефакторинга. Дополнительные сведения о языковой службе см. в разделе интерфейсы языковой службы прежних версий.
Реализуя IVsHierarchyRefactorNotify , вы предоставляете языковую службу с возможностью уведомления IVsHierarchy интерфейса об операциях рефакторинга, таких как символьное переименование или Переупорядочение параметров. Если в иерархии используются поставщики сборок, генераторы отдельных файлов или другие службы для создания кода, он должен получить ссылку на объект, реализующий IVsRefactorNotify интерфейс.
Каждая система проектов и языковая служба определяют конкретный способ получения ссылки на IVsRefactorNotify объект. Например, системные Visual Basic Visual C# системы проектов,, или Visual J# получают ссылку на объект, реализующий, IVsRefactorNotify вызывая IUnknown::QueryInterface для объекта, реализующего интерфейс IVsSingleFileGenerator . Visual Basic Visual C# Visual J# Системы веб-проектов, или вызываются с QueryService помощью команды, Guid зарегистрированной в разделе реестра HKLM\Software\Microsoft\VisualStudio\8.0\Projects \ {Project-System-GUID} \филикстенсионс \ {файл Extension} \рефакторнотифи. Иерархия передает уведомление IVsRefactorNotify объекту для включения операции рефакторинга в файл конструктора или для завершения операции и возврата сообщения об ошибке через IErrorInfo. Файл конструктора может быть любым из входных файлов, предоставляемых Visual Studio , таких как файлы. resx,. xsd,. Settings,. Map и. MyApp, или любое другое расширение файла, связанное с генератором кода или поставщиком сборки.
Чтобы успешно выполнить полную операцию рефакторинга, иерархия должна извлечь файлы, переданные в, IVsHierarchyRefactorNotify и файлы, возвращаемые из соответствующих IVsRefactorNotify вызовов метода.
При сбое операции рефакторинга иерархия должна отображать сообщение об ошибке в окне сообщения.
Поток операций
Пользователь вызывает символьное переименование или любую другую операцию рефакторинга.
Visual StudioЯзыковая служба определяет, какие файлы кода затрагивает операция.
Языковая служба вызывает
IVsHierarchyRefactorNotify.OnBeforeметоды для уведомления иерархии о том, какие файлы затрагиваются этой операцией.Иерархия определяет, создаются ли какие либо затронутые файлы из файлов конструктора.
Если создаются файлы, иерархия получает ссылку на объект, который реализует IVsRefactorNotify и отправляет
IVsRefactorNotify.OnBeforeуведомления IVsRefactorNotify разработчику для каждого созданного файла.IVsRefactorNotifyРазработчик может прерывать операцию, возвращая сбой и настроив ошибку, вызвав
M:Microsoft.VisualStudio.Shell.Interop.IVsUIShell.SetErrorInfo(System.Int32,System.String,System.UInt32,System.String,System.String)метод. ЕслиIVsRefactorNotifyразработчику не нужно прекращать операцию, он определяет, какие файлы конструктора затрагивает операция, и возвращает набор файлов в IVsHierarchyRefactorNotify выходной массивVSITEMID.Примечание
IVsRefactorNotifyРазработчик не должен обновлять файлы конструктора на этом этапе. Файлы должны быть обновлены во время второго вызова
IVsRefactorNotify.Onметодов, например во время OnGlobalSymbolRenamed вызова метода.IVsRefactorNotify.OnBeforeМетод вызывает включение иерархии для извлечения созданных файлов в виде единицы. Иерархия позволяет прерывать всю операцию до внесения любых изменений, если один из генераторов кода не может использовать операцию рефакторинга.Если IVsRefactorNotify разработчик возвращает ошибку, иерархия должна оповещать пользователя об ошибке. Иерархия может продолжить операцию или отменить и ступ операцию рефакторинга. Если операция остановлена, HRESULT содержит следующие значения:
E_ABORT
OLE_E_PROMPTSAVECANCELLED
OLECMDERR_E_CANCELED
HR_E_CSHARP_USER_CANCEL.
Если IVsRefactorNotify разработчик возвращает ошибку или вызывающий запрос на продолжение при сбое, иерархия должна извлечь файлы, переданные в IVsHierarchyRefactorNotify , и файлы, возвращаемые из соответствующих IVsRefactorNotify вызовов методов.
Примечание
Некоторые операции рефакторинга не вызывают изменений в файле конструктора, поэтому файл конструктора не извлекается автоматически. IVsRefactorNotify Разработчик должен запросить извлечение файла конструктора, если содержимое изменено указанной операцией рефакторинга. Это достигается путем возвращения ВСИТЕМИД, который идентифицирует файл конструктора в выходном массиве. Примером сценария, в котором файл конструктора не требуется извлекать, является изменение пространства имен, хранящегося за пределами файла конструктора. Файл конструктора не требуется извлекать, даже если изменен созданный файл кода.
После извлечения иерархия возвращается из
IVsHierarchyRefactorNotify.OnBeforeвызова языковой службы.Языковая служба выполняет операцию рефакторинга.
Языковая служба уведомляет иерархию о завершении операции рефакторинга путем вызова
IVsHierarchyRefactorNotify.Onметодов, таких как OnGlobalSymbolRenamed , и иерархия уведомляет всех IVsRefactorNotify реализаций путем вызоваIVsRefactorNotify.Onметодов, таких как OnGlobalSymbolRenamed . Эквивалентное изменение рефакторинга выполняется в файлах конструктора. Это гарантирует, что операция рефакторинга останется сохраненной.
Методы
| OnAddParams(UInt32, String, UInt32, UInt32[], String[], String[]) |
Вызывается после добавления параметров в метод. |
| OnBeforeAddParams(UInt32, String, UInt32, UInt32[], String[], String[], Int32) |
Вызывается перед началом добавления параметров в метод. |
| OnBeforeGlobalSymbolRenamed(UInt32, UInt32[], UInt32, String[], String, Int32) |
Вызывается при начале переименования символа. |
| OnBeforeRemoveParams(UInt32, String, UInt32, UInt32[], Int32) |
Вызывается перед началом удаления параметров из метода. |
| OnBeforeReorderParams(UInt32, String, UInt32, UInt32[], Int32) |
Вызывается перед началом записи параметров в метод. |
| OnGlobalSymbolRenamed(UInt32, UInt32[], UInt32, String[], String) |
Вызывается после переименования символа. |
| OnRemoveParams(UInt32, String, UInt32, UInt32[]) |
Вызывается после удаления параметров из метода. |
| OnReorderParams(UInt32, String, UInt32, UInt32[]) |
Вызывается после переупорядочивания параметров в методе. |